using System.Collections; using System.Collections.Generic; using UnityEngine; using AdamThinkDevicesData; using AdamSync; using DG.Tweening; using Newtonsoft.Json; using static InterfaceManager; /// /// 地面无线电干扰控制 /// public class TerrestrialRadioInterferenceManger : MonoBehaviour { public EquipmentCommon equipmentCommon; #region 地面无线电干扰数据 /// /// 干扰频率 /// public string InterferingFrequency; /// /// 干扰模式 /// public string InterferenceMode; /// /// 发射功率 /// public string TransmittedPower; /// /// 干扰角度 /// public string InterferenceAngle; /// /// 干扰距离 /// public string InterferenceDistance; #endregion public float detectionRadius = 5f; // 检测范围半径 #region 启动暂停 private bool _isStartRehearsing = false; /// /// 是否正在预演 /// public bool isStartRehearsing { get { return _isStartRehearsing; } set { if (_isStartRehearsing != value) { _isStartRehearsing = value; OnActivationChanged?.Invoke(_isStartRehearsing); } } } /// /// 布尔值变化时触发的事件 /// public event System.Action OnActivationChanged; /// /// 协程对象 /// private Coroutine timerCoroutine; /// /// 定时器运行状态 /// private bool isTimerRunning = false; /// /// 间隔时间 /// public float interval = 5.0f; #endregion /// /// 爆炸预制体 /// public GameObject explodePrefab; // Start is called before the first frame update void Start() { equipmentCommon = GetComponent(); // 订阅布尔值变化事件 OnActivationChanged += OnActivationChangedHandler; } // Update is called once per frame void Update() { if (unmannedAerialVehicles.Count > 0 && isDo) { isDo = false; UnmannedAerialVehicle unmannedAerialVehicle = unmannedAerialVehicles.Dequeue(); Vector3 _pos = unmannedAerialVehicle.transform.position - new Vector3(0, 50, 0); unmannedAerialVehicle.transform.LookAt(_pos); unmannedAerialVehicle.transform.DOMove(_pos, 1).OnComplete(() => { AddBao(unmannedAerialVehicle); }); } } #region 启动暂停 /// /// 导条变化调用 /// /// void OnActivationChangedHandler(bool newValue) { if (newValue) { StartTimer(); } else { StopTimer(); } } IEnumerator Timer() { while (true) { //Debug.Log("Timer fired at: " + Time.time); yield return new WaitForSeconds(interval); // 等待一段时间后继续执行 RadioDisturbance(); } } /// /// 开启 /// public void StartTimer() { if (equipmentCommon.isPlayer && timerCoroutine == null) { timerCoroutine = StartCoroutine(Timer()); isTimerRunning = true; } } /// /// 停止 /// public void StopTimer() { if (equipmentCommon.isPlayer && timerCoroutine != null) { StopCoroutine(timerCoroutine); timerCoroutine = null; isTimerRunning = false; } } #endregion /// /// 数据写入 /// /// public void FillInTheData(List weaponitemone) { //if (equipmentCommon) //{ //string msg = $"send2room {equipmentCommon.equipmentType}+{transform.position.ToString().Replace(" ", "").Replace("(", "").Replace(")", "")}+{transform.eulerAngles.ToString().Replace(" ", "").Replace("(", "").Replace(")", "")}"; //Debug.Log(msg); //_ = SyncCreateRoom.SendMessageAsync(msg); //} for (int i = 0; i < weaponitemone.Count; i++) { switch (weaponitemone[i].para_name) { case "干扰频率:": InterferingFrequency = weaponitemone[i].para_value; interval= float.Parse(InterferingFrequency); break; case "干扰模式:": InterferenceMode = weaponitemone[i].para_value; break; case "发射功率:": TransmittedPower = weaponitemone[i].para_value; break; case "干扰角度:": InterferenceAngle = weaponitemone[i].para_value; break; case "干扰距离:": InterferenceDistance = weaponitemone[i].para_value; detectionRadius = float.Parse(InterferenceDistance); break; default: break; } } } /// /// 开启无线电干扰 /// public void RadioDisturbance() { Collider[] colliders = Physics.OverlapSphere(transform.position, detectionRadius); // 检索范围内的所有碰撞体 for (int i = 0; i < colliders.Length; i++) { if (colliders[i].transform.tag == "WRJ") { //Debug.Log("检测到无人机: " + col.name); UnmannedAerialVehicle unmannedAerialVehicle = colliders[i].GetComponent(); if (unmannedAerialVehicle) { //Debug.Log(col.name+"数据链通信频点...:" + unmannedAerialVehicle.dataLinkCommunicationFrequency); if (unmannedAerialVehicle.dataLinkCommunicationFrequency == "" || InterferingFrequency == "") continue;//无数据不执行 if(unmannedAerialVehicle.dataLinkCommunicationFrequency== InterferingFrequency) { Debug.Log("干扰...:"+ colliders[i].name + "成功。"); //unmannedAerialVehicle.BeAssaulted("无线电干扰"); unmannedAerialVehicles.Enqueue(unmannedAerialVehicle); } } } } } Queue unmannedAerialVehicles = new Queue(); private bool isDo = true; /// /// 销毁单体无人机 /// public void AddBao(UnmannedAerialVehicle unmannedAerialVehicle) { string nowData = GetSyncDis(unmannedAerialVehicle); Debug.Log(nowData); DeviceManager.Instance.send2roomStr.Enqueue(nowData); string currentTime = System.DateTime.Now.ToString(); string _log = currentTime + " " + equipmentCommon.equipmentType + "(" + equipmentCommon.deviceID + ")"+ "攻击了销毁了"+ unmannedAerialVehicle.unmannedAerialVehicleManage.equipmentCommon.equipmentType + "(" + unmannedAerialVehicle.unmannedAerialVehicleManage.equipmentCommon.deviceID + ")" + "编号" + unmannedAerialVehicle.serialNumber + "子无人机"; UploadLog(_log); GameObject Bao = Instantiate(explodePrefab, unmannedAerialVehicle.transform); Bao.transform.localPosition = Vector3.zero; Bao.transform.SetParent(null); Bao.SetActive(true); Destroy(unmannedAerialVehicle.gameObject); isDo = true; } /// ///上传日志 /// /// public void UploadLog(string _log) { List uploadLogMains = new List(); UploadLogMain uploadLogMain = new UploadLogMain(); uploadLogMain.PracticeId = GlobalFlag.practiceSubjectID; uploadLogMain.ThinkId = GlobalFlag.currentThinkId; string log = uploadLogMain.log = _log; uploadLogMains.Add(uploadLogMain); string uploadLogMainJson = JsonConvert.SerializeObject(uploadLogMains); WWWForm wWWForm = new WWWForm(); wWWForm.AddField("data", uploadLogMainJson); Debug.Log(uploadLogMainJson); StartCoroutine(PostString(Url_Addpracticelog, wWWForm, data => { Debug.Log(data); })); } /// /// 单个无人机被销毁 /// /// protected string GetSyncDis(UnmannedAerialVehicle unmannedAerialVehicle) { return string.Format("{0},{1},{2}", "DroneWasDestroyed", unmannedAerialVehicle.unmannedAerialVehicleManage.equipmentCommon.deviceID, unmannedAerialVehicle.serialNumber); } private void OnDestroy() { OnActivationChanged -= OnActivationChangedHandler; } }