天津23维预案
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.
 
 
 
 
 
 

141 lines
4.1 KiB

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<SubwayControl> {
private Transform trigger;
private bool Flag = true;
private GameObject top;
private BoxCollider bc;
private List<string> SubwayFires = new List<string>();
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<BoxCollider>();
smoke = TransformHelper.FindChild(GameObject.Find("TianJinZhan").transform, "nei-subway").gameObject;
maxSize = smoke.transform.GetChild(0).GetComponent<ParticleSystem>().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<CengID>().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<ParticleSystem>().main;
particle.maxParticles = (int)curSize;
}
}
#endregion
}