using AdamSync; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class GameManager : MonoBehaviour { public SyncPlayerTransform playerTransformPrefab; public Transform spawnPos; public List userIds = new List(); // Start is called before the first frame update private void Start() { SyncCreateRoom.getroomusersRequset += OnGetRoomUsers; SyncCreateRoom.send2roomRequset += OnOtherPlayerOnline; SyncPlayerTransform spt = Instantiate(playerTransformPrefab); spt.gameObject.SetActive(true); spt.gameObject.transform.position = spawnPos.position; spt.gameObject.transform.eulerAngles = spawnPos.eulerAngles; spt.SetPlayerInfo(ulong.Parse(GlobalFlag.currentUser.user_id), GlobalFlag.currentUser.login_name, ulong.Parse(GlobalFlag.roomID), true); userIds.Add(ulong.Parse(GlobalFlag.currentUser.user_id)); string msg = "getroomusers "; _ = SyncCreateRoom.SendMessageAsync(msg); } public void OnOtherPlayerOnline(string msg) { StopCoroutine(WaitSpawn(msg)); StartCoroutine(WaitSpawn(msg)); } private IEnumerator WaitSpawn(string msg) { yield return new WaitForSeconds(0.5f); Debug.Log(msg); string[] data = msg.Split(','); switch (data[0]) { case "online": ulong userId = ulong.Parse(data[1]); if (!userIds.Contains(userId)) { SyncPlayerTransform spt = Instantiate(playerTransformPrefab); spt.gameObject.SetActive(true); spt.gameObject.transform.position = spawnPos.position; spt.gameObject.transform.eulerAngles = spawnPos.eulerAngles; spt.SetPlayerInfo(ulong.Parse(data[1]), data[2], ulong.Parse(data[3]), false); } break; case "offline": break; } } private void OnGetRoomUsers(string obj) { if (string.IsNullOrWhiteSpace(obj)) return; string[] data = obj.Split(';'); Debug.Log("datas=" + data[0]); for (int i = 0; i < data.Length; i++) { int index = i; string[] userInfo = data[index].Split(','); if (!userIds.Contains(ulong.Parse(userInfo[0]))) { SyncPlayerTransform spt = Instantiate(playerTransformPrefab); spt.gameObject.SetActive(true); spt.SetPlayerInfo(ulong.Parse(userInfo[0]), userInfo[1], ulong.Parse(userInfo[2]), false); spt.transform.position = new Vector3(spawnPos.position.x + index * 0.5f, spawnPos.position.y, spawnPos.position.z + index * 0.5f); spt.transform.eulerAngles = spawnPos.eulerAngles; userIds.Add(ulong.Parse(userInfo[0])); } } string msg = string.Format("send2room " + "online,"+ ulong.Parse(GlobalFlag.currentUser.user_id)); _ = SyncCreateRoom.SendMessageAsync(msg); } public void OnBack() { SceneManager.LoadScene("TEstSync"); } }