using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using AdamThinkDevicesData;
using AdamSync;
///
/// 激光火控平台
///
public class LaserFireControlPlatformManger : MonoBehaviour
{
public EquipmentCommon equipmentCommon;
///
/// 所有激光火控平台
///
public static List laserFireControlPlatformMangers = new List();
#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
#region 激光火控平台数据
///
/// 储能间隔时间
///
public string StorageIntervalTime;
///
/// 毁伤目标累积作用时间
///
public string CumulativeActionTimeOfDamageTarget;
///
/// 干扰距离
///
public string InterferenceDistance;
///
/// 干扰角度
///
public string InterferenceAngle;
#endregion
#region 激光
public bool isLasing = false;
public GameObject LaserModer;
public GameObject LaserPoint;
public Transform targetPoint; // 锁定目标点的Transform组件
public GameObject InnerLaserlineRendererPrefab; // 用于绘制射线的LineRenderer组件
public GameObject OuterLaserlineRendererPrefab; // 用于绘制射线的LineRenderer组件
public LineRenderer InnerLaserlineRenderer; // 用于绘制射线的LineRenderer组件
public LineRenderer OuterLaserlineRenderer; // 用于绘制射线的LineRenderer组件
//private Vector3 laserStartPoint = Vector3.zero;
//private Vector3 laserEndPoint = Vector3.zero;
public float FireSpeed = 20.0f;//激光速度
#endregion
// Start is called before the first frame update
void Start()
{
equipmentCommon = GetComponent();
laserFireControlPlatformMangers.Add(this);
//weaponitemones = Newtonsoft.Json.JsonConvert.DeserializeObject(msg);
//FillInTheData(weaponitemones);//测试写入
// 订阅布尔值变化事件
OnActivationChanged += OnActivationChangedHandler;
//生成激光
GameObject _InnerLaserlineRenderer = Instantiate(InnerLaserlineRendererPrefab);
_InnerLaserlineRenderer.transform.position = Vector3.zero;
//_InnerLaserlineRenderer.transform.SetParent(transform);
InnerLaserlineRenderer = _InnerLaserlineRenderer.GetComponent();
if (InnerLaserlineRenderer)
{
InnerLaserlineRenderer.positionCount = 2; // 设置线段的端点数量为2
InnerLaserlineRenderer.SetPosition(0, LaserPoint.transform.position); // 设置线段起点为物体位置
InnerLaserlineRenderer.SetPosition(1, LaserPoint.transform.position); // 设置线段终点为目标点
}
GameObject _OuterLaserlineRenderer = Instantiate(OuterLaserlineRendererPrefab);
_OuterLaserlineRenderer.transform.position = Vector3.zero;
//_OuterLaserlineRenderer.transform.SetParent(transform);
OuterLaserlineRenderer = _OuterLaserlineRenderer.GetComponent();
if (OuterLaserlineRenderer)
{
OuterLaserlineRenderer.positionCount = 2; // 设置线段的端点数量为2
OuterLaserlineRenderer.SetPosition(0, LaserPoint.transform.position); // 设置线段起点为物体位置
OuterLaserlineRenderer.SetPosition(1, LaserPoint.transform.position); // 设置线段终点为目标点
}
}
// Update is called once per frame
void Update()
{
}
///
/// 导条变化调用
///
///
void OnActivationChangedHandler(bool newValue)
{
if (newValue)
{
Debug.Log("导条开启时调用");
}
else
{
Debug.Log("导条暂停时调用");
}
}
///
/// 数据写入
///
///
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 "储能间隔时间:":
StorageIntervalTime = weaponitemone[i].para_value;
break;
case "毁伤目标累积作用时间:":
CumulativeActionTimeOfDamageTarget = weaponitemone[i].para_value;
break;
case "干扰距离:":
InterferenceDistance = weaponitemone[i].para_value;
break;
case "干扰角度:":
InterferenceAngle = weaponitemone[i].para_value;
break;
default:
break;
}
}
}
///
/// 发射激光
///
public void Lasing()
{
if (targetPoint != null)
{
if (isLasing) return;
isLasing = true;
LaserModer.transform.DOLookAt(targetPoint.position, 0.3f).OnComplete(()=> {
Debug.Log("目标点位..:"+targetPoint.position);
CastRayAndRender();
});
}
else
{
Debug.LogError("没有目标");
}
}
public LayerMask layerMask; // 用于指定需要检测的层级
///
/// 激光显示
///
public void CastRayAndRender()
{
if (InnerLaserlineRenderer)
{
InnerLaserlineRenderer.SetPosition(0, LaserPoint.transform.position); // 设置线段起点为物体位置
InnerLaserlineRenderer.SetPosition(1, targetPoint.position); // 设置线段终点为目标点
}
if (OuterLaserlineRenderer)
{
OuterLaserlineRenderer.SetPosition(0, LaserPoint.transform.position); // 设置线段起点为物体位置
OuterLaserlineRenderer.SetPosition(1, targetPoint.position); // 设置线段终点为目标点
}
StrikeDrone(targetPoint.transform);
}
///
/// 打击无人机
///
private void StrikeDrone(Transform hit)
{
if(hit.transform.tag== "WRJ")
{
UnmannedAerialVehicle unmannedAerialVehicle = hit.GetComponent();
if (unmannedAerialVehicle)
{
unmannedAerialVehicle.BeAssaulted("激光打击");
StartCoroutine(LaserExtinction());
}
}
}
///
/// 隐藏激光
///
public IEnumerator LaserExtinction()
{
yield return new WaitForSeconds(0.1f);
if (InnerLaserlineRenderer)
{
InnerLaserlineRenderer.SetPosition(0, LaserPoint.transform.position); // 设置线段起点为物体位置
InnerLaserlineRenderer.SetPosition(1, LaserPoint.transform.position); // 设置线段终点为目标点
}
if (OuterLaserlineRenderer)
{
OuterLaserlineRenderer.SetPosition(0, LaserPoint.transform.position); // 设置线段起点为物体位置
OuterLaserlineRenderer.SetPosition(1, LaserPoint.transform.position); // 设置线段终点为目标点
}
isLasing = false;
}
}