435 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			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");
 | 
						|
 | 
						|
        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;
 | 
						|
    }
 | 
						|
}
 |