using System.Collections; using System.Collections.Generic; using UnityEngine; using AdamThinkDevicesData; using AdamSync; using LitJson; using Newtonsoft.Json; /// /// 设备 /// public class EquipmentCommon : MonoBehaviour { public EquipmentCommon equipmentCommon; /// /// 场景所在方 /// public SelectedSide selectedSide = SelectedSide.Other; public string equipmentType = ""; /// /// 设备唯一ID /// public string deviceID; /// /// 是否是本人创建的设备 /// public bool isPlayer { get { return _isPlayer; } set { if (_isPlayer != value) { _isPlayer = value; OnActivationIsPlayer?.Invoke(_isPlayer); } } } public event System.Action OnActivationIsPlayer; private bool _isPlayer = false; // 布尔值变化时触发的事件 public event System.Action OnActivationChanged; private bool _isStartRehearsing = false; // 属性绑定布尔值,并在值变化时触发事件 public bool isStartRehearsing { get { return _isStartRehearsing; } set { if (_isStartRehearsing != value) { _isStartRehearsing = value; OnActivationChanged?.Invoke(_isStartRehearsing); } } } /// /// 爆炸预制体 /// public GameObject explodePrefab; void Start() { equipmentCommon = GetComponent(); DeviceManager.Instance.devices.Add(this); // 订阅布尔值变化事件 OnActivationChanged += OnActivationChangedHandler; // OnActivationIsPlayer += OnActivationChangedIsPlayer; } void OnActivationChangedIsPlayer(bool newValue) { if (newValue && equipmentType == "无人机List" && isOnlyOne) { isOnlyOne = false; latestData = GetSyncData(); InvokeRepeating("SendMsg", 0, 0.01f); UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent(); //unmannedAerialVehicleManage.unmannedAerialVehicles.ForEach(x => x.AddSendMsg());//每个无人机位置传递开启 } } /// /// 导条 暂停开始控制 /// /// void OnActivationChangedHandler(bool newValue) { switch (equipmentType) { case "激光火控平台": LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent(); laserFireControlPlatformManger.isStartRehearsing = isStartRehearsing; break; case "探测雷达": RadarManger radarManger = GetComponent(); radarManger.isStartRehearsing = isStartRehearsing; break; case "地面无线电干扰": TerrestrialRadioInterferenceManger terrestrialRadioInterferenceManger = GetComponent(); terrestrialRadioInterferenceManger.isStartRehearsing = isStartRehearsing; break; case "无人机List": UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent(); unmannedAerialVehicleManage.isStartRehearsing = isStartRehearsing; break; default: break; } } /// /// 物体生成时接受数据 /// /// public void FillInTheData(List weaponitemone) { //向其他的单位发送创建信息 if (isPlayer && equipmentCommon)//但是是由我自主创建的时候发送一次 且只发送一次 { Dictionary replaceInfoDic = new Dictionary(); string paraListJson = JsonConvert.SerializeObject(weaponitemone); replaceInfoDic.Add("PracticeId", GlobalFlag.roomID); replaceInfoDic.Add("PracticeSubjectId", GlobalFlag.practiceSubjectID); replaceInfoDic.Add("device_name", equipmentCommon.equipmentType); replaceInfoDic.Add("para_list", paraListJson); StartCoroutine(AsyncWebReq.PostData2("http://111.229.30.246:48888/Handler/Thinkingfile.ashx?action=addpracticedevicedetail", replaceInfoDic, ResultsInfo => { ReturnDeviceID returnID = JsonConvert.DeserializeObject(ResultsInfo); deviceID = returnID.data; string msg = $"send2room {equipmentCommon.equipmentType},{transform.position.ToString().Replace(" ", "").Replace("(", "").Replace(")", "")},{transform.eulerAngles.ToString().Replace(" ", "").Replace("(", "").Replace(")", "") + "," + returnID.data}"; _ = SyncCreateRoom.SendMessageAsync(msg); })); } //填入数据 switch (equipmentType) { case "激光火控平台": LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent(); laserFireControlPlatformManger.FillInTheData(weaponitemone); laserFireControlPlatformManger.isStartRehearsing = isStartRehearsing; break; case "探测雷达": RadarManger radarManger = GetComponent(); radarManger.FillInTheData(weaponitemone); break; case "地面无线电干扰": TerrestrialRadioInterferenceManger terrestrialRadioInterferenceManger = GetComponent(); terrestrialRadioInterferenceManger.FillInTheData(weaponitemone); break; case "无人机List": UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent(); unmannedAerialVehicleManage.FillInTheData(weaponitemone); break; default: break; } } /// /// 发送消息 /// public Queue send2roomStr = new Queue(); private void Update() { if (send2roomStr.Count > 0) { _ = SyncCreateRoom.SendMessageAsync(string.Format("send2room {0}", send2roomStr.Dequeue())); } } //位置实时传送 private string latestData = ""; private bool isOnlyOne = true; public void SendMsg() { var nowData = GetSyncData(); if (!nowData.Equals(latestData)) { latestData = nowData; Debug.Log(latestData); _ = SyncCreateRoom.SendMessageAsync(string.Format("send2room {0}", nowData)); } } /// /// 无人机整体位置传递 /// /// protected string GetSyncData() { return string.Format("{0},{1},{2},{3},{4},{5},{6},{7}", "DronePosition", equipmentCommon.deviceID, transform.position.x, transform.position.y, transform.position.z, transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z); } /// /// /// /// public void ReceivingPositionAngle(string[] data) { switch (data[0]) { case "DronePosition"://无人机位置信息传递 Vector3 pos = new Vector3(float.Parse(data[2]), float.Parse(data[3]), float.Parse(data[4])); Vector3 rot = new Vector3(float.Parse(data[5]), float.Parse(data[6]), float.Parse(data[7])); transform.position = pos; transform.eulerAngles = rot; break; case "Lasing"://激光发射位置传递 LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent(); if (laserFireControlPlatformManger) laserFireControlPlatformManger.NonSelfGeneratedEmissionLaser(data); break; case "SingleDronePosition"://单个无人机位置信息传递 UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent(); if (unmannedAerialVehicleManage) { UnmannedAerialVehicle unmannedAerialVehicle = unmannedAerialVehicleManage.unmannedAerialVehicles.Find(x => x.serialNumber == data[2]); if (unmannedAerialVehicle) { Vector3 Pos = new Vector3(float.Parse(data[3]), float.Parse(data[4]), float.Parse(data[5])); unmannedAerialVehicle.AttAck(Pos); } } break; case "DroneWasDestroyed"://单个无人机被销毁 UnmannedAerialVehicleManage _unmannedAerialVehicleManage = GetComponent(); if (_unmannedAerialVehicleManage) { UnmannedAerialVehicle unmannedAerialVehicle = _unmannedAerialVehicleManage.unmannedAerialVehicles.Find(x => x.serialNumber == data[2]); if (unmannedAerialVehicle) { unmannedAerialVehicle.AddBao(false); } } break; case "SetToBeDestroyed"://设备被销毁 GameObject Bao = Instantiate(explodePrefab, transform); Bao.transform.localPosition = Vector3.zero; Bao.transform.SetParent(null); Bao.SetActive(true); Destroy(transform.gameObject); break; default: break; } } private void OnDestroy() { // 订阅布尔值变化事件 OnActivationChanged -= OnActivationChangedHandler; // OnActivationIsPlayer -= OnActivationChangedIsPlayer; } } public enum SelectedSide { Rad, Blue, Director, Other }