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 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 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); //for (int j = 0; j < attackColliders.Count; j++) //{ // Collider c = null; // if (attackColliders[i] != null) // { // c = attackColliders[i]; // } // if (attackColliders[j] != null) // { // unmannedAerialVehicleManages[i].unmannedAerialVehicles[0].AttAck(attackColliders[j].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 (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 (equipmentCommon) { equipmentCommon.ReceivingPositionAngle(info); } } } public void OnDisalbe() { SyncCreateRoom.send2roomRequset -= GetSend2roomMsg; } }