网上演练贵港万达广场(人员密集)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

333 lines
16 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AX.MessageSystem;
using System;
using UnityEngine.UI;
public class FireDeploySYNCHandle : MonoBehaviour
{
public static FireDeploySYNCHandle Instance;
public GameObject ClonePrefab;
public CloneObjType CloneType;
//作战部署顶视图UI
private Transform FireDeployRawImage;
//作战部署顶视图相机
private Camera FireDeployCamera;
private Vector3 mousePosOnUI;
public FireDepolySYNCInfo fireDepolySYNCInfo;
private void Awake()
{
MessageDispatcher.AddListener("FDSYNC_HANDLE", FDSYNCHandle);
FireDeployRawImage = GameObject.Find("OperationalPreparations/MainWindow/RawImage").transform;
FireDeployCamera = GameObject.Find("FireDeployCamera").GetComponent<Camera>();
}
// Use this for initialization
void Start()
{
}
private void OnDestroy()
{
MessageDispatcher.RemoveListener("FDSYNC_HANDLE", FDSYNCHandle);
}
// Update is called once per frame
void Update()
{
}
private void FDSYNCHandle(IMessage obj)
{
var data = (FireDeploySYNCDATA)obj.Data;
if (data.gameObjType == CloneType && ClonePrefab != null)
{
if (CloneType == CloneObjType.FDWaterTanker
|| CloneType == CloneObjType.FDFoamTruck
|| CloneType == CloneObjType.FDAerialTowerTruck
|| CloneType == CloneObjType.FDHighSprayingTruck
|| CloneType == CloneObjType.FDLadderTruck
|| CloneType == CloneObjType.FDSmokeExhaustTruck
|| CloneType == CloneObjType.FDRescueVehicle
|| CloneType == CloneObjType.FDApparatus
|| CloneType == CloneObjType.FDLightingAppliance
|| CloneType == CloneObjType.FDAirSupplyTruck
|| CloneType == CloneObjType.FDForcibleEntryTruck
)
{
List<long> ids = new List<long>();
foreach (Transform child in transform)
{
ids.Add(child.GetComponent<BaseGameObjInfo>().gameObjID);
}
//视口大小高与视口渲染的顶视图UI高的比例
var factor_y = (FireDeployCamera.orthographicSize * 2) /
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.y;
//视口大小长与视口渲染的顶视图UI长的比例
var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect /
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.x;
Vector3 localOffset = FireDeployCamera.transform.InverseTransformPoint(data.clonePos);
Vector3 offset = new Vector3(localOffset.x / factor_x, localOffset.y / factor_y, 0);
mousePosOnUI = offset;
if (ids.Contains(data.gameObjID))
{//只更新状态
GameObject gameObj = EntitiesManager.Instance.GetEntityByID(data.gameObjID);
gameObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
gameObj.GetComponent<FDTruckMessage>().objWorldPos = data.clonePos;
gameObj.GetComponent<RectTransform>().localEulerAngles = data.eulerAngles;
gameObj.GetComponent<FDTruckMessage>().fireCarEngine = data.fireCarEngine;
gameObj.GetComponent<FDTruckMessage>().org = data.org;
gameObj.GetComponent<FDTruckMessage>().color = data.color;
}
else
{//生成新实例
var clonedObj = GameObject.Instantiate(ClonePrefab, transform) as GameObject;
clonedObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
EntitiesManager.Instance.RemoveEntity(clonedObj.GetComponent<BaseGameObjInfo>().gameObjID, clonedObj);
clonedObj.GetComponent<BaseGameObjInfo>().gameObjID = data.gameObjID;
EntitiesManager.Instance.AddEntity(clonedObj.GetComponent<BaseGameObjInfo>().gameObjID, clonedObj);
clonedObj.GetComponent<BaseGameObjInfo>().gameObjType = data.gameObjType;
clonedObj.GetComponent<BaseGameObjInfo>().UserID = data.UserID;
clonedObj.GetComponent<RectTransform>().localEulerAngles = data.eulerAngles;
clonedObj.GetComponent<FDTruckMessage>().objWorldPos = data.clonePos;
clonedObj.GetComponent<FDTruckMessage>().fireCarEngine = data.fireCarEngine;
clonedObj.GetComponent<FDTruckMessage>().org = data.org;
clonedObj.GetComponent<FDTruckMessage>().color = data.color;
clonedObj.transform.Find("Head/orgName").GetComponent<Text>().text =
clonedObj.GetComponent<FDTruckMessage>().org.DisplayName;
clonedObj.transform.Find("Head/CarTypeName").GetComponent<Text>().text =
clonedObj.GetComponent<FDTruckMessage>().fireCarEngine.TypeName;
clonedObj.transform.Find("Head").GetComponent<Image>().color = data.color;
clonedObj.transform.Find("Line").GetComponent<Image>().color = data.color;
}
}
if (CloneType == CloneObjType.FDFireMan)
{
List<long> ids = new List<long>();
foreach (Transform child in transform)
{
ids.Add(child.GetComponent<BaseGameObjInfo>().gameObjID);
}
//视口大小高与视口渲染的顶视图UI高的比例
var factor_y = (FireDeployCamera.orthographicSize * 2) /
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.y;
//视口大小长与视口渲染的顶视图UI长的比例
var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect /
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.x;
Vector3 localOffset = FireDeployCamera.transform.InverseTransformPoint(data.clonePos);
Vector3 offset = new Vector3(localOffset.x / factor_x, localOffset.y / factor_y, 0);
mousePosOnUI = offset;
if (ids.Contains(data.gameObjID))
{//只更新状态
GameObject gameObj = EntitiesManager.Instance.GetEntityByID(data.gameObjID);
gameObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
gameObj.GetComponent<FDFireManMessage>().objWorldPos = data.clonePos;
gameObj.GetComponent<RectTransform>().localEulerAngles = data.eulerAngles;
gameObj.GetComponent<FDFireManMessage>().org = data.org;
gameObj.GetComponent<FDFireManMessage>().color = data.color;
}
else
{//生成新实例
var clonedObj = GameObject.Instantiate(ClonePrefab, transform) as GameObject;
clonedObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
EntitiesManager.Instance.RemoveEntity(clonedObj.GetComponent<BaseGameObjInfo>().gameObjID, clonedObj);
clonedObj.GetComponent<BaseGameObjInfo>().gameObjID = data.gameObjID;
EntitiesManager.Instance.AddEntity(clonedObj.GetComponent<BaseGameObjInfo>().gameObjID, clonedObj);
clonedObj.GetComponent<BaseGameObjInfo>().gameObjType = data.gameObjType;
clonedObj.GetComponent<BaseGameObjInfo>().UserID = data.UserID;
clonedObj.GetComponent<RectTransform>().localEulerAngles = data.eulerAngles;
clonedObj.GetComponent<FDFireManMessage>().objWorldPos = data.clonePos;
clonedObj.GetComponent<FDFireManMessage>().org = data.org;
clonedObj.GetComponent<FDFireManMessage>().color = data.color;
clonedObj.transform.Find("Head/orgName").GetComponent<Text>().text =
clonedObj.GetComponent<FDFireManMessage>().org.DisplayName;
clonedObj.transform.Find("Head/CarTypeName").GetComponent<Text>().text = "消防员";
clonedObj.transform.Find("Head").GetComponent<Image>().color = data.color;
clonedObj.transform.Find("Line").GetComponent<Image>().color = data.color;
}
}
if (CloneType == CloneObjType.Arrow
|| CloneType == CloneObjType.DirectWaterSupply
|| CloneType == CloneObjType.RelayWaterSupply
|| CloneType == CloneObjType.CouplingWaterSupply
|| CloneType == CloneObjType.WaterLineWaterSupply
|| CloneType == CloneObjType.SuctionFeedWaterSupply
|| CloneType == CloneObjType.HandPumpWaterSupply
|| CloneType == CloneObjType.FloatingFirePumpWaterSupply)
{
List<long> ids = new List<long>();
foreach (Transform child in transform)
{
ids.Add(child.GetComponent<BaseGameObjInfo>().gameObjID);
}
//视口大小高与视口渲染的顶视图UI高的比例
var factor_y = (FireDeployCamera.orthographicSize * 2) /
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.y;
//视口大小长与视口渲染的顶视图UI长的比例
var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect /
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.x;
Vector3 localOffset = FireDeployCamera.transform.InverseTransformPoint(data.clonePos);
Vector3 offset = new Vector3(localOffset.x / factor_x, localOffset.y / factor_y, 0);
mousePosOnUI = offset;
if (ids.Contains(data.gameObjID))
{//只更新状态
GameObject gameObj = EntitiesManager.Instance.GetEntityByID(data.gameObjID);
gameObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
if (CloneType != CloneObjType.Arrow)
{
gameObj.GetComponent<PrivateToolMessage>().objWorldPos = data.clonePos;
}
else
{
gameObj.GetComponent<PublicToolMessage>().objWorldPos = data.clonePos;
}
gameObj.GetComponent<RectTransform>().localEulerAngles = data.eulerAngles;
gameObj.GetComponent<RectTransform>().sizeDelta = new Vector2(data.rectTransformWith,
gameObj.GetComponent<RectTransform>().sizeDelta.y);
gameObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta =
new Vector2(data.rectTransformWith,
gameObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta.y);
gameObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta = new Vector2(
data.rectTransformWith,
gameObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta.y);
}
else
{//生成新实例
var clonedObj = GameObject.Instantiate(ClonePrefab, transform) as GameObject;
clonedObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
EntitiesManager.Instance.RemoveEntity(clonedObj.GetComponent<BaseGameObjInfo>().gameObjID, clonedObj);
clonedObj.GetComponent<BaseGameObjInfo>().gameObjID = data.gameObjID;
EntitiesManager.Instance.AddEntity(clonedObj.GetComponent<BaseGameObjInfo>().gameObjID, clonedObj);
clonedObj.GetComponent<BaseGameObjInfo>().gameObjType = data.gameObjType;
clonedObj.GetComponent<BaseGameObjInfo>().UserID = data.UserID;
clonedObj.GetComponent<RectTransform>().localEulerAngles = data.eulerAngles;
if (CloneType != CloneObjType.Arrow)
{
clonedObj.GetComponent<PrivateToolMessage>().objWorldPos = data.clonePos;
}
else
{
clonedObj.GetComponent<PublicToolMessage>().objWorldPos = data.clonePos;
}
clonedObj.GetComponent<RectTransform>().sizeDelta = new Vector2(data.rectTransformWith,
clonedObj.GetComponent<RectTransform>().sizeDelta.y);
clonedObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta =
new Vector2(data.rectTransformWith,
clonedObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta.y);
clonedObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta = new Vector2(
data.rectTransformWith,
clonedObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta.y);
}
}
}
if (data.gameObjType == CloneType && ClonePrefab != null
&& transform.GetComponent<CloneFireDeployPrivateTool>()
&& data.fireDeployPrivateToolType == transform.GetComponent<CloneFireDeployPrivateTool>().fireDeployPrivateToolType)
{
if (CloneType == CloneObjType.CutOff
|| CloneType == CloneObjType.BreakThrough
|| CloneType == CloneObjType.Segment
|| CloneType == CloneObjType.Suppress
|| CloneType == CloneObjType.PincerAttack
|| CloneType == CloneObjType.JointAttack)
{
List<long> ids = new List<long>();
foreach (Transform child in transform)
{
ids.Add(child.GetComponent<BaseGameObjInfo>().gameObjID);
}
//视口大小高与视口渲染的顶视图UI高的比例
var factor_y = (FireDeployCamera.orthographicSize * 2) /
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.y;
//视口大小长与视口渲染的顶视图UI长的比例
var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect /
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.x;
Vector3 localOffset = FireDeployCamera.transform.InverseTransformPoint(data.clonePos);
Vector3 offset = new Vector3(localOffset.x / factor_x, localOffset.y / factor_y, 0);
mousePosOnUI = offset;
if (ids.Contains(data.gameObjID))
{//只更新状态
GameObject gameObj = EntitiesManager.Instance.GetEntityByID(data.gameObjID);
gameObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
gameObj.GetComponent<PrivateToolMessage>().objWorldPos = data.clonePos;
gameObj.GetComponent<RectTransform>().localEulerAngles = data.eulerAngles;
}
else
{//生成新实例
var clonedObj = GameObject.Instantiate(ClonePrefab, transform) as GameObject;
clonedObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
EntitiesManager.Instance.RemoveEntity(clonedObj.GetComponent<BaseGameObjInfo>().gameObjID, clonedObj);
clonedObj.GetComponent<BaseGameObjInfo>().gameObjID = data.gameObjID;
EntitiesManager.Instance.AddEntity(clonedObj.GetComponent<BaseGameObjInfo>().gameObjID, clonedObj);
clonedObj.GetComponent<BaseGameObjInfo>().gameObjType = data.gameObjType;
clonedObj.GetComponent<BaseGameObjInfo>().UserID = data.UserID;
clonedObj.GetComponent<RectTransform>().localEulerAngles = data.eulerAngles;
clonedObj.GetComponent<PrivateToolMessage>().objWorldPos = data.clonePos;
}
}
}
}
}