using AdamThinkDevicesData; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; using static InterfaceManager; /// /// 频谱探测 /// public class Spectrumdetection : MonoBehaviour { public static List spectrumdetections = new List(); public EquipmentCommon equipmentCommon; #region 频谱探测的参数 /// /// 探测距离 /// public string Detectionrange; /// /// 批目标处理能力 /// public string Batchcapacity; /// /// 探测频率 /// public string frequency; /// /// 探测成功率 /// public string Detectionsuccessrate; /// /// 探测响应时间 /// public string Responsetime; /// /// 测向精度 /// public string Directionfindingaccuracy; /// /// 最小探测速度 /// public string Minimumdetectionvelocity; #endregion 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 GameObject SpectrumdetectionUI; /// /// 显示UI频段页面 /// public Image Frequencyiamge; /// /// 关闭按钮 /// public Button frenbutton; /// /// 确认按钮 /// public Button queren_btn; /// /// 选择最终的频段 /// //public Toggle toggle1, toggle2, toggle3, toggle4, toggle5, toggle6, toggle7; /// /// 频段设置 /// public List toggles = new List(); /// /// 最终的波段 /// public string Frequency; /// /// 最终选择的波段 /// public string Frequencysuccessrate; /// /// 摄像机显示层数 /// public Camera Camera1; /// /// /// public RawImage rawImage; /// /// /// private bool onlyOne = true; /// /// 接收探测范围 /// public static float Radius; public Transform radarCenter; public List targets = new List(); public Image radarBackground; public GameObject targetPointPrefab; void Start() { radarCenter=this.transform; Camera1.gameObject.SetActive(false); spectrumdetections.Add(this); equipmentCommon = GetComponent(); // 订阅布尔值变化事件 OnActivationChanged += OnActivationChangedHandler; _isStartRehearsing = GlobalFlag.isStartRehearsing; Microwave(); //DroneViewDisplay.Instance.CreateUI(equipmentCommon.deviceID, camera, rawImage); } void Update() { if (isStartRehearsing) { Camera1.gameObject.SetActive(true); targets = GameObject.FindGameObjectsWithTag("WRJ").ToList().FindAll(Conformto); foreach (Transform child in rawImage.transform) { Destroy(child.gameObject); } foreach (GameObject target in targets) { Vector3 relativePosition = target.transform.position - radarCenter.position; Vector2 radarPosition = new Vector2(relativePosition.x, relativePosition.z) * 0.1f; GameObject point = Instantiate(targetPointPrefab, rawImage.transform); RectTransform rt = point.GetComponent(); rt.anchoredPosition = radarPosition; } Search();//微波武器朝向无人机 } //if (onlyOne && equipmentCommon.deviceID.Length > 10) //{ // onlyOne = false; // DroneViewDisplay.Instance.CreateUI(equipmentCommon.deviceID, Camera1, rawImage); //} } /// /// 判断是否符合位置 /// public bool Conformto(GameObject obj) { if (obj.GetComponent() && Frequency.Contains(obj.GetComponent().dataLinkCommunicationFrequency)) { return true; } else { return false; } } private void Microwave() { frenbutton.onClick.AddListener(() => { Frequencyiamge.gameObject.SetActive(false); }); queren_btn.onClick.AddListener(() => { Frequencyiamge.gameObject.SetActive(false); //List ints = new List(); //string[] str = Frequency.Split(';'); //for (int i = 0; i < str.Length; i++) //{ // int index = i; // if (str[i] != "") // { // int layerValue = LayerMask.NameToLayer(str[index]); // ints.Add(layerValue); // //Debug.LogError(str[index]); // //Camera1.cullingMask = 1 << layerValue; // } //} //for (int i = 0; i < ints.Count; i++) //{ // Camera1.cullingMask |= 1 << ints[i]; //} FrequencyBandsValueChanged(); }); //foreach (Toggle toggle in toggles) //{ // toggle.onValueChanged.AddListener(delegate { // FrequencyBandsValueChanged(toggle); // }); //} for (int i = 0; i < toggles.Count; i++) { int index = i; toggles[index].onValueChanged.AddListener((ison) => { if (ison == true) { Frequency += toggles[index].name + ";"; } else { string str = toggles[index].name + ";"; Frequency = Frequency.Replace(str, ""); } }); } } void FrequencyBandsValueChanged() { string nowData = GetSyncDataThree(); MyNetMQClient.instance.Send(nowData); equipmentCommon.SetDatabaseInfo("scan_rate", Frequency); //DeviceManager.Instance.send2roomStr.Enqueue(nowData); //MQTTManager.instance.SendData(MQTTManager.instance.SweepFrequencyBand, nowData); } string GetSyncDataThree() { UploadLog(); return string.Format("{0},{1},{2},{3}", "SweepFrequencyBand", "PPTC", equipmentCommon.deviceID, Frequency); } public void UploadLog() { string currentTime = System.DateTime.Now.ToString(); List uploadLogMains = new List(); UploadLogMain uploadLogMain = new UploadLogMain(); uploadLogMain.PracticeId = GlobalFlag.practiceSubjectID; uploadLogMain.ThinkId = GlobalFlag.currentThinkId; string log = currentTime + " " + transform.name + "(" + equipmentCommon.deviceID + ")频段设置为" + Frequency; uploadLogMain.log = log; uploadLogMains.Add(uploadLogMain); string uploadLogMainJson = JsonConvert.SerializeObject(uploadLogMains); WWWForm wWWForm = new WWWForm(); wWWForm.AddField("data", uploadLogMainJson); StartCoroutine(PostString(Url_Addpracticelog, wWWForm, data => { Debug.Log(data); })); } /// /// /// 频段设置方法 /// /// //void FrequencyBandsValueChanged(Toggle change) //{ // if (change.isOn) // { // Frequency = change.transform.name; // int layerValue = LayerMask.NameToLayer(Frequency); // Camera1.cullingMask = (1 << layerValue); // string nowData = GetSyncDataThree(); // MyNetMQClient.instance.Send(nowData); // equipmentCommon.SetDatabaseInfo("scan_rate", Frequency); // //DeviceManager.Instance.send2roomStr.Enqueue(nowData); // //MQTTManager.instance.SendData(MQTTManager.instance.SweepFrequencyBand, nowData); // } //} public void CameraFrequency(string _frequency) { Frequency = _frequency; //List ints = new List(); //string[] str = _frequency.Split(';'); //for (int i = 0; i < str.Length; i++) //{ // int layerValue = LayerMask.NameToLayer(str[i]); // ints.Add(layerValue); //} //for (int i = 0; i < ints.Count; i++) //{ // Camera1.cullingMask |= 1 << ints[i]; //} } /// /// 设置扫描频段同步 /// /// //protected string GetSyncDataThree() //{ // UploadLog(); // return string.Format("{0},{1},{2},{3}", "SweepFrequencyBand", "PPTC", equipmentCommon.deviceID, Frequency); //} /// ///上传日志 /// /// //public void UploadLog() //{ // string currentTime = System.DateTime.Now.ToString(); // List uploadLogMains = new List(); // UploadLogMain uploadLogMain = new UploadLogMain(); // uploadLogMain.PracticeId = GlobalFlag.practiceSubjectID; // uploadLogMain.ThinkId = GlobalFlag.currentThinkId; // string log = currentTime + " " + transform.name + "(" + equipmentCommon.deviceID + ")频段设置为" + Frequency; // uploadLogMain.log = log; // uploadLogMains.Add(uploadLogMain); // string uploadLogMainJson = JsonConvert.SerializeObject(uploadLogMains); // WWWForm wWWForm = new WWWForm(); // wWWForm.AddField("data", uploadLogMainJson); // StartCoroutine(PostString(Url_Addpracticelog, wWWForm, data => // { // //Debug.Log(data); // })); //} /// /// 演习是否启动 /// void OnActivationChangedHandler(bool bol) { if (bol) { Debug.Log("开始演练"); } else { Debug.Log("结束演练"); } } /// /// 读取设备参数 /// public void FillInTheData(List weaponitemone) { for (int i = 0; i < weaponitemone.Count; i++) { switch (weaponitemone[i].para_name) { case "探测距离:": Detectionrange = weaponitemone[i].para_value; Radius = float.Parse(Detectionrange); Camera1.orthographicSize = Radius * 1000; break; case "批目标处理能力:": Batchcapacity = weaponitemone[i].para_value; break; case "侦测频率:": string[] str = weaponitemone[i].para_value.Split(','); if (str.Length > 0) { for (int j = 0; j < str.Length; j++) { switch (str[j]) { case "0": frequency += "UHF" + ","; break; case "1": frequency += "L" + ","; break; case "2": frequency += "S" + ","; break; case "3": frequency += "C" + ","; break; case "4": frequency += "X" + ","; break; case "5": frequency += "Ku" + ","; break; case "6": frequency += "Ka" + ","; break; default: break; } } } break; case "探测成功率:": Detectionsuccessrate = weaponitemone[i].para_value; break; case "探测响应时间:": Responsetime = weaponitemone[i].para_value; break; case "测向精度:": Directionfindingaccuracy = weaponitemone[i].para_value; break; case "最小探测速度:": Minimumdetectionvelocity = weaponitemone[i].para_value; break; default: break; } } Microwavefrequency(); } private void Microwavefrequency() { if (frequency.Length > 0) { string[] str = frequency.Split(','); for (int i = 0; i < str.Length; i++) { var _tog = toggles.Find(x => x.transform.name == str[i]); if (_tog) _tog.gameObject.SetActive(true); } } } public Collider[] colliders; public List attackColliders1 = new List(); /// /// 搜索范围内的无人机 /// private void Search() { attackColliders1.Clear(); colliders = Physics.OverlapSphere(transform.position, float.Parse(Detectionrange) * 1000); for (int i = 0; i < colliders.Length; i++) { if (colliders[i].transform.gameObject.tag == "WRJ") { //Debug.LogError("进来了"); UnmannedAerialVehicle unmannedAerialVehicle = null; if (colliders[i].GetComponent()) { attackColliders1.Add(colliders[i]); unmannedAerialVehicle = colliders[i].GetComponent(); if (unmannedAerialVehicle != null && unmannedAerialVehicle.unmannedAerialVehicleManage.dataLinkCommunicationFrequency == Frequency) { foreach (var terrestrialRadioInterferenceManger in TerrestrialRadioInterferenceManger.terrestrialRadioInterferenceMangers) { if (terrestrialRadioInterferenceManger != null) { Vector3 lookPos = new Vector3(unmannedAerialVehicle.transform.position.x, terrestrialRadioInterferenceManger.transform.position.y, unmannedAerialVehicle.transform.position.z); terrestrialRadioInterferenceManger.transform.LookAt(lookPos); } } } } } } } private void OnMouseDown() { if (!GlobalFlag.isStartRehearsing && GlobalFlag.blueOrRed == 1) { GameManager.Instance.GetAllImportance(); EquipmentCommon equipmentCommon1 = GetComponent(); if (equipmentCommon.deviceID == equipmentCommon1.deviceID) { Frequencyiamge.transform.position = Camera.main.WorldToScreenPoint(transform.position); Frequencyiamge.gameObject.SetActive(true); } } if (equipmentCommon.isPlayer) { SpectrumdetectionUI.SetActive(true); } //SpectrumdetectionUI.SetActive(true); } private void OnDestroy() { for (int i = 0; i < spectrumdetections.Count; i++) { if (spectrumdetections[i] == null) { spectrumdetections.RemoveAt(i); } } Destroy(Frequencyiamge.gameObject); OnActivationChanged -= OnActivationChangedHandler; } }