using AX.MessageSystem; using AX.NetworkSystem; using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class FireFightNormal : MonoBehaviour { //记录打在普通火蔓延火上的直流水数量 public List Straightwater = new List(); //记录打在全液面火上的泡沫的数量 public List FrothList = new List(); //private CloneObjType FireType; //public float MaxLiftTimeLG1; //public float MinLiftTimeLG1; //public float MaxLiftTimeLG2; //public float MinLiftTimeLG2; private Transform fire1; private Transform fire2; private Transform Smoke; ParticleSystem ParticleSystem1; ParticleSystem.EmissionModule emissionModule1; ParticleSystem ParticleSystem2; ParticleSystem.EmissionModule emissionModule2; private BaseGameObjInfo baseinfo; public float rateovertime1; public float rateovertime2; //LG1初始搭设比率 public float originalrate1; //LG2初始搭设比率 public float originalrate2; void Awake() { baseinfo = GetComponent(); fire1 = transform.Find("GroundFire_LG1"); fire2 = transform.Find("GroundFire_LG2"); Smoke = transform.Find("Fire_Smoke_LG"); //MaxLiftTimeLG1 = fire1.GetComponent().main.startLifetime.constantMax; //MinLiftTimeLG1 = fire1.GetComponent().main.startLifetime.constantMin; //MaxLiftTimeLG2 = fire2.GetComponent().main.startLifetime.constantMax; //MinLiftTimeLG2 = fire2.GetComponent().main.startLifetime.constantMin; ParticleSystem1 = fire1.GetComponent(); emissionModule1 = ParticleSystem1.emission; ParticleSystem2 = fire2.GetComponent(); emissionModule2 = ParticleSystem2.emission; originalrate1 = emissionModule1.rateOverTime.constant; originalrate2 = emissionModule2.rateOverTime.constant; rateovertime1 = emissionModule1.rateOverTime.constant; rateovertime2 = emissionModule2.rateOverTime.constant; // ParticleSystem.MainModule sm = Smoke.GetComponent().main; //Debug.Log( sm.startLifetime.constantMax); // Debug.Log( sm.startLifetime) ; MessageDispatcher.AddListener("FIRE_LIQUID_LEVEL_SCALE_COMMAND", SetOriEss); } void Start() { //将该火加入到对应的火堆字典中 //因为蔓延火是在演练开始后才开始蔓延,所以能加进去 //只加蔓延火 if (baseinfo.gameObjType==CloneObjType.SpreadedFire&& GetComponent()) { long mainFireId = GetComponent().fireGameObjID; SpreadFireController.fireStruckContainDic[mainFireId].Add(this); } } void OnDisable() { if (GameSettings.othersSettings.isStartDrill) { //从字典中移除该普通火 if (baseinfo.gameObjType == CloneObjType.fireNormal) { if (SpreadFireController.fireStruckContainDic.ContainsKey(baseinfo.gameObjID)) { SpreadFireController.fireStruckContainDic[baseinfo.gameObjID].Remove(this); } } //主火(普通火)只隐藏不删除 Straightwater.Clear(); //清空泡沫数量 FrothList.Clear(); } } private void OnDestroy() {//蔓延火熄灭直接删除 //从字典中移除该蔓延火 if (baseinfo.gameObjType == CloneObjType.SpreadedFire && GetComponent()) { long mainFireId = GetComponent().fireGameObjID; if (SpreadFireController.fireStruckContainDic.ContainsKey(mainFireId)) { if (SpreadFireController.fireStruckContainDic[mainFireId].Contains(this)) { SpreadFireController.fireStruckContainDic[mainFireId].Remove(this); } } } Straightwater.Clear(); FrothList.Clear(); MessageDispatcher.RemoveListener("FIRE_LIQUID_LEVEL_SCALE_COMMAND", SetOriEss); } private void SetOriEss(IMessage obj) { if (baseinfo.gameObjType == CloneObjType.LiquidLevel) { setRate(); } } public void setRate() { originalrate1 = emissionModule1.rateOverTime.constant; originalrate2 = emissionModule2.rateOverTime.constant; rateovertime1 = originalrate1;//emissionModule1.rateOverTime.constant; rateovertime2 = originalrate2;//emissionModule2.rateOverTime.constant; } void OnParticleCollision(GameObject other) { if (CurrentUserInfo.room!=null&&CurrentUserInfo.mySelf.Id == CurrentUserInfo.room.Owner.UserInfo.Id) { if (baseinfo.gameObjType == CloneObjType.fireNormal) { if (other.GetComponentInParent()) { if (other.GetComponentInParent().particleType == SprayParticleType.WaterStraight) { other.GetComponentInChildren(true).Target = gameObject.GetComponent(); } } } else if (baseinfo.gameObjType == CloneObjType.LiquidLevel) { if (other.GetComponentInParent()) { if (other.GetComponentInParent().particleType == SprayParticleType.Froth) { other.GetComponentInParent().Target = gameObject.GetComponent(); } } } else if (baseinfo.gameObjType == CloneObjType.SpreadedFire) { if (other.GetComponentInParent()) { if (other.GetComponentInParent().particleType == SprayParticleType.WaterStraight) { other.GetComponentInChildren(true).Target = gameObject.GetComponent(); } } } } } public void FireNormalSizeCalculate(float rate1, float rate2) { //ParticleSystem.MinMaxCurve LG1max = fire1.GetComponent().main.startLifetime; //LG1max = new ParticleSystem.MinMaxCurve(MaxLiftTimeLG1,MinLiftTimeLG1); rateovertime1 -= rate1; rateovertime2 -= rate2; emissionModule1.rateOverTime = new ParticleSystem.MinMaxCurve(rateovertime1); emissionModule2.rateOverTime = new ParticleSystem.MinMaxCurve(rateovertime2); if (rateovertime1 < 0 && rateovertime2 < 0) { //蔓延火和全液面火 if (baseinfo.gameObjType == CloneObjType.SpreadedFire || baseinfo.gameObjType == CloneObjType.LiquidLevel) { EntitiesManager.Instance.DeleteObj(gameObject); } //普通火(主火),隐藏其所有子物体,因为还有蔓延逻辑 if (baseinfo.gameObjType == CloneObjType.fireNormal) { for (int i = 0; i < transform.childCount; i++) { transform.GetChild(i).gameObject.SetActive(false); } GetComponent().enabled = false; } } var arg = new NormalFireFightSyncData(); arg.SendUserID = CurrentUserInfo.mySelf.Id; arg.gameObjID = GetComponent().gameObjID; arg.Rateovertime1 = rateovertime1; arg.Rateovertime2 = rateovertime2; NetworkManager.Default.SendAsync("NORMAL_OR_LIQUID_FIRE_FIGHT_SYNC", arg); // Debug.Log(CurrentUserInfo.role.ToString() + rateovertime1+"//"+rate1); } }