NewN_UAVPlane/Assets/Zion/Scripts/ModelFunction/EquipmentCommon.cs

207 lines
7.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AdamThinkDevicesData;
using AdamSync;
using LitJson;
using Newtonsoft.Json;
/// <summary>
/// 设备
/// </summary>
public class EquipmentCommon : MonoBehaviour
{
public EquipmentCommon equipmentCommon;
/// <summary>
/// 场景所在方
/// </summary>
public SelectedSide selectedSide = SelectedSide.Other;
/// <summary>
/// 所有设备
/// </summary>
public static List<EquipmentCommon> equipmentCommons = new List<EquipmentCommon>();
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);
}
}
}
void Start()
{
equipmentCommon = GetComponent<EquipmentCommon>();
equipmentCommons.Add(this);
// 订阅布尔值变化事件
OnActivationChanged += OnActivationChangedHandler;
//
OnActivationIsPlayer += OnActivationChangedIsPlayer;
}
void OnActivationChangedIsPlayer(bool newValue)
{
if(newValue&& equipmentType== "无人机List"&& isOnlyOne)
{
isOnlyOne = false;
StartCoroutine(SendMsg());
}
}
/// <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 "无人机List":
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent<UnmannedAerialVehicleManage>();
unmannedAerialVehicleManage.isStartRehearsing = isStartRehearsing;
break;
default:
break;
}
}
public char replaceInfo;
public Dictionary<string, string> replaceInfoDic = new Dictionary<string, string>();
/// <summary>
/// 物体生成时接受数据
/// </summary>
/// <param name="weaponitemone"></param>
public void FillInTheData(List<List_paraItem> weaponitemone)
{
//向其他的单位发送创建信息
if (isPlayer&& equipmentCommon)//但是是由我自主创建的时候发送一次 且只发送一次
{
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);
StartCoroutine(AsyncWebReq.PostData2("http://111.229.30.246:48888/Handler/Thinkingfile.ashx?action=addpracticedevicedetail", 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(")", "") + "," + returnID.data}";
_ = SyncCreateRoom.SendMessageAsync(msg);
}));
}
//填入数据
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 "无人机List":
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent<UnmannedAerialVehicleManage>();
unmannedAerialVehicleManage.FillInTheData(weaponitemone);
break;
default:
break;
}
}
//位置实时传送
private string latestData = "";
private bool isOnlyOne = true;
public IEnumerator SendMsg()
{
while (true)
{
yield return new WaitForSeconds(0.01f);
var nowData = GetSyncData();
if (!nowData.Equals(latestData))
{
latestData = nowData;
Debug.Log(latestData);
_ = SyncCreateRoom.SendMessageAsync(string.Format("WRJ {0}", nowData));
}
}
}
protected string GetSyncData()
{
return string.Format("{0},{1},{2},{3},{4},{5},{6}", equipmentCommon.deviceID, transform.position.x, transform.position.y, transform.position.z, transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.T))
{
isPlayer = !isPlayer;
}
}
}
public enum SelectedSide
{
Rad,
Blue,
Director,
Other
}