using AdamSync; using AdamThinkDevicesData; using Boo.Lang; using RDate; using System; using System.Collections; using System.Collections.Generic; using Tenkoku.Core; using UnityEditorInternal; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class GameManager : MonoSingleton { public SyncPlayerTransform playerTransformPrefab; public SyncPlayerTransform currentSpt; public Transform spawnPos; public System.Collections.Generic.List userIds = new System.Collections.Generic.List(); public TenkokuModule tenkokuModule; public System.Collections.Generic.List modelsInfo = new System.Collections.Generic.List(); public Transform dviceContent; public DragController wrjDrag; public DragController ldDrag; public DragController hpDrag; public DragController wxdDrag; public GameObject Teacher; public GameObject student; public System.Collections.Generic.List players = new System.Collections.Generic.List(); // Start is called before the first frame update private void Awake() { SyncCreateRoom.getroomusersRequset += OnGetRoomUsers; SyncCreateRoom.send2roomRequset += OnRoomInfo; 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); currentSpt = spt; AddPlayers(spt); ToolsBootstrap.Instance.SetCameraInfo(spt); //0 red 1 blue if (UIBootstrap.Instance.GetRoleByIDPracticeId(GlobalFlag.practiceSeatId) == "0") { spt.GetComponent().cullingMask = ~(1 << 12); if (UIBootstrap.Instance.GetDeviceByName("蜂群无人机").device_count > 0) { for (int i = 0; i < UIBootstrap.Instance.GetDeviceByName("蜂群无人机").device_count; i++) { DragController wrj = Instantiate(wrjDrag, dviceContent); wrj.isPlayer = true; wrj.deviceID = UIBootstrap.Instance.GetDeviceByName("蜂群无人机").id; } } } else { spt.GetComponent().cullingMask = ~(1 << 11); if (UIBootstrap.Instance.GetDeviceByName("探测雷达").device_count > 0) { for (int i = 0; i < UIBootstrap.Instance.GetDeviceByName("探测雷达").device_count; i++) { DragController ld = Instantiate(ldDrag, dviceContent); ld.deviceID = UIBootstrap.Instance.GetDeviceByName("探测雷达").id; } } if (UIBootstrap.Instance.GetDeviceByName("激光火控平台").device_count > 0) { for (int i = 0; i < UIBootstrap.Instance.GetDeviceByName("激光火控平台").device_count; i++) { DragController hp = Instantiate(hpDrag, dviceContent); hp.deviceID = UIBootstrap.Instance.GetDeviceByName("激光火控平台").id; } } if (UIBootstrap.Instance.GetDeviceByName("地面无线电干扰").device_count > 0) { for (int i = 0; i < UIBootstrap.Instance.GetDeviceByName("地面无线电干扰").device_count; i++) { DragController wxd = Instantiate(wxdDrag, dviceContent); wxd.deviceID = UIBootstrap.Instance.GetDeviceByName("地面无线电干扰").id; } } } ///04 student 03 teacher if (GlobalFlag.currentUser.role_code == "04") { Teacher.gameObject.SetActive(false); student.gameObject.SetActive(true); GlobalFlag.isStartRehearsing = (UIBootstrap.Instance.GetRoomStateById(GlobalFlag.roomID) == 1); Debug.Log($"isStartRehearsing={ GlobalFlag.isStartRehearsing}"); if (GlobalFlag.isStartRehearsing) { spt.GetComponent().cullingMask = -1; } } if (GlobalFlag.currentUser.role_code == "03") { Teacher.gameObject.SetActive(true); student.gameObject.SetActive(false); spt.GetComponent().cullingMask = -1; } userIds.Add(ulong.Parse(GlobalFlag.currentUser.user_id)); tenkokuModule.mainCamera = spt.transform; } public void Start() { SetWeatherValue(); SetModelValue(); string msg = "getroomusers "; _ = SyncCreateRoom.SendMessageAsync(msg); } private void Update() { if (UIBootstrap.Instance.GetRoleByIDPracticeId(GlobalFlag.practiceSeatId) == "0" && Input.GetMouseButtonDown(1)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo, 1000)) { if (hitInfo.collider.tag == "WRJ") { UnmannedAerialVehicleUI.Instance.unmannedAerialVehicleManage = hitInfo.collider.GetComponent(); } } } } public void AddPlayers(SyncPlayerTransform s) { if (!players.Contains(s)) { players.Add(s); } } public void RemovePlayer(ulong playerID) { for (int i = 0; i < players.Count; i++) { if (players[i].userID == playerID) { Destroy(players[i].gameObject); players.RemoveAt(i); userIds.Remove(playerID); } } } public void OnRoomInfo(string msg) { StopCoroutine(WaitSpawn(msg)); StartCoroutine(WaitSpawn(msg)); } private IEnumerator WaitSpawn(string msg) { yield return new WaitForSeconds(0.5f); 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); AddPlayers(spt); } break; case "StartDeduction": CheckRoomState(); break; case "无人机List": SpawnDevice(wrjDrag.prefabItem, data); break; case "地面无线电干扰": SpawnDevice(wxdDrag.prefabItem, data); break; case "探测雷达": SpawnDevice(ldDrag.prefabItem, data); break; case "激光火控平台": SpawnDevice(hpDrag.prefabItem, data); break; case "Stop": GlobalFlag.isStartRehearsing = false; for (int i = 0; i < DeviceManager.Instance.devices.Count; i++) { DeviceManager.Instance.devices[i].isStartRehearsing = false; } break; case "EndDeduction": GlobalFlag.isStartRehearsing = false; for (int i = 0; i < DeviceManager.Instance.devices.Count; i++) { DeviceManager.Instance.devices[i].isStartRehearsing = false; } break; case "offline": break; default: break; } } public async void CheckRoomState() { RoomState roomState = await AsyncWebReq.Post("http://111.229.30.246:48888/Handler/Practice.ashx?action=updatestate&Id=" + GlobalFlag.roomID + "&state=1", null); if (roomState.message == "success") { GlobalFlag.isStartRehearsing = true; for (int i = 0; i < DeviceManager.Instance.devices.Count; i++) { DeviceManager.Instance.devices[i].isStartRehearsing = true; } if (GlobalFlag.currentUser.role_code == "04") { currentSpt.GetComponent().cullingMask = -1; } } } //} /// /// 获取别的客户端生成得设备 /// /// /// /// public async void SpawnDevice(GameObject devicePrefab = null, string[] deviceInfo = null) { DeviceData deviceData = await AsyncWebReq.Get("http://111.229.30.246:48888/Handler/Thinkingfile.ashx?action=querypracticedevicedetail&PracticeId=" + GlobalFlag.roomID + "&PracticeSubjectId=" + GlobalFlag.practiceSubjectID); if (devicePrefab != null && deviceInfo != null) { for (int i = 0; i < deviceData.data.Count; i++) { if (deviceData.data[i].id == deviceInfo[7]) { SpawnDevice(devicePrefab, deviceData.data[i], deviceInfo); } } } else { for (int i = 0; i < deviceData.data.Count; i++) { switch (deviceData.data[i].device_name) { case "无人机List": SpawnDevice(wrjDrag.prefabItem, deviceData.data[i]); break; case "地面无线电干扰": SpawnDevice(wxdDrag.prefabItem, deviceData.data[i]); break; case "探测雷达": SpawnDevice(ldDrag.prefabItem, deviceData.data[i]); break; case "激光火控平台": SpawnDevice(hpDrag.prefabItem, deviceData.data[i]); break; } } } } public void SpawnDevice(GameObject obj, AdamThinkDevicesData.DataItem data, string[] tran = null) { GameObject device = Instantiate(obj); if (tran != null) { device.transform.position = new Vector3(float.Parse(tran[1]), float.Parse(tran[2]), float.Parse(tran[3])); device.transform.eulerAngles = new Vector3(float.Parse(tran[4]), float.Parse(tran[5]), float.Parse(tran[6])); } device.GetComponent().deviceID = data.id; device.GetComponent().FillInTheData(data.list_para); } private void OnGetRoomUsers(string obj) { if (!string.IsNullOrWhiteSpace(obj)) { string[] data = obj.Split(';'); 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; AddPlayers(spt); userIds.Add(ulong.Parse(userInfo[0])); } } } Debug.Log($"OnGetRoomUsers={obj}"); SpawnDevice(); string msg = $"send2room online,{ulong.Parse(GlobalFlag.currentUser.user_id)},{GlobalFlag.currentUser.login_name},{ulong.Parse(GlobalFlag.roomID)}"; _ = SyncCreateRoom.SendMessageAsync(msg); } public void SetWeatherValue() { tenkokuModule.weather_RainAmt = Mathf.Lerp(0f, 1f, float.Parse(UIBootstrap.Instance.currentSceneInfo.data.EnvRain)); tenkokuModule.weather_SnowAmt = Mathf.Lerp(0f, 1f, float.Parse(UIBootstrap.Instance.currentSceneInfo.data.EnvSnow)); tenkokuModule.weather_WindAmt = Mathf.Lerp(0f, 1f, float.Parse(UIBootstrap.Instance.currentSceneInfo.data.EnvWindSpeed)); tenkokuModule.weather_WindDir = Mathf.Lerp(0f, 1f, float.Parse(UIBootstrap.Instance.currentSceneInfo.data.EnvWindDir)); tenkokuModule.weather_lightning = Mathf.Lerp(0f, 1f, float.Parse(UIBootstrap.Instance.currentSceneInfo.data.EnvLight)); } public void SetModelValue() { string info = UIBootstrap.Instance.currentSceneInfo.data.DeviceContent; Debug.Log(info); if (info.Length > 0 && !string.IsNullOrWhiteSpace(info)) { modelsInfo = Jsonanalyze.FromJson>(info); for (int i = 0; i < modelsInfo.Count; i++) { GameObject obj = Resources.Load(modelsInfo[i].str); GameObject go = Instantiate(obj); go.transform.position = new Vector3(float.Parse(modelsInfo[i].x.ToString()), float.Parse(modelsInfo[i].y.ToString()), float.Parse(modelsInfo[i].z.ToString())); } } } private void OnDisable() { Debug.Log("OnDisable"); Reset(); } private void Reset() { SyncCreateRoom.getroomusersRequset -= OnGetRoomUsers; SyncCreateRoom.send2roomRequset -= OnRoomInfo; string _msg = "leaveroom "; _ = AdamSync.SyncCreateRoom.SendMessageAsync(_msg); } } [Serializable] public class ModelInfo { public string str; public double x; public double y; public double z; }