using System.Collections; using System.Collections.Generic; using UnityEngine; using AX.MessageSystem; using System; using AX.TrackRecord; using DevelopEngine; //Author:YHD public class SubwayControl : SingletonMono { private Transform trigger; private bool Flag = true; private GameObject top; private BoxCollider bc; private List SubwayFires = new List(); private GameObject smoke; private bool smokeShowFlag = false; private bool StartKillSmokeFlag = false; private int maxSize = 300; private int seconds = 10;//10秒钟烟雾排净 private float curSize = 300; // Use this for initialization void Start () { trigger = transform.Find("trigger"); top = transform.Find("DiTie_Top").gameObject; bc = GetComponent(); smoke = TransformHelper.FindChild(GameObject.Find("TianJinZhan").transform, "nei-subway").gameObject; maxSize = smoke.transform.GetChild(0).GetComponent().main.maxParticles; curSize = maxSize; MessageDispatcher.AddListener("DoubleClick", DoubleClickFunc); MessageDispatcher.AddListener("Y", SetSmoke); MessageDispatcher.AddListener("SmokeChange", SmokeChange); } void OnDestroy() { MessageDispatcher.RemoveListener("DoubleClick", DoubleClickFunc); MessageDispatcher.RemoveListener("Y", SetSmoke); MessageDispatcher.RemoveListener("SmokeChange", SmokeChange); } private void SetSmoke(IMessage msg) { if (msg.Data != null) return; if (CheckHasSubwayFire()) { smokeShowFlag = !smokeShowFlag; SetSmoke(smokeShowFlag); if (RecordManager.Instance.IsRecording) { TrackRecordHelpClass.RecordTriggerEvent("ShowHideSmoke", smokeShowFlag); } } } public void SetSmoke(bool flag) { smokeShowFlag = flag; smoke.SetActive(flag); } private void DoubleClickFunc(IMessage msg) { if ((string)msg.Data == (transform.name + trigger.name)) { Flag = !Flag; SetTop(Flag); if (RecordManager.Instance.IsRecording) { TrackRecordHelpClass.RecordTriggerEvent("DoubleClick", Flag); } } } public void SetTop(bool flag) { top.SetActive(flag); bc.enabled = flag; Flag = flag; } private bool CheckHasSubwayFire() { var pfire = GameObject.Find("pfire").transform; foreach (Transform fire in pfire) { if (fire.GetComponent().hitTag == "Subway") { return true; } } return false; } #region 烟控制相关 private void SmokeChange(IMessage msg) { if (smokeShowFlag)//烟正显示着。。。 { if (CheckHasSubwayFire()) { MessageDispatcher.SendMessage("Operatinghints", (object)"有火未熄灭,无法排烟!"); return; } //排烟控制 StartKillSmokeFlag = true; MessageDispatcher.SendMessage("Operatinghints", (object)"开始排烟!"); } } // Update is called once per frame void FixedUpdate() { if (StartKillSmokeFlag) { if (curSize > 0) { curSize -= Time.deltaTime * (maxSize / seconds); SetSmoke(curSize); } else { StartKillSmokeFlag = false; curSize = maxSize; SetSmoke(curSize); SetSmoke(false); MessageDispatcher.SendMessage("Operatinghints", (object)"排烟结束!"); } } } private void SetSmoke(float curSize) { foreach (Transform child in smoke.transform) { var particle = child.GetComponent().main; particle.maxParticles = (int)curSize; } } #endregion }