NewN_UAVPlane/Assets/Zion/Scripts/Adam/DeviceManager.cs

207 lines
5.9 KiB
C#

using AdamSync;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DeviceManager : MonoSingleton<DeviceManager>
{
/// <summary>
/// 所有设备
/// </summary>
public List<EquipmentCommon> devices = new List<EquipmentCommon>();
/// <summary>
/// 发送消息
/// </summary>
public Queue<string> send2roomStr = new Queue<string>();
private bool _isStartRehearsing = false;
// 属性绑定布尔值,并在值变化时触发事件
public bool isStartRehearsing
{
get { return _isStartRehearsing; }
set
{
if (_isStartRehearsing != value)
{
_isStartRehearsing = value;
OnActivationChanged?.Invoke(_isStartRehearsing);
}
}
}
// 布尔值变化时触发的事件
public event System.Action<bool> OnActivationChanged;
void Start()
{
SyncCreateRoom.send2roomRequset += GetSend2roomMsg;
// 订阅布尔值变化事件
OnActivationChanged += OnActivationChangedHandler;
}
/// <summary>
/// 导条 暂停开始控制
/// </summary>
/// <param name="newValue"></param>
void OnActivationChangedHandler(bool newValue)
{
devices.ForEach(x => x.isStartRehearsing = newValue);
}
public bool isOnlyOne = true;
private void Update()
{
if (send2roomStr.Count > 0 && isOnlyOne)
{
isOnlyOne = false;
StartCoroutine(DequeueSend2roomStr());
}
}
IEnumerator DequeueSend2roomStr()
{
while (send2roomStr.Count > 0)
{
_ = SyncCreateRoom.SendMessageAsync(string.Format("send2room {0}", send2roomStr.Dequeue()));
yield return new WaitForSeconds(0.05f);
if (send2roomStr.Count == 0)
isOnlyOne = true;
}
}
public void AddDevice(EquipmentCommon d)
{
if (!devices.Contains(d))
{
devices.Add(d);
}
}
public int GetPlayerDevice()
{
List<GameObject> temp = new List<GameObject>();
for (int i = 0; i < devices.Count; i++)
{
if (devices[i] != null && devices[i].isPlayer)
{
temp.Add(devices[i].gameObject);
}
}
return temp.Count;
}
/// <summary>
/// 获取所以当前玩家的设备
/// </summary>
/// <returns></returns>
public List<GameObject> GetPlayerDecive1()
{
List<GameObject> temp = new List<GameObject>();
for (int i = 0; i < devices.Count; i++)
{
if (devices[i] != null && devices[i].isPlayer)
{
temp.Add(devices[i].gameObject);
}
}
return temp;
}
/// <summary>
/// 获取光学无人机和自杀式无人机
/// </summary>
/// <returns></returns>
public List<UnmannedAerialVehicleManage> GetGXWRJAndZSWRJ()
{
List<UnmannedAerialVehicleManage> tempUAM = new List<UnmannedAerialVehicleManage>();
for (int i = 0; i < devices.Count; i++)
{
if (devices[i] != null && devices[i].gameObject.name.Contains("无人机"))
{
UnmannedAerialVehicleManage temp = devices[i].GetComponent<UnmannedAerialVehicleManage>();
if (temp != null)
{
if (temp.wrjModel == WRJModel. || temp.wrjModel == WRJModel.)
tempUAM.Add(temp);
}
}
}
return tempUAM;
}
public void SetCollider4WRJ(List<Collider> attackColliders, ref Collider currentTarget)
{
if (attackColliders.Count > 0)
{
List<UnmannedAerialVehicleManage> temp = GetGXWRJAndZSWRJ();
for (int i = 0; i < temp.Count; i++)
{
if (temp[i].unmannedAerialVehicles[0] != null && temp[i].unmannedAerialVehicles[0].gameObject.activeSelf)
{
if (temp[i].unmannedAerialVehicles[0].attackTarget == null)
{
for (int j = 0; j < attackColliders.Count; j++)
{
Collider c = null;
if (attackColliders[i] != null)
{
c = attackColliders[i];
}
if (attackColliders[j] != null)
{
temp[i].unmannedAerialVehicles[0].AttAck(attackColliders[j].transform);
}
}
}
}
}
}
}
public void GetSend2roomMsg(string data)
{
data = data.Replace("send2room", "");
//Debug.LogError("设备..:" + data);
string[] info = data.Split(',');
//foreach (string s in info)
//{
// Debug.LogError(s);
//}
if (info.Length < 2) return;
EquipmentCommon equipmentCommon = devices.Find(x => x.deviceID == info[1]);
if (info[0] == "EditorDevice")
{
equipmentCommon.GetComponent<TerrestrialRadioInterferenceManger>().InterferingFrequency = info[2];
}
else if (info[0] == "KeyTarget")
{
HighPriorityTarget highPriorityTarget= HighPriorityTarget.HighPriorityTargets.Find(x => x.Number == info[1]);
if(highPriorityTarget)
{
Vector3 Pos=new Vector3(float.Parse(info[3]), float.Parse(info[4]), float.Parse(info[5]));
highPriorityTarget.BeAssaulted(Pos, false);
}
}
else
{
if (equipmentCommon)
{
equipmentCommon.ReceivingPositionAngle(info);
}
}
}
public void OnDisalbe()
{
SyncCreateRoom.send2roomRequset -= GetSend2roomMsg;
}
}