using AX.MessageSystem; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class FireControl : ObjDoubleClick { public FireSettingData MyData; public TextMesh WDtext; public TextMesh RFStext; public void Start() { MessageDispatcher.AddListener("ReplayEvent", ReplayEventFire); MessageDispatcher.AddListener("ReplayEvent", ReplayEventFireReset); MessageDispatcher.AddListener("ReplayEvent", ReplayFireTemperature); MessageDispatcher.AddListener("ReplayEvent", ReplayFireRadiation); MessageDispatcher.AddListener("ShowHideInfo", InfoActive); AgentController.checkCautionAreaEntering += CheckEnterCautionArea; InitInfo(); } public void OnDestroy() { MessageDispatcher.RemoveListener("ReplayEvent", ReplayEventFire); MessageDispatcher.RemoveListener("ReplayEvent", ReplayEventFireReset); MessageDispatcher.RemoveListener("ReplayEvent", ReplayFireTemperature); MessageDispatcher.RemoveListener("ReplayEvent", ReplayFireRadiation); MessageDispatcher.RemoveListener("ShowHideInfo", InfoActive); AgentController.checkCautionAreaEntering -= CheckEnterCautionArea; } private void InfoActive(IMessage obj) { WDtext.gameObject.SetActive(GlobalVariable.InfoActive); RFStext.gameObject.SetActive(GlobalVariable.InfoActive); } private void InitInfo() { WDtext.gameObject.SetActive(GlobalVariable.InfoActive); RFStext.gameObject.SetActive(GlobalVariable.InfoActive); } private void ReplayEventFire(IMessage obj) { var eventData = (EventData)obj.Data; if (eventData.eventType == RecordEventType.Fire) { FireSettingData data = JsonUtility.FromJson(eventData.json); if (data.name == gameObject.name) { MyData = data; //UI回放 //FireSettingPanel.GetActiveInstance.SettingFire(gameObject); //StartCoroutine(hide()); } } } private void ReplayEventFireReset(IMessage obj) { var eventData = (EventData)obj.Data; if (eventData.eventType == RecordEventType.FireReset) { FireSettingData data = JsonUtility.FromJson(eventData.json); if (data.name == gameObject.name) { MyData = data; //重置路径时,如果是已经蔓延过一次及存在蔓延出来的火,重置删除蔓延路径的同时,删除蔓延出来的火 Transform pfire = GameObject.Find("P_AllParent").transform.Find("P_Disaster/P_SpreadFire"); foreach (Transform child in pfire) { if (child.GetComponent() && child.GetComponent().SourceId == MyData.id) { Destroy(child.gameObject); } } gameObject.GetComponent().Reset(); } } } IEnumerator hide() { yield return new WaitForSeconds(0.5f); FireSettingPanel.GetInstance.gameObject.SetActive(false); } public override void ClickFunc() { base.ClickFunc(); if (MyData == null) { MyData = new FireSettingData(); } if (MyData.id == 0) { MyData.id = GetComponent().gameObjID; } MyData.name = gameObject.name; FireSettingPanel.GetActiveInstance.SettingFire(gameObject); } public void SetTemperatureText() { WDtext.text = string.IsNullOrEmpty(MyData.temperature) ? "" : "温度:" + MyData.temperature; AddRecordFireTemperatureEvent(); } private void AddRecordFireTemperatureEvent() { if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal) { var eventData = new EventData(); eventData.time = RecordManager.Instance.RecordTimer; eventData.cloneObjType = GetComponent().gameObjType; eventData.eventType = RecordEventType.FireTemperature; FireTemperatureData data = new FireTemperatureData(); data.gameObjID = GetComponent().gameObjID; data.temperature = MyData.temperature; eventData.json = JsonUtility.ToJson(data); RecordManager.Instance.jsonData.eventDataList.Add(eventData); } } private void ReplayFireTemperature(IMessage obj) { var eventData = (EventData)obj.Data; if (eventData.eventType == RecordEventType.FireTemperature) { FireTemperatureData data = JsonUtility.FromJson(eventData.json); if (data.gameObjID == GetComponent().gameObjID) { WDtext.text = string.IsNullOrEmpty(data.temperature) ? "" : "温度:" + data.temperature; } } } public void SetRadiationText() { RFStext.text = string.IsNullOrEmpty(MyData.radiation) ? "" : "热辐射:" + MyData.radiation; AddRecordFireRadiationEvent(); } private void AddRecordFireRadiationEvent() { if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal) { var eventData = new EventData(); eventData.time = RecordManager.Instance.RecordTimer; eventData.cloneObjType = GetComponent().gameObjType; eventData.eventType = RecordEventType.FireRadiation; FireRadiationData data = new FireRadiationData(); data.gameObjID = GetComponent().gameObjID; data.radiation = MyData.radiation; eventData.json = JsonUtility.ToJson(data); RecordManager.Instance.jsonData.eventDataList.Add(eventData); } } private void ReplayFireRadiation(IMessage obj) { var eventData = (EventData)obj.Data; if (eventData.eventType == RecordEventType.FireRadiation) { FireRadiationData data = JsonUtility.FromJson(eventData.json); if (data.gameObjID == GetComponent().gameObjID) { RFStext.text = string.IsNullOrEmpty(data.radiation) ? "" : "热辐射:" + data.radiation; } } } /// /// 检测人员是否进入警戒区,警戒区:火焰外围15米范围内 /// /// /// /// private IntData CheckEnterCautionArea(Vector3 point,IntData data) { float distance = Vector3.Distance(point, transform.position); if (distance <= 15) //如果距离小于15,计数 { data.value += 1; } return data; } }