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(); } // 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 ids = new List(); foreach (Transform child in transform) { ids.Add(child.GetComponent().gameObjID); } //视口大小高与视口渲染的顶视图UI高的比例 var factor_y = (FireDeployCamera.orthographicSize * 2) / FireDeployRawImage.GetComponent().sizeDelta.y; //视口大小长与视口渲染的顶视图UI长的比例 var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect / FireDeployRawImage.GetComponent().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().localPosition = mousePosOnUI; gameObj.GetComponent().objWorldPos = data.clonePos; gameObj.GetComponent().localEulerAngles = data.eulerAngles; gameObj.GetComponent().fireCarEngine = data.fireCarEngine; gameObj.GetComponent().org = data.org; gameObj.GetComponent().color = data.color; } else {//生成新实例 var clonedObj = GameObject.Instantiate(ClonePrefab, transform) as GameObject; clonedObj.GetComponent().localPosition = mousePosOnUI; EntitiesManager.Instance.RemoveEntity(clonedObj.GetComponent().gameObjID, clonedObj); clonedObj.GetComponent().gameObjID = data.gameObjID; EntitiesManager.Instance.AddEntity(clonedObj.GetComponent().gameObjID, clonedObj); clonedObj.GetComponent().gameObjType = data.gameObjType; clonedObj.GetComponent().UserID = data.UserID; clonedObj.GetComponent().localEulerAngles = data.eulerAngles; clonedObj.GetComponent().objWorldPos = data.clonePos; clonedObj.GetComponent().fireCarEngine = data.fireCarEngine; clonedObj.GetComponent().org = data.org; clonedObj.GetComponent().color = data.color; clonedObj.transform.Find("Head/orgName").GetComponent().text = clonedObj.GetComponent().org.DisplayName; clonedObj.transform.Find("Head/CarTypeName").GetComponent().text = clonedObj.GetComponent().fireCarEngine.TypeName; clonedObj.transform.Find("Head").GetComponent().color = data.color; clonedObj.transform.Find("Line").GetComponent().color = data.color; } } if (CloneType == CloneObjType.FDFireMan) { List ids = new List(); foreach (Transform child in transform) { ids.Add(child.GetComponent().gameObjID); } //视口大小高与视口渲染的顶视图UI高的比例 var factor_y = (FireDeployCamera.orthographicSize * 2) / FireDeployRawImage.GetComponent().sizeDelta.y; //视口大小长与视口渲染的顶视图UI长的比例 var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect / FireDeployRawImage.GetComponent().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().localPosition = mousePosOnUI; gameObj.GetComponent().objWorldPos = data.clonePos; gameObj.GetComponent().localEulerAngles = data.eulerAngles; gameObj.GetComponent().org = data.org; gameObj.GetComponent().color = data.color; } else {//生成新实例 var clonedObj = GameObject.Instantiate(ClonePrefab, transform) as GameObject; clonedObj.GetComponent().localPosition = mousePosOnUI; EntitiesManager.Instance.RemoveEntity(clonedObj.GetComponent().gameObjID, clonedObj); clonedObj.GetComponent().gameObjID = data.gameObjID; EntitiesManager.Instance.AddEntity(clonedObj.GetComponent().gameObjID, clonedObj); clonedObj.GetComponent().gameObjType = data.gameObjType; clonedObj.GetComponent().UserID = data.UserID; clonedObj.GetComponent().localEulerAngles = data.eulerAngles; clonedObj.GetComponent().objWorldPos = data.clonePos; clonedObj.GetComponent().org = data.org; clonedObj.GetComponent().color = data.color; clonedObj.transform.Find("Head/orgName").GetComponent().text = clonedObj.GetComponent().org.DisplayName; clonedObj.transform.Find("Head/CarTypeName").GetComponent().text = "消防员"; clonedObj.transform.Find("Head").GetComponent().color = data.color; clonedObj.transform.Find("Line").GetComponent().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 ids = new List(); foreach (Transform child in transform) { ids.Add(child.GetComponent().gameObjID); } //视口大小高与视口渲染的顶视图UI高的比例 var factor_y = (FireDeployCamera.orthographicSize * 2) / FireDeployRawImage.GetComponent().sizeDelta.y; //视口大小长与视口渲染的顶视图UI长的比例 var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect / FireDeployRawImage.GetComponent().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().localPosition = mousePosOnUI; if (CloneType != CloneObjType.Arrow) { gameObj.GetComponent().objWorldPos = data.clonePos; } else { gameObj.GetComponent().objWorldPos = data.clonePos; } gameObj.GetComponent().localEulerAngles = data.eulerAngles; gameObj.GetComponent().sizeDelta = new Vector2(data.rectTransformWith, gameObj.GetComponent().sizeDelta.y); gameObj.transform.Find("Background").GetComponent().sizeDelta = new Vector2(data.rectTransformWith, gameObj.transform.Find("Background").GetComponent().sizeDelta.y); gameObj.transform.Find("Background/Checkmark").GetComponent().sizeDelta = new Vector2( data.rectTransformWith, gameObj.transform.Find("Background/Checkmark").GetComponent().sizeDelta.y); } else {//生成新实例 var clonedObj = GameObject.Instantiate(ClonePrefab, transform) as GameObject; clonedObj.GetComponent().localPosition = mousePosOnUI; EntitiesManager.Instance.RemoveEntity(clonedObj.GetComponent().gameObjID, clonedObj); clonedObj.GetComponent().gameObjID = data.gameObjID; EntitiesManager.Instance.AddEntity(clonedObj.GetComponent().gameObjID, clonedObj); clonedObj.GetComponent().gameObjType = data.gameObjType; clonedObj.GetComponent().UserID = data.UserID; clonedObj.GetComponent().localEulerAngles = data.eulerAngles; if (CloneType != CloneObjType.Arrow) { clonedObj.GetComponent().objWorldPos = data.clonePos; } else { clonedObj.GetComponent().objWorldPos = data.clonePos; } clonedObj.GetComponent().sizeDelta = new Vector2(data.rectTransformWith, clonedObj.GetComponent().sizeDelta.y); clonedObj.transform.Find("Background").GetComponent().sizeDelta = new Vector2(data.rectTransformWith, clonedObj.transform.Find("Background").GetComponent().sizeDelta.y); clonedObj.transform.Find("Background/Checkmark").GetComponent().sizeDelta = new Vector2( data.rectTransformWith, clonedObj.transform.Find("Background/Checkmark").GetComponent().sizeDelta.y); } } } if (data.gameObjType == CloneType && ClonePrefab != null && transform.GetComponent() && data.fireDeployPrivateToolType == transform.GetComponent().fireDeployPrivateToolType) { if (CloneType == CloneObjType.CutOff || CloneType == CloneObjType.BreakThrough || CloneType == CloneObjType.Segment || CloneType == CloneObjType.Suppress || CloneType == CloneObjType.PincerAttack || CloneType == CloneObjType.JointAttack) { List ids = new List(); foreach (Transform child in transform) { ids.Add(child.GetComponent().gameObjID); } //视口大小高与视口渲染的顶视图UI高的比例 var factor_y = (FireDeployCamera.orthographicSize * 2) / FireDeployRawImage.GetComponent().sizeDelta.y; //视口大小长与视口渲染的顶视图UI长的比例 var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect / FireDeployRawImage.GetComponent().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().localPosition = mousePosOnUI; gameObj.GetComponent().objWorldPos = data.clonePos; gameObj.GetComponent().localEulerAngles = data.eulerAngles; } else {//生成新实例 var clonedObj = GameObject.Instantiate(ClonePrefab, transform) as GameObject; clonedObj.GetComponent().localPosition = mousePosOnUI; EntitiesManager.Instance.RemoveEntity(clonedObj.GetComponent().gameObjID, clonedObj); clonedObj.GetComponent().gameObjID = data.gameObjID; EntitiesManager.Instance.AddEntity(clonedObj.GetComponent().gameObjID, clonedObj); clonedObj.GetComponent().gameObjType = data.gameObjType; clonedObj.GetComponent().UserID = data.UserID; clonedObj.GetComponent().localEulerAngles = data.eulerAngles; clonedObj.GetComponent().objWorldPos = data.clonePos; } } } } }