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; // Start is called before the first frame update 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.035f); if(send2roomStr.Count==0) isOnlyOne = true; } } public void AddDevice(EquipmentCommon d) { if (!devices.Contains(d)) { devices.Add(d); } } public void GetSend2roomMsg(string data) { data = data.Replace("send2room", ""); Debug.LogError("设备..:" + data); string[] info = data.Split(','); if (info.Length < 2) return; EquipmentCommon equipmentCommon = devices.Find(x => x.deviceID == info[1]); if (equipmentCommon) { equipmentCommon.ReceivingPositionAngle(info); } } public void OnDisalbe() { SyncCreateRoom.send2roomRequset -= GetSend2roomMsg; } }