using System.Collections.Generic;
using UnityEngine;
using AdamThinkDevicesData;
using AdamSync;
using Newtonsoft.Json;
using static InterfaceManager;
using System.Collections;
using UnityEngine.Events;
///
/// 设备
///
public class EquipmentCommon : MonoBehaviour
{
public EquipmentCommon equipmentCommon;
///
/// 场景所在方
///
public SelectedSide selectedSide = SelectedSide.Other;
public string equipmentType = "";
///
/// 设备唯一ID
///
public string deviceID;
///
/// 是否是本人创建的设备
///
public bool isPlayer
{
get { return _isPlayer; }
set
{
if (_isPlayer != value)
{
ISPlayer = value;
_isPlayer = value;
OnActivationIsPlayer?.Invoke(_isPlayer);
}
}
}
public bool ISPlayer;
public event System.Action OnActivationIsPlayer;
private bool _isPlayer = false;
// 布尔值变化时触发的事件
public event System.Action OnActivationChanged;
private bool _isStartRehearsing = false;
// 属性绑定布尔值,并在值变化时触发事件
public bool isStartRehearsing
{
get { return _isStartRehearsing; }
set
{
if (_isStartRehearsing != value)
{
_isStartRehearsing = value;
OnActivationChanged?.Invoke(_isStartRehearsing);
}
}
}
///
/// 爆炸预制体
///
public GameObject explodePrefab;
public UnityAction onDeviceDelete;
void Awake()
{
equipmentCommon = GetComponent();
DeviceManager.Instance.devices.Add(this);
// 订阅布尔值变化事件
OnActivationChanged += OnActivationChangedHandler;
//
OnActivationIsPlayer += OnActivationChangedIsPlayer;
}
void Start()
{
_isStartRehearsing = GlobalFlag.isStartRehearsing;
}
void OnActivationChangedIsPlayer(bool newValue)
{
if (newValue && equipmentType == "蜂群无人机")
{
}
}
///
/// 导条 暂停开始控制
///
///
void OnActivationChangedHandler(bool newValue)
{
switch (equipmentType)
{
case "激光火控平台":
LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent();
laserFireControlPlatformManger.isStartRehearsing = isStartRehearsing;
break;
case "探测雷达":
RadarManger radarManger = GetComponent();
radarManger.isStartRehearsing = isStartRehearsing;
break;
case "地面无线电干扰":
TerrestrialRadioInterferenceManger terrestrialRadioInterferenceManger = GetComponent();
terrestrialRadioInterferenceManger.isStartRehearsing = isStartRehearsing;
break;
case "蜂群无人机":
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent();
unmannedAerialVehicleManage.isStartRehearsing = isStartRehearsing;
break;
case "频谱探测":
Spectrumdetection spectrumdetection = GetComponent();
spectrumdetection.isStartRehearsing = isStartRehearsing;
break;
case "微波武器":
Microwaveweapon microwaveweapon = GetComponent();
microwaveweapon.isStartRehearsing = isStartRehearsing;
break;
default:
break;
}
}
//参数:action:updatepracticedevicedetail
//参数:id:设备id
//参数:bdxx:部队信息
//参数:line:线路
//参数:my_rate:自身频率
//参数:scan_rate:扫描频率
///
/// 修改数据库单个信息
///
///
///
public void SetDatabaseInfo(string attribute, string newInfo)
{
Dictionary replaceInfoDic = new Dictionary();
replaceInfoDic.Add("id", deviceID);
replaceInfoDic.Add(attribute, newInfo);
StartCoroutine(AsyncWebReq.PostData2(Url_UpdatePracticeDevicedetail, replaceInfoDic));
}
///
/// 物体生成时接受数据
///
///
public void FillInTheData(List weaponitemone, AdamThinkDevicesData.DataItem data)
{
//向其他的单位发送创建信息
if (isPlayer && equipmentCommon)//但是是由我自主创建的时候发送一次 且只发送一次
{
Dictionary replaceInfoDic = new Dictionary();
string paraListJson = JsonConvert.SerializeObject(weaponitemone);
replaceInfoDic.Add("PracticeId", GlobalFlag.roomID);
Debug.Log(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}");
if (gameObject.GetComponent())
{
replaceInfoDic.Add("r2", ((int)gameObject.GetComponent().wrjModel).ToString());
replaceInfoDic.Add("bdxx", gameObject.GetComponent().groupId.ToString());
}
replaceInfoDic.Add("r3", GlobalFlag.currentUser.user_id);
StartCoroutine(AsyncWebReq.PostData2(Url_AddDeviceAndGetDeviceId, replaceInfoDic, ResultsInfo =>
{
ReturnDeviceID returnID = JsonConvert.DeserializeObject(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);
}));
}
if (data.my_rate != null && data.my_rate != "")
{
weaponitemone = Weaponitemone(data);
}
//填入数据
switch (equipmentType)
{
case "激光火控平台":
LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent();
laserFireControlPlatformManger.FillInTheData(weaponitemone);
//laserFireControlPlatformManger.isStartRehearsing = isStartRehearsing;
break;
case "探测雷达":
RadarManger radarManger = GetComponent();
radarManger.FillInTheData(weaponitemone);
radarManger.isStartRehearsing = isStartRehearsing;
break;
case "地面无线电干扰":
TerrestrialRadioInterferenceManger terrestrialRadioInterferenceManger = GetComponent();
terrestrialRadioInterferenceManger.FillInTheData(weaponitemone, deviceID);
terrestrialRadioInterferenceManger.isStartRehearsing = isStartRehearsing;
break;
case "蜂群无人机":
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent();
unmannedAerialVehicleManage.MatrixFormation(30, 1);
unmannedAerialVehicleManage.FillInTheData(weaponitemone, deviceID);
unmannedAerialVehicleManage.isStartRehearsing = isStartRehearsing;
DroneViewDisplay.Instance.CreateUI(unmannedAerialVehicleManage, false);
break;
case "频谱探测":
Spectrumdetection spectrumdetection = GetComponent();
spectrumdetection.FillInTheData(weaponitemone);
spectrumdetection.isStartRehearsing = isStartRehearsing;
break;
case "微波武器":
Microwaveweapon microwaveweapon = GetComponent();
microwaveweapon.FillInTheData(weaponitemone);
microwaveweapon.isStartRehearsing = isStartRehearsing;
break;
default:
break;
}
}
///
///
///
///
///
public List Weaponitemone(AdamThinkDevicesData.DataItem data)
{
List _weaponitemone = data.list_para;
return _weaponitemone;
}
///
///上传日志
///
///
public void UploadLog(string deviceID)
{
string currentTime = System.DateTime.Now.ToString();
List uploadLogMains = new List();
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);
StartCoroutine(PostString(Url_Addpracticelog, wWWForm, data =>
{
//Debug.Log(data);
}));
}
///
/// 已有路径
///
public Queue positions = new Queue();
private void Update()
{
StartMoveObjectAlongPath();
}
public bool isMove = true;
///
/// 按规划路径开始移动
///
public void StartMoveObjectAlongPath()
{
if (isMove && positions.Count > 0)
{
isMove = false;
Vector3 _positions = positions.Dequeue();
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent();
if (unmannedAerialVehicleManage)
StartCoroutine(unmannedAerialVehicleManage.MoveObjectAlongPath(_positions, true)); // 启动协程,按规划的路线移动物体
}
}
///
/// 设备交互同步消息接收
///
///
public void ReceivingPositionAngle(string[] data)
{
switch (data[0])
{
case "DronePosition"://无人机位置信息传递
if (!isPlayer)
{
Vector3 pos = new Vector3(float.Parse(data[2]), float.Parse(data[3]), float.Parse(data[4]));
positions.Enqueue(pos);
}
break;
case "Lasing"://
if (!isPlayer)
{
LaserFireControlPlatformManger laserFireControlPlatformManger = GetComponent();
if (laserFireControlPlatformManger)
laserFireControlPlatformManger.NonSelfGeneratedEmissionLaser(data);
}
break;
case "Micow"://微波武器发射位置
if (!isPlayer) {
Microwaveweapon microwaveweapon = GetComponent();
if (microwaveweapon)
{
microwaveweapon.Microwavetransmission(data);
}
}
break;
case "SingleDronePosition"://无人机攻击目标锁定
Debug.Log("接受...:" + data[0] + "," + data[1] + "," + data[2] + "," + data[3] + "," + data[4]);
UnmannedAerialVehicleManage unmannedAerialVehicleManage = GetComponent();
if (unmannedAerialVehicleManage && unmannedAerialVehicleManage.wrjModel == WRJModel.自杀式无人机)
{
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 "WRJExpel"://驱离无人机
UnmannedAerialVehicleManage unmannedAerialVehicleManageExpel = GetComponent();
if (unmannedAerialVehicleManageExpel)
{
unmannedAerialVehicleManageExpel.CheckSatellitePositioningFrequency(data[2]);
}
break;
case "DroneWasDestroyed"://单个无人机被销毁
UnmannedAerialVehicleManage _unmannedAerialVehicleManage = GetComponent();
if (_unmannedAerialVehicleManage)
{
UnmannedAerialVehicle unmannedAerialVehicle = _unmannedAerialVehicleManage.unmannedAerialVehicles.Find(x => x.serialNumber == data[2]);
if (unmannedAerialVehicle)
{
unmannedAerialVehicle.AddBao(false);
}
}
break;
case "WRJDitch"://无线电干扰无人机同步
UnmannedAerialVehicleManage _unmannedAerialVehicleManageDitch = GetComponent();
if (_unmannedAerialVehicleManageDitch)
{
UnmannedAerialVehicle unmannedAerialVehicle = _unmannedAerialVehicleManageDitch.unmannedAerialVehicles.Find(x => x.serialNumber == data[2]);
if (unmannedAerialVehicle)
{
unmannedAerialVehicle.CheckSatellitePositioningFrequency(data[3]);
}
}
break;
case "Planedata"://微波武器消灭无人机
UnmannedAerialVehicleManage unmannedAerialVehicleManage1 = GetComponent();
if (unmannedAerialVehicleManage1)
{
UnmannedAerialVehicle unmannedAerialVehicle = unmannedAerialVehicleManage1.unmannedAerialVehicles.Find(x => x.serialNumber == data[2]);
if (unmannedAerialVehicle)
{
StartCoroutine(UnmannedAerialVehicleAddBao(unmannedAerialVehicle));
}
}
break;
case "SetToBeDestroyed"://设备被销毁
onDeviceDelete?.Invoke(deviceID);
DroneViewDisplay.Instance.DistroyUI(deviceID);
GameObject Bao = Instantiate(explodePrefab, transform);
Bao.transform.localPosition = Vector3.zero;
Bao.transform.SetParent(null);
Bao.SetActive(true);
Destroy(transform.gameObject);
break;
case "SetToBeDestroyedTwo"://设备被收回
onDeviceDelete?.Invoke(deviceID);
Destroy(transform.gameObject);
break;
case "Teleportation":
Vector3 pos1 = new Vector3(float.Parse(data[2]), float.Parse(data[3]), float.Parse(data[4]));
transform.position = pos1;
break;
default:
break;
}
}
IEnumerator UnmannedAerialVehicleAddBao(UnmannedAerialVehicle unmannedAerialVehicle)
{
yield return new WaitForSeconds(0.6f);
unmannedAerialVehicle.AddBao(false);
}
private void OnDestroy()
{
// 订阅布尔值变化事件
OnActivationChanged -= OnActivationChangedHandler;
//
OnActivationIsPlayer -= OnActivationChangedIsPlayer;
}
}
public enum SelectedSide
{
Rad,
Blue,
Director,
Other
}