304 lines
11 KiB
C#
304 lines
11 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using AdamThinkDevicesData;
|
|
using AdamSync;
|
|
using Newtonsoft.Json;
|
|
using static InterfaceManager;
|
|
|
|
/// <summary>
|
|
/// 设备
|
|
/// </summary>
|
|
public class EquipmentCommon : MonoBehaviour
|
|
{
|
|
public EquipmentCommon equipmentCommon;
|
|
/// <summary>
|
|
/// 场景所在方
|
|
/// </summary>
|
|
public SelectedSide selectedSide = SelectedSide.Other;
|
|
|
|
public string equipmentType = "";
|
|
|
|
/// <summary>
|
|
/// 设备唯一ID
|
|
/// </summary>
|
|
public string deviceID;
|
|
/// <summary>
|
|
/// 是否是本人创建的设备
|
|
/// </summary>
|
|
public bool isPlayer
|
|
{
|
|
get { return _isPlayer; }
|
|
set
|
|
{
|
|
if (_isPlayer != value)
|
|
{
|
|
_isPlayer = value;
|
|
OnActivationIsPlayer?.Invoke(_isPlayer);
|
|
}
|
|
}
|
|
}
|
|
public event System.Action<bool> OnActivationIsPlayer;
|
|
private bool _isPlayer = false;
|
|
|
|
|
|
// 布尔值变化时触发的事件
|
|
public event System.Action<bool> OnActivationChanged;
|
|
|
|
|
|
private bool _isStartRehearsing = false;
|
|
// 属性绑定布尔值,并在值变化时触发事件
|
|
public bool isStartRehearsing
|
|
{
|
|
get { return _isStartRehearsing; }
|
|
set
|
|
{
|
|
if (_isStartRehearsing != value)
|
|
{
|
|
_isStartRehearsing = value;
|
|
OnActivationChanged?.Invoke(_isStartRehearsing);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 爆炸预制体
|
|
/// </summary>
|
|
public GameObject explodePrefab;
|
|
|
|
void Awake()
|
|
{
|
|
equipmentCommon = GetComponent<EquipmentCommon>();
|
|
DeviceManager.Instance.devices.Add(this);
|
|
// 订阅布尔值变化事件
|
|
OnActivationChanged += OnActivationChangedHandler;
|
|
//
|
|
OnActivationIsPlayer += OnActivationChangedIsPlayer;
|
|
}
|
|
void OnActivationChangedIsPlayer(bool newValue)
|
|
{
|
|
if (newValue && equipmentType == "蜂群无人机")
|
|
{
|
|
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 导条 暂停开始控制
|
|
/// </summary>
|
|
/// <param name="newValue"></param>
|
|
void OnActivationChangedHandler(bool newValue)
|
|
{
|
|
switch (equipmentType)
|
|
{
|
|
case "激光火控平台":
|
|
LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent<LaserFireControlPlatformManger>();
|
|
laserFireControlPlatformManger.isStartRehearsing = isStartRehearsing;
|
|
break;
|
|
case "探测雷达":
|
|
RadarManger radarManger = GetComponent<RadarManger>();
|
|
radarManger.isStartRehearsing = isStartRehearsing;
|
|
break;
|
|
case "地面无线电干扰":
|
|
TerrestrialRadioInterferenceManger terrestrialRadioInterferenceManger = GetComponent<TerrestrialRadioInterferenceManger>();
|
|
terrestrialRadioInterferenceManger.isStartRehearsing = isStartRehearsing;
|
|
break;
|
|
case "蜂群无人机":
|
|
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent<UnmannedAerialVehicleManage>();
|
|
unmannedAerialVehicleManage.isStartRehearsing = isStartRehearsing;
|
|
break;
|
|
case "频谱探测":
|
|
Spectrumdetection spectrumdetection = GetComponent<Spectrumdetection>();
|
|
spectrumdetection.isStartRehearsing = isStartRehearsing;
|
|
break;
|
|
case "微波武器":
|
|
Microwaveweapon microwaveweapon= GetComponent<Microwaveweapon>();
|
|
microwaveweapon.isStartRehearsing = isStartRehearsing;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 物体生成时接受数据
|
|
/// </summary>
|
|
/// <param name="weaponitemone"></param>
|
|
public void FillInTheData(List<List_paraItem> weaponitemone)
|
|
{
|
|
//向其他的单位发送创建信息
|
|
if (isPlayer && equipmentCommon)//但是是由我自主创建的时候发送一次 且只发送一次
|
|
{
|
|
Dictionary<string, string> replaceInfoDic = new Dictionary<string, string>();
|
|
string paraListJson = JsonConvert.SerializeObject(weaponitemone);
|
|
replaceInfoDic.Add("PracticeId", GlobalFlag.roomID);
|
|
replaceInfoDic.Add("PracticeSubjectId", GlobalFlag.practiceSubjectID);
|
|
replaceInfoDic.Add("device_name", equipmentCommon.equipmentType);
|
|
replaceInfoDic.Add("para_list", paraListJson);
|
|
replaceInfoDic.Add("r1", $"{transform.position.x},{transform.position.y},{transform.position.z},{transform.eulerAngles.x},{transform.eulerAngles.y},{transform.eulerAngles.z}");
|
|
StartCoroutine(AsyncWebReq.PostData2(Url_AddDeviceAndGetDeviceId, replaceInfoDic, ResultsInfo =>
|
|
{
|
|
ReturnDeviceID returnID = JsonConvert.DeserializeObject<ReturnDeviceID>(ResultsInfo);
|
|
deviceID = returnID.data;
|
|
string msg = $"send2room {equipmentCommon.equipmentType},{transform.position.ToString().Replace(" ", "").Replace("(", "").Replace(")", "")},{transform.eulerAngles.ToString().Replace(" ", "").Replace("(", "").Replace(")", "") + "," + deviceID}";
|
|
_ = SyncCreateRoom.SendMessageAsync(msg);
|
|
UploadLog(deviceID);
|
|
}));
|
|
}
|
|
|
|
//填入数据
|
|
switch (equipmentType)
|
|
{
|
|
case "激光火控平台":
|
|
LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent<LaserFireControlPlatformManger>();
|
|
laserFireControlPlatformManger.FillInTheData(weaponitemone);
|
|
laserFireControlPlatformManger.isStartRehearsing = isStartRehearsing;
|
|
break;
|
|
case "探测雷达":
|
|
RadarManger radarManger = GetComponent<RadarManger>();
|
|
radarManger.FillInTheData(weaponitemone);
|
|
break;
|
|
case "地面无线电干扰":
|
|
TerrestrialRadioInterferenceManger terrestrialRadioInterferenceManger = GetComponent<TerrestrialRadioInterferenceManger>();
|
|
terrestrialRadioInterferenceManger.FillInTheData(weaponitemone);
|
|
break;
|
|
case "蜂群无人机":
|
|
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent<UnmannedAerialVehicleManage>();
|
|
unmannedAerialVehicleManage.FillInTheData(weaponitemone);
|
|
unmannedAerialVehicleManage.MatrixFormation(30, 1);
|
|
break;
|
|
case "频谱探测":
|
|
Spectrumdetection spectrumdetection = GetComponent<Spectrumdetection>();
|
|
spectrumdetection.FillInTheData(weaponitemone);
|
|
break;
|
|
case "微波武器":
|
|
Microwaveweapon microwaveweapon = GetComponent<Microwaveweapon>();
|
|
microwaveweapon.FillInTheData(weaponitemone);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
///上传日志
|
|
/// </summary>
|
|
/// <param name="deviceID"></param>
|
|
public void UploadLog(string deviceID)
|
|
{
|
|
string currentTime = System.DateTime.Now.ToString();
|
|
List<UploadLogMain> uploadLogMains = new List<UploadLogMain>();
|
|
UploadLogMain uploadLogMain = new UploadLogMain();
|
|
uploadLogMain.PracticeId = GlobalFlag.practiceSubjectID;
|
|
uploadLogMain.ThinkId = GlobalFlag.currentThinkId;
|
|
string log = currentTime + " " + equipmentType + "(" + deviceID + ")"+"生成 ";
|
|
uploadLogMain.log = log;
|
|
uploadLogMains.Add(uploadLogMain);
|
|
string uploadLogMainJson = JsonConvert.SerializeObject(uploadLogMains);
|
|
WWWForm wWWForm = new WWWForm();
|
|
wWWForm.AddField("data", uploadLogMainJson);
|
|
Debug.Log(uploadLogMainJson);
|
|
StartCoroutine(PostString(Url_Addpracticelog, wWWForm, data => {
|
|
Debug.Log(data);
|
|
}));
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 已有路径
|
|
/// </summary>
|
|
public Queue<Vector3> positions = new Queue<Vector3>();
|
|
private void Update()
|
|
{
|
|
StartMoveObjectAlongPath();
|
|
}
|
|
|
|
public bool isMove = true;
|
|
/// <summary>
|
|
/// 按规划路径开始移动
|
|
/// </summary>
|
|
public void StartMoveObjectAlongPath()
|
|
{
|
|
if (isMove && positions.Count > 0)
|
|
{
|
|
isMove = false;
|
|
Vector3 _positions = positions.Dequeue();
|
|
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent<UnmannedAerialVehicleManage>();
|
|
if (unmannedAerialVehicleManage)
|
|
StartCoroutine(unmannedAerialVehicleManage.MoveObjectAlongPath(_positions, true)); // 启动协程,按规划的路线移动物体
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
public void ReceivingPositionAngle(string[] data)
|
|
{
|
|
switch (data[0])
|
|
{
|
|
case "DronePosition"://无人机位置信息传递
|
|
Vector3 pos = new Vector3(float.Parse(data[2]), float.Parse(data[3]), float.Parse(data[4]));
|
|
positions.Enqueue(pos);
|
|
break;
|
|
case "Lasing"://激光发射位置传递
|
|
LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent<LaserFireControlPlatformManger>();
|
|
if (laserFireControlPlatformManger)
|
|
laserFireControlPlatformManger.NonSelfGeneratedEmissionLaser(data);
|
|
break;
|
|
case "SingleDronePosition"://无人机攻击目标锁定
|
|
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent<UnmannedAerialVehicleManage>();
|
|
if (unmannedAerialVehicleManage)
|
|
{
|
|
for (int i = 0; i < unmannedAerialVehicleManage.unmannedAerialVehicles.Count; i++)
|
|
{
|
|
if (unmannedAerialVehicleManage.unmannedAerialVehicles[i])
|
|
{
|
|
Vector3 Pos = new Vector3(float.Parse(data[2]), float.Parse(data[3]), float.Parse(data[4]));
|
|
unmannedAerialVehicleManage.unmannedAerialVehicles[i].AttAck(Pos);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "DroneWasDestroyed"://单个无人机被销毁
|
|
UnmannedAerialVehicleManage _unmannedAerialVehicleManage = GetComponent<UnmannedAerialVehicleManage>();
|
|
if (_unmannedAerialVehicleManage)
|
|
{
|
|
UnmannedAerialVehicle unmannedAerialVehicle = _unmannedAerialVehicleManage.unmannedAerialVehicles.Find(x => x.serialNumber == data[2]);
|
|
if (unmannedAerialVehicle)
|
|
{
|
|
unmannedAerialVehicle.AddBao(false);
|
|
}
|
|
}
|
|
break;
|
|
case "SetToBeDestroyed"://设备被销毁
|
|
GameObject Bao = Instantiate(explodePrefab, transform);
|
|
Bao.transform.localPosition = Vector3.zero;
|
|
Bao.transform.SetParent(null);
|
|
Bao.SetActive(true);
|
|
Destroy(transform.gameObject);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
private void OnDestroy()
|
|
{
|
|
// 订阅布尔值变化事件
|
|
OnActivationChanged -= OnActivationChangedHandler;
|
|
//
|
|
OnActivationIsPlayer -= OnActivationChangedIsPlayer;
|
|
}
|
|
}
|
|
|
|
public enum SelectedSide
|
|
{
|
|
Rad,
|
|
Blue,
|
|
Director,
|
|
Other
|
|
} |