using AdamSync; using AdamThinkDevicesData; using DG.Tweening; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 微波武器 /// public class Microwaveweapon : MonoBehaviour { /// /// /// public EquipmentCommon equipment; /// /// 把自身对象存到链表 /// public static List MicrowaveweaponList = new List(); #region 微波武器 /// /// 储能间隔时间 /// public string Storageintervaltime; /// /// 毁伤目标累计作用时间 /// public string Microwavedamagetime; /// /// 干扰距离 /// public string Microwaveinterferencedistance; /// /// 干扰角度 /// public string MicrowaveinterferenceAngle; #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; #region /// /// 看向开关 /// public bool ismicow = false; /// /// 微波武器打击 /// public GameObject microwavemoder; public GameObject microwavepoint; public Transform miceopos;//看向无人机和打击无人机 /// /// 微博显示 /// public MicrowaveweaponAttack microblog; /// /// 微波武器发射的速度 /// public float micspeed = 20; public float micdistance = 0; #endregion /// /// 接收每次间隔打击时间 /// public float microwtimer; /// /// 关闭协程 /// public Coroutine coroutine; /// /// 击毁特效 /// public GameObject Destructioneffect; void Start() { equipment = GetComponent(); MicrowaveweaponList.Add(this); // 订阅布尔值变化事件 OnActivationChanged += OnActivationChangedHandler; } /// /// 演练是否开始开关 /// void OnActivationChangedHandler(bool bol) { if (bol) { Debug.Log("开始演练"); Openmode(); } else { Debug.Log("暂停演练"); Offmode(); } } /// /// 关闭激光打击 /// private void Offmode() { if (equipment.isPlayer && coroutine != null) { StopCoroutine(Timern()); coroutine = null; } } /// /// 开启激光打击 /// private void Openmode() { if (equipment.isPlayer && coroutine == null) { StartCoroutine(Timern()); } } public IEnumerator Timern() { while (true) { yield return new WaitForSeconds(microwtimer + 1.5f); if (miceopos != null && ismicow) { Launchattack(); } } } /// /// 攻击无人机位置上全 /// /// /// protected string Getmicdata() { //Debug.Log("上传位置"); return string.Format("{0},{1},{2},{3},{4}", "Micow", equipment.deviceID, miceopos.transform.position.x, miceopos.transform.position.y, miceopos.transform.position.z); } private void OnMouseDown() { GameManager.Instance.GetAllImportance(); } /// /// 获取设备的参数 /// public void FillInTheData(List weaponitemone) { for (int i = 0; i < weaponitemone.Count; i++) { switch (weaponitemone[i].para_name) { case "储能间隔时间:": Storageintervaltime = weaponitemone[i].para_value; microwtimer = float.Parse(Storageintervaltime); break; case "毁伤目标累积作用时间:": Microwavedamagetime = weaponitemone[i].para_value; break; case "干扰距离:": Microwaveinterferencedistance = weaponitemone[i].para_value; micdistance = float.Parse(Microwaveinterferencedistance) * 1000; break; case "干扰角度:": MicrowaveinterferenceAngle = weaponitemone[i].para_value; break; default: break; } } } void Update() { } /// /// 微波武器朝向无人机 /// public void Orientation() { if (miceopos != null) { microwavepoint.transform.DOLookAt(miceopos.position, 0.1f).SetEase(Ease.Linear); } } /// /// 激光发起攻击 /// public void Launchattack() { if (miceopos != null && Vector3.Distance(miceopos.position, transform.position) < micdistance) { //micdistance = Vector3.Distance(miceopos.position, transform.position); var newdata = Getmicdata(); //DeviceManager.Instance.send2roomStr.Enqueue(newdata); MyNetMQClient.instance.Send(newdata); //_ = SyncCreateRoom.SendMessageAsync(string.Format("send2room {0}", newdata)); //MQTTManager.instance.SendData(MQTTManager.instance.Micow, newdata); microblog.MicrowaveDisplay(Vector3.Distance(miceopos.position, transform.position) / 10 + 1, 0.5f); Closeattack(miceopos); } else { ismicow = false; miceopos = null; } } /// /// 上传服务器即关闭激光 /// /// /// private void Closeattack(Transform pos) { UnmannedAerialVehicle unmannedAerialVehicle = pos.GetComponent(); if (unmannedAerialVehicle != null) { StartCoroutine(Destructiondata(unmannedAerialVehicle)); StartCoroutine(Offlaserstrike()); } } /// /// 击毁无人机 /// public IEnumerator Destructiondata(UnmannedAerialVehicle unmannedAerialVehicle) { if (unmannedAerialVehicle) { var newdata = Aeroplane(unmannedAerialVehicle); MyNetMQClient.instance.Send(newdata); //DeviceManager.Instance.send2roomStr.Enqueue(newdata); //MQTTManager.instance.SendData(MQTTManager.instance.Planedata, newdata); yield return new WaitForSeconds(0.5f); GameObject game = Instantiate(Destructioneffect, unmannedAerialVehicle.transform); yield return new WaitForSeconds(0.05f); game.transform.localPosition = Vector3.zero; game.transform.SetParent(null); game.SetActive(true); Destroy(unmannedAerialVehicle.gameObject); } } /// /// 销毁无人机 /// /// /// public string Aeroplane(UnmannedAerialVehicle unmannedAerialVehicle) { return string.Format("{0},{1},{2}", "Planedata", unmannedAerialVehicle.unmannedAerialVehicleManage.equipmentCommon.deviceID, unmannedAerialVehicle.serialNumber); } /// /// 关闭激光 /// public IEnumerator Offlaserstrike() { yield return new WaitForSeconds(1.5f); microblog.MicrowaveDisplay(0f, 0f); ismicow = false; } /// /// 接受数据微波武器激光下发 /// public void Microwavetransmission(string[] data) { //接收激光下发的位置 Vector3 vector = new Vector3(float.Parse(data[2]), float.Parse(data[3]), float.Parse(data[4])); float _micdistance = Vector3.Distance(vector, transform.position); microwavepoint.transform.DOLookAt(vector, 0.1f).SetEase(Ease.Linear).OnComplete(() => { microblog.MicrowaveDisplay(_micdistance / 10 + 1, 0.5f); StartCoroutine(Offlaserstrike()); }); } private void OnDestroy() { OnActivationChanged -= OnActivationChangedHandler; } }