using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class WaterFightFire : MonoBehaviour { public SprayParticleType Type; public float SpeedUprate = 1; private ParticleSystem PS; private Collider target; public Collider Target { get { return target; } set { //仅处理直流(普通火、蔓延火,用于蔓延控制) if (Type == SprayParticleType.WaterStraight) { if (target != value && target != null && target.GetComponent()) { if (target.GetComponent().Straightwater.Contains(this)) { target.GetComponent().Straightwater.Remove(this); } } } if (Type == SprayParticleType.Froth) { if (target != value && target != null && target.GetComponent()) { if (target.GetComponent().FrothList.Contains(this)) { target.GetComponent().FrothList.Remove(this); } } } target = value; } } List enter = new List(); List exit = new List(); List inside = new List(); List outside = new List(); float timer = 1f; void Start() { PS = GetComponent(); // target = GetComponentInParent(); } //public int TriggerThreshold //{ // get { return _triggerThreshold; } // set { _triggerThreshold = value; } //} //public void ToggleWater(bool isOpen) //{ // IsSendPoint = false; // gameObject.SetActive(isOpen); //} //public void Init() //{ // transform.localPosition = Vector3.zero; // transform.localEulerAngles = Vector3.zero; // //****************核心代码 // PS = GetComponent(); // //if (XFTarget != null) // // PS.trigger.SetCollider(0, XFTarget.GetComponentInChildren(true)); // ////******************* // //var mainModule = PS.main; // //{ // // mainModule.startSpeed = ShotSpeed; // // mainModule.startLifetime = LifeTime; // //} //} private int debugCount = 0; void OnParticleTrigger() { if (Target != null) { PS.trigger.SetCollider(0, Target); } int enterNum = PS.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter); int exitNum = PS.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit); int insideNum = PS.GetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside); int outsideNum = PS.GetTriggerParticles(ParticleSystemTriggerEventType.Outside, outside); if (enterNum > 0) OnEnterCollider(enter); if (exitNum > 0) OnExitCollider(exit); if (insideNum > 0) OnInSideCollider(inside); else OnDontinCollider(inside); if (outsideNum > 0) OnOutSideCollider(outside); #if UNITY_EDITOR // if (debugCount <= 1) // { // Debug.Log("insideNum" + insideNum + " inside.Count" + inside.Count); // Debug.Log("enterNum" + enterNum + " enter.Count" + enter.Count); // Debug.Log("exitNum" + exitNum + " exit.Count" + exit.Count); // Debug.Log("outsideNum" + outsideNum + " outside.Count" + outside.Count); // debugCount++; // } #endif PS.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter); PS.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit); PS.SetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside); PS.SetTriggerParticles(ParticleSystemTriggerEventType.Outside, outside); } private void OnDontinCollider(List inside) { if (CurrentUserInfo.room!=null&&CurrentUserInfo.mySelf.Id == CurrentUserInfo.room.Owner.UserInfo.Id) { //水枪移出火堆 timer -= Time.deltaTime; if (timer < 0) { if (Target != null && Target.GetComponent()) { if (Target.GetComponent().Straightwater.Contains(this)) { Target.GetComponent().Straightwater.Remove(this); } //Debug.Log(Target.name + "/" + Target.GetComponent().Straightwater.Count); if (Target.GetComponent().FrothList.Contains(this)) { Target.GetComponent().FrothList.Remove(this); } Target = null; } timer = 1f; } } } private void FixedAction() { //if (IsSendPoint) return; //_ffTimer += Time.deltaTime; //if (_ffTimer >= Interval) //{ // _ffTimer -= Interval; // int id = RoleManager.Instance.currentRoleID; // DataCommModule.Instance.SetPointValue(FireGunPoint, PointValue, id, 1); // IsSendPoint = true; // Debug.LogFormat("________发送了点..{0}值{1}", FireGunPoint, PointValue); //} } void OnEnterCollider(List enters) { Debug.Log("enter"); } void OnExitCollider(List exits) { Debug.Log("exit"); } void OnInSideCollider(List insides) { if (CurrentUserInfo.room!=null&&CurrentUserInfo.mySelf.Id == CurrentUserInfo.room.Owner.UserInfo.Id) { timer -= Time.deltaTime; if (timer < 0) { if (Target != null && Target.GetComponent()) { if (Type == SprayParticleType.WaterStraight) { if (!Target.GetComponent().Straightwater.Contains(this)) { Target.GetComponent().Straightwater.Add(this); // Debug.Log(Target.name + "/" + Target.GetComponent().Straightwater.Count); } } if (Type == SprayParticleType.Froth) { if (!Target.GetComponent().FrothList.Contains(this)) { Target.GetComponent().FrothList.Add(this); } } } if(Target!=null) { MinuFireNormal(); } timer = 1f; } } } void OnOutSideCollider(List outsides) { timer -= Time.deltaTime; if (timer < 0) { if (Target != null) { if (Target.GetComponent()) { if (Type == SprayParticleType.WaterStraight) { if (Target.GetComponent().Straightwater.Contains(this)) { Target.GetComponent().Straightwater.Remove(this); Debug.Log(Target.GetComponent().Straightwater.Count); } } if (Type==SprayParticleType.Froth) { if (Target.GetComponent().FrothList.Contains(this)) { Target.GetComponent().FrothList.Remove(this); } } } } Target = null; timer = 1f; } } void MinuFireNormal() { //火的面积 float fireArea; if (Type == SprayParticleType.WaterStraight) { if (Target.GetComponent()) { //如果是普通火 if (Target.GetComponent().gameObjType == CloneObjType.fireNormal || Target.GetComponent().gameObjType == CloneObjType.SpreadedFire) { if (Target.GetComponent()) { fireArea = Target.GetComponent().selectedFireScale; } else { fireArea = 10f; } //这堆火的熄灭总时长(单位:秒), float TotalDietime = (fireArea / 50.00000f) * 900 / SpeedUprate; //单位灭火速率(每人、每秒多少平火),这里放大了100倍 //float DieSpeed = (1 / TotalDietime) * 100; float minusrate1 = (1 / TotalDietime) * Target.GetComponent().originalrate1; float minusrate2 = (1 / TotalDietime) * Target.GetComponent().originalrate2; //LG1 rateovertime 减少速率; // Target.GetComponent().rateovertime1 -= (1 / TotalDietime) * Target.GetComponent().originalrate1; // Target.GetComponent().rateovertime2 -= (1 / TotalDietime) * Target.GetComponent().originalrate2; Target.GetComponent().FireNormalSizeCalculate(minusrate1, minusrate2); } } } if (Type == SprayParticleType.Froth) { if (Target.GetComponent()) { if (Target.GetComponent().gameObjType == CloneObjType.LiquidLevel) { //Debug.Log(111); long oilId = Target.GetComponent().TargetNormalID; float direction = EntitiesManager.Instance.GetEntityByID(oilId).GetComponent().Tank_D; fireArea = Mathf.PI * Mathf.Pow(direction / 2.00000f, 2); //if (!JudeLequipBeFight(Target,fireArea)) //{ // return; //} //这堆火的熄灭总时长(单位:秒), float TotalDietime = (fireArea / 50.00000f) * 900 / SpeedUprate; //单位灭火速率(每人、每秒多少平火),这里放大了100倍 //float DieSpeed = (1 / TotalDietime) * 100; float minusrate1 = (1 / TotalDietime) * Target.GetComponent().originalrate1; float minusrate2 = (1 / TotalDietime) * Target.GetComponent().originalrate2; //LG1 rateovertime 减少速率; // Target.GetComponent().rateovertime1 = Target.GetComponent().rateovertime1-(1 / TotalDietime) * Target.GetComponent().originalrate1; // Target.GetComponent().rateovertime2 = Target.GetComponent().rateovertime2-(1 / TotalDietime) * Target.GetComponent().originalrate2; Target.GetComponent().FireNormalSizeCalculate(minusrate1, minusrate2); } if (Target.GetComponent().gameObjType == CloneObjType.Leak1) { fireArea = Target.GetComponent().size.x * Target.GetComponent().size.z; float TotalDietime = (fireArea / 50.00000f) * 900 / SpeedUprate; Target.GetComponent().fireBottomrate -= (1 / TotalDietime) * Target.GetComponent().OriFireBottomrate; Target.GetComponent().Smokerate -= (1 / TotalDietime) * Target.GetComponent().OriSmokerate; Target.GetComponent().firerate -= (1 / TotalDietime) * Target.GetComponent().OriFirerate; Target.GetComponent().Leak1Calculate(); } } } } /// /// 判断全液面火能不能被熄灭 /// /// bool JudeLequipBeFight(Collider target,float Area) { bool can = true; float concectarea = 0; if (target!=null) { FireFightNormal ffn= target.GetComponent(); for (int i = 0; i < ffn.FrothList.Count; i++) { if (ffn.GetComponentInParent() || ffn.GetComponentInParent()) { concectarea += 50; } else { concectarea += 200; } } } if (concectarea >= Area) { can = true; } else { can = false; } return can; } public void OnDisable() { if (Target != null&&Target.GetComponent()) { if (Target.GetComponent().Straightwater.Contains(this)) Target.GetComponent().Straightwater.Remove(this); if (Target.GetComponent().FrothList.Contains(this)) Target.GetComponent().FrothList.Remove(this); } Target = null; } public void OnDestroy() { if (Target != null && Target.GetComponent()) { if (Target.GetComponent().Straightwater.Contains(this)) Target.GetComponent().Straightwater.Remove(this); if (Target.GetComponent().FrothList.Contains(this)) Target.GetComponent().FrothList.Remove(this); } Target = null; } }