NewN_UAVPlane/Assets/Zion/Scripts/ModelFunction/Radar/RadarManger.cs

435 lines
13 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AdamThinkDevicesData;
using AdamSync;
using System.Linq;
using UnityEngine.UI;
using System;
/// <summary>
/// 雷达控制
/// </summary>
public class RadarManger : MonoBehaviour
{
public EquipmentCommon equipmentCommon;
#region
private bool _isStartRehearsing = false;
/// <summary>
/// 是否正在预演
/// </summary>
public bool isStartRehearsing
{
get { return _isStartRehearsing; }
set
{
if (_isStartRehearsing != value)
{
_isStartRehearsing = value;
OnActivationChanged?.Invoke(_isStartRehearsing);
}
}
}
/// <summary>
/// 布尔值变化时触发的事件
/// </summary>
public event System.Action<bool> OnActivationChanged;
/// <summary>
/// 协程对象
/// </summary>
private Coroutine timerCoroutine;
/// <summary>
/// 定时器运行状态
/// </summary>
private bool isTimerRunning = false;
/// <summary>
/// 间隔时间
/// </summary>
public float interval = 5.0f;
#endregion
/// <summary>
/// 雷达UI预制体
/// </summary>
public GameObject RadarUiPrefab;
/// <summary>
/// 雷达UI
/// </summary>
public GameObject RadarUi;
/// <summary>
/// 雷达动画
/// </summary>
public Animator aniRandar;
/// <summary>
/// 雷达UI动画播放
/// </summary>
public Animator aniRandarUI;
#region
/// <summary>
/// 转台转速
/// </summary>
public string TurntableSpeed;
/// <summary>
/// 探测距离
/// </summary>
public string DetectionRange;
/// <summary>
/// 近盲区
/// </summary>
public string NearBlindArea;
/// <summary>
/// 批量标处理能力
/// </summary>
public string BatchStandardProcessingCapability;
/// <summary>
/// 探测成功率
/// </summary>
public string DetectionSuccessRate;
/// <summary>
/// 最小探测速度
/// </summary>
public string MinimumDetectionVelocity;
/// <summary>
/// 距离分辨率
/// </summary>
public string RangeResolution;
/// <summary>
/// 方位分辨率
/// </summary>
public string AzimuthResolution;
/// <summary>
/// 方位波束宽度
/// </summary>
public string AzimuthBeamwidth;
/// <summary>
/// 俯仰波束宽度
/// </summary>
public string PitchBeamwidth;
#endregion
/// <summary>
/// 检测范围半径
/// </summary>
public float detectionRadius = 5f; //
/// <summary>
/// 近盲区
/// </summary>
public float nearBlindArea = 5f; //
/// <summary>
/// 批量标处理能力
/// </summary>
public int NumberOfProbes = 0;
/// <summary>
/// 渲染小地图摄像机
/// </summary>
public Camera minCamera;
/// <summary>
/// 激活面板预设体
/// </summary>
public Image imageprs;
/// <summary>
///
/// </summary>
public RawImage rawImage;
/// <summary>
///
/// </summary>
private bool onlyOne = true;
/// <summary>
/// 接收无人机显示在地图上的参数大小
/// </summary>
public float Mapsize;
void Awake()
{
//失活摄像机
minCamera.gameObject.SetActive(false);
}
void Start()
{
equipmentCommon = GetComponent<EquipmentCommon>();
// 订阅布尔值变化事件
OnActivationChanged += OnActivationChangedHandler;
//DroneViewDisplay.Instance.CreateUI(equipmentCommon.deviceID, minCamera, rawImage);
}
void Update()
{
//老师点了开始演习就激活摄像机
if (isStartRehearsing)
{
minCamera.gameObject.SetActive(true);
}
if (onlyOne && equipmentCommon.deviceID.Length > 10)
{
onlyOne = false;
DroneViewDisplay.Instance.CreateUI(equipmentCommon.deviceID, minCamera, rawImage);
}
Deadzone();//雷达盲区
if (Mapsize >1)
{
Dotsize();//改变雷达地图上显示无人机大小
}
}
private void Dotsize()
{
GameObject[] wrjdtdx = GameObject.FindGameObjectsWithTag("WRJ");
for (int i = 0; i < wrjdtdx.Length; i++)
{
if (wrjdtdx[i].gameObject.tag=="WRJ"&& equipmentCommon.isPlayer)
{
UnmannedAerialVehicleManage unmannedAerialVehicleManage = wrjdtdx[i].GetComponent<UnmannedAerialVehicleManage>();
if (unmannedAerialVehicleManage&& unmannedAerialVehicleManage.gamemap)
{
unmannedAerialVehicleManage.gamemap.transform.localScale = new Vector3(Mapsize,1,Mapsize);
Debug.Log("改变了无人机显示大小");
}
}
}
}
/// <summary>
/// 雷达盲区让目标消失在地图上
/// </summary>
private void Deadzone()
{
if (float.Parse(NearBlindArea) > 0)
{
Collider[] colliders = Physics.OverlapSphere(transform.position, float.Parse(NearBlindArea));
for (int i = 0; i < colliders.Length; i++)
{
if (colliders[i].transform.gameObject.tag == "WRJ")
{
//Debug.Log("进来了" + Vector3.Distance(transform.position, colliders[i].transform.position));
UnmannedAerialVehicleManage unmannedAerialVehicle = colliders[i].GetComponent<UnmannedAerialVehicleManage>();
if (unmannedAerialVehicle)
{
GameObject game = unmannedAerialVehicle.gamemap;
Destroy(game);
}
}
}
}
}
#region
/// <summary>
/// 导条变化调用
/// </summary>
/// <param name="newValue"></param>
void OnActivationChangedHandler(bool newValue)
{
if (newValue)
{
Debug.Log("开始检索");
StartTimer();
}
else
{
Debug.Log("停止检索");
StopTimer();
}
}
IEnumerator Timer()
{
while (true)
{
//Debug.Log("Timer fired at: " + Time.time);
yield return new WaitForSeconds(5); // 等待一段时间后继续执行
RetrievalUAV();
}
}
/// <summary>
/// 开启
/// </summary>
public void StartTimer()
{
if (equipmentCommon.isPlayer && timerCoroutine == null)
{
timerCoroutine = StartCoroutine(Timer());
isTimerRunning = true;
}
}
/// <summary>s
/// 停止
/// </summary>
public void StopTimer()
{
if (equipmentCommon.isPlayer && timerCoroutine != null)
{
StopCoroutine(timerCoroutine);
timerCoroutine = null;
isTimerRunning = false;
}
}
#endregion
void CreateRadarUI()
{
imageprs.transform.localScale = Vector3.zero;
aniRandarUI = imageprs.GetComponent<Animator>();
RadarRotationSpeed(TurntableSpeed);
}
/// <summary>
/// 数据写入
/// </summary>
/// <param name="weaponitemone"></param>
public void FillInTheData(List<List_paraItem> weaponitemone)
{
for (int i = 0; i < weaponitemone.Count; i++)
{
switch (weaponitemone[i].para_name)
{
case "转台转速:":
TurntableSpeed = weaponitemone[i].para_value;
//RadarRotationSpeed(TurntableSpeed);
break;
case "探测距离:":
DetectionRange = weaponitemone[i].para_value;
Showmap(float.Parse(DetectionRange));
detectionRadius = float.Parse(DetectionRange) * 1000;
minCamera.orthographicSize = detectionRadius;
break;
case "近盲区:":
NearBlindArea = weaponitemone[i].para_value;
//Debug.LogError(NearBlindArea);
nearBlindArea = float.Parse(NearBlindArea);
break;
case "批量标处理能力:":
BatchStandardProcessingCapability = weaponitemone[i].para_value;
NumberOfProbes = int.Parse(BatchStandardProcessingCapability);
break;
case "探测成功率:":
DetectionSuccessRate = weaponitemone[i].para_value;
break;
case "最小探测速度:":
MinimumDetectionVelocity = weaponitemone[i].para_value;
break;
case "距离分辨率:":
RangeResolution = weaponitemone[i].para_value;
break;
case "方位分辨率:":
AzimuthResolution = weaponitemone[i].para_value;
break;
case "方位波束宽度:":
AzimuthBeamwidth = weaponitemone[i].para_value;
break;
case "俯仰波束宽度:":
PitchBeamwidth = weaponitemone[i].para_value;
break;
default:
break;
}
}
}
private void Showmap(float size)
{
switch (size)
{
case 1:
Mapsize = 30;
break;
case 2:
Mapsize = 60;
break;
case 3:
Mapsize = 90;
break;
case 4:
Mapsize = 120;
break;
case 5:
Mapsize = 150;
break;
default:
break;
}
}
/// <summary>
/// 雷达转动速度
/// </summary>
public void RadarRotationSpeed(string speed)
{
float newSpeed = float.Parse(speed);
if (newSpeed <= 0) return;
if (aniRandar)
{
aniRandar.speed = (1 / newSpeed); // 改变动画的播放速度为新速度值
}
if (aniRandarUI)
{
aniRandarUI.speed = (1 / newSpeed); // 改变动画的播放速度为新速度值
}
}
public List<Collider> colliders = new List<Collider>();
public List<Collider> attackColliders1 = new List<Collider>();
/// <summary>
/// 检索
/// </summary>
public void RetrievalUAV()
{
colliders = Physics.OverlapSphere(transform.position, detectionRadius).ToList(); // 检索范围内的所有碰撞体
var colliders2 = colliders.FindAll(x => x.tag == "WRJ");
minCamera.orthographicSize = detectionRadius;
if (colliders2.Count > 0)
{
for (int i = 0; i < colliders2.Count; i++)
{
UnmannedAerialVehicle unmannedAerialVehicle = colliders2[i].GetComponent<UnmannedAerialVehicle>();
if (unmannedAerialVehicle)
{
bool isnearBlindArea = Vector3.Distance(transform.position, unmannedAerialVehicle.transform.position) > nearBlindArea;
if (!isnearBlindArea)
continue;
attackColliders1.Add(colliders[i]);
LaserFireControlPlatformManger laserFireControlPlatformManger = LaserFireControlPlatformManger.laserFireControlPlatformMangers.Find(x => (x != null&& x.isLasing == false&& x.lasertime <= 0));
Microwaveweapon microwaveweapon = Microwaveweapon.MicrowaveweaponList.Find(x => x != null && x.ismicow == false);
if (laserFireControlPlatformManger)
{
laserFireControlPlatformManger.lasertime = laserFireControlPlatformManger.storageIntervalTime+1.5f;
laserFireControlPlatformManger.isLasing = true;
laserFireControlPlatformManger.targetPoint = unmannedAerialVehicle.transform;
laserFireControlPlatformManger.Lasing();
}
else if (microwaveweapon)
{
microwaveweapon.ismicow = true;
microwaveweapon.miceopos = unmannedAerialVehicle.transform;
microwaveweapon.Orientation();
}
}
}
}
}
/// <summary>
/// 检测鼠标点击的方法
/// </summary>
private void OnMouseDown()
{
if (equipmentCommon.isPlayer && GlobalFlag.blueOrRed == 1)
{
GameManager.Instance.GetAllImportance();
imageprs.gameObject.SetActive(true);
}
}
private void OnDestroy()
{
Destroy(RadarUi.gameObject);
OnActivationChanged -= OnActivationChangedHandler;
}
}