using System.Collections.Generic; using UnityEngine; using System.Text; 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; public void OnInit() { // 订阅布尔值变化事件 OnActivationChanged += OnActivationChangedHandler; //接收实时传输数据 //SyncCreateRoom.send2roomRequset += GetSend2roomMsg; LoadManage.Instance.reciveData += GetSend2roomMsg; } void Start() { } /// /// 导条 暂停开始控制 /// /// 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()); //} #if UNITY_EDITOR if (Input.GetKeyDown(KeyCode.Space)) { isStartRehearsing = !isStartRehearsing; Debug.Log("编辑器测试...导条状态..:" + isStartRehearsing); } #endif } public void AddDevice(EquipmentCommon d) { if (!devices.Contains(d)) { devices.Add(d); } } public void RemoveDevice(GameObject obj) { if (devices.Contains(obj.GetComponent())) devices.Remove(obj.GetComponent()); } public int GetPlayerDevice() { List temp = new List(); for (int i = 0; i < devices.Count; i++) { if (devices[i] != null && devices[i].isPlayer) { temp.Add(devices[i].gameObject); } } return temp.Count; } /// /// 获取所以当前玩家的设备 /// /// public List GetPlayerDecive1() { List temp = new List(); for (int i = 0; i < devices.Count; i++) { if (devices[i] != null && devices[i].isPlayer) { temp.Add(devices[i].gameObject); } } return temp; } /// /// 获取光学无人机和自杀式无人机 /// /// 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 List unmannedAerialVehicleManages; public void SetCollider4WRJ(List attackColliders, ref Collider currentTarget) { for (int i = 0; i < attackColliders.Count; i++) { if (attackColliders[i] == null) attackColliders.RemoveAt(i); } if (attackColliders.Count > 0) { unmannedAerialVehicleManages = GetGXWRJAndZSWRJ(); for (int i = 0; i < unmannedAerialVehicleManages.Count; i++) { if (unmannedAerialVehicleManages[i].unmannedAerialVehicles[0] != null && unmannedAerialVehicleManages[i].unmannedAerialVehicles[0].gameObject.activeSelf) { if (unmannedAerialVehicleManages[i].unmannedAerialVehicles[0].attackTarget == null) { unmannedAerialVehicleManages[i].unmannedAerialVehicles[0].AttAck(attackColliders[0].transform); } } } } } /// /// 处理数据 /// /// /// public void GetSend2roomMsg(byte[] _data) { string data = Encoding.UTF8.GetString(_data).Replace("send2room", ""); string[] info = data.Split(','); if (info.Length < 2) return; if (info[0] == "KeyTarget") { Debug.Log("接收处理:KeyTarget...:" + data); HighPriorityTarget highPriorityTarget = HighPriorityTarget.HighPriorityTargets.Find(x => x.Number == info[1]); if (highPriorityTarget) { Vector3 Pos = new Vector3(float.Parse(info[3]), float.Parse(info[4]), float.Parse(info[5])); highPriorityTarget.BeAssaulted(Pos, false, int.Parse(info[2])); } } else if (info[0] == "BandSetting") { if (info[1] == "WRJ") { UnmannedAerialVehicleManage unmannedAerialVehicleManage = UnmannedAerialVehicleManage.unmannedAerialVehicleManages.Find(x => x.equipmentCommon.deviceID == info[2]); if (unmannedAerialVehicleManage) { unmannedAerialVehicleManage.FrequencyGamepos(info[3]); } } else if (info[1] == "ZYMB") { HighPriorityTarget highPriorityTarget = HighPriorityTarget.HighPriorityTargets.Find(x => x.Number == info[2]); if (highPriorityTarget) { highPriorityTarget.FrequencyGamepos(info[3]); } } } else if (info[0] == "SweepFrequencyBand") { if (info[1] == "WRJ") { UnmannedAerialVehicleManage unmannedAerialVehicleManage = UnmannedAerialVehicleManage.unmannedAerialVehicleManages.Find(x => x.equipmentCommon.deviceID == info[2]); if (unmannedAerialVehicleManage) { unmannedAerialVehicleManage.SurveillanceFrequency(info[3]); } } else if (info[1] == "PPTC") { Spectrumdetection spectrumdetection = Spectrumdetection.spectrumdetections.Find(x => x.equipmentCommon.deviceID == info[2]); if (spectrumdetection) { spectrumdetection.CameraFrequency(info[3]); } } } else if(info[0] == "FlySpeed") { if (info[1] == "WRJ") { UnmannedAerialVehicleManage unmannedAerialVehicleManage = UnmannedAerialVehicleManage.unmannedAerialVehicleManages.Find(x => x.equipmentCommon.deviceID == info[2]); if (unmannedAerialVehicleManage) { unmannedAerialVehicleManage.GetFlySpeedFormOther(info[3]); } } } else { EquipmentCommon equipmentCommon = devices.Find(x => x.deviceID == info[1]); if (equipmentCommon) { equipmentCommon.ReceivingPositionAngle(info); } } } public void OnDisalbe() { //SyncCreateRoom.send2roomRequset -= GetSend2roomMsg; } }