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)
{
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);
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(0, 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;
}
}