using AdamSync; using System.Collections; using System.Collections.Generic; using UnityEngine; public class DeviceManager : MonoSingleton { /// /// 所有设备 /// public List devices = new List(); /// /// 发送消息 /// public Queue send2roomStr = new Queue(); private bool _isStartRehearsing = false; // 属性绑定布尔值,并在值变化时触发事件 public bool isStartRehearsing { get { return _isStartRehearsing; } set { if (_isStartRehearsing != value) { _isStartRehearsing = value; OnActivationChanged?.Invoke(_isStartRehearsing); } } } // 布尔值变化时触发的事件 public event System.Action OnActivationChanged; void Start() { SyncCreateRoom.send2roomRequset += GetSend2roomMsg; // 订阅布尔值变化事件 OnActivationChanged += OnActivationChangedHandler; } /// /// 导条 暂停开始控制 /// /// void OnActivationChangedHandler(bool newValue) { devices.ForEach(x => x.isStartRehearsing = newValue); } public bool isOnlyOne = true; private void Update() { if (send2roomStr.Count > 0 && isOnlyOne) { isOnlyOne = false; StartCoroutine(DequeueSend2roomStr()); } } IEnumerator DequeueSend2roomStr() { while (send2roomStr.Count > 0) { _ = SyncCreateRoom.SendMessageAsync(string.Format("send2room {0}", send2roomStr.Dequeue())); yield return new WaitForSeconds(0.05f); if (send2roomStr.Count == 0) isOnlyOne = true; } } public void AddDevice(EquipmentCommon d) { if (!devices.Contains(d)) { devices.Add(d); } } /// /// 获取光学无人机和自杀式无人机 /// /// public List GetGXWRJAndZSWRJ() { List tempUAM = new List(); for (int i = 0; i < devices.Count; i++) { if (devices[i] != null && devices[i].gameObject.name.Contains("无人机")) { UnmannedAerialVehicleManage temp = devices[i].GetComponent(); if (temp != null) { if (temp.wrjModel == WRJModel.光学无人机 || temp.wrjModel == WRJModel.自杀式无人机) tempUAM.Add(temp); } } } return tempUAM; } public void SetCollider4WRJ(List attackColliders) { int _number = Random.Range(0, attackColliders.Count - 1); if (attackColliders.Count > 0) { List temp = GetGXWRJAndZSWRJ(); for (int i = 0; i < temp.Count; i++) { for (int j = 0; j < temp[i].unmannedAerialVehicles.Count; j++) { if(temp[i].unmannedAerialVehicles[j] != null && temp[i].unmannedAerialVehicles[j].gameObject.activeSelf) { temp[i].unmannedAerialVehicles[j].AttAck(attackColliders[_number].transform); } } } } } public void GetSend2roomMsg(string data) { data = data.Replace("send2room", ""); //Debug.LogError("设备..:" + data); string[] info = data.Split(','); //foreach (string s in info) //{ // Debug.LogError(s); //} if (info.Length < 2) return; EquipmentCommon equipmentCommon = devices.Find(x => x.deviceID == info[1]); if (info[0] == "EditorDevice") { equipmentCommon.GetComponent().InterferingFrequency = info[2]; } else { if (equipmentCommon) { equipmentCommon.ReceivingPositionAngle(info); } } } public void OnDisalbe() { SyncCreateRoom.send2roomRequset -= GetSend2roomMsg; } }