using System.Collections; using System.Collections.Generic; using UnityEngine; using AX.MessageSystem; using System; using AX.InputSystem; using AX.NetworkSystem; /// /// 全液面火的控制 /// public class FireLiquidLevelCtrl : MonoBehaviour { private ParticleSystem lg1PS; private ParticleSystem lg2PS; private ParticleSystem smokePS; private BoxCollider boxCollider; public float fireScale = 1.0f; public float FireScale { get { return fireScale; } set { fireScale = value; ChangeFireState(); } } public string showTime = "00:00:00";//多少时间以后显示出来 private float minScale = 0.2f; private float maxScale = 2.0f; private float scaleSpeed = 2.0f; private Vector3 boxCol_fire;//x,z:4.7-47 private Vector3 box_smoke;//(1,1,0.5)-(20,20,10) private Vector3 pos_smoke;//Y:20-28.4 public long TargetNormalID; // Use this for initialization private void Awake() { lg1PS = transform.Find("GroundFire_LG1").GetComponent(); lg2PS = transform.Find("GroundFire_LG2").GetComponent(); smokePS = transform.Find("Fire_Smoke_LG").GetComponent(); boxCollider = GetComponent(); boxCol_fire = boxCollider.size; box_smoke = smokePS.shape.scale; pos_smoke = smokePS.transform.localPosition; FireScale = fireScale; } void Start() { MessageDispatcher.AddListener("FIRE_LIQUID_LEVEL_SCALE_COMMAND", Equals); //MessageDispatcher.AddListener("FIRE_LIQUID_LEVEL_SCALE_COMMAND", Minus); FireScaleValue.GetAllFireScales += addMyFireScale; BurnTimer.isBurning = true; } private void Update() { ////测试代码 //if (Input.GetButton("Plus")) //{ // if (fireScale <= maxScale) // { // fireScale += Time.deltaTime * scaleSpeed; // ChangeFireState(); // } // else // { // fireScale = maxScale; // } // ChangeFireState(); //} //if (Input.GetButton("Reduce")) //{ // if (fireScale >= minScale) // { // fireScale -= Time.deltaTime * scaleSpeed; // } // else // { // fireScale = minScale; // } // ChangeFireState(); //} } private void OnDestroy() { MessageDispatcher.RemoveListener("FIRE_LIQUID_LEVEL_SCALE_COMMAND", Equals); //MessageDispatcher.RemoveListener("FIRE_LIQUID_LEVEL_SCALE_COMMAND", Minus); FireScaleValue.GetAllFireScales -= addMyFireScale; MessageDispatcher.SendMessage("BurnTimeSet"); //BurnTimer.BurnTimeSet() } private void Equals(IMessage msg) { if (!GameSettings.othersSettings.isStartDrill) { var data = ((FireLiquidLevelCmdArgs)msg.Data); if (GetComponent().gameObjID == data.SelectgameObjID) { //fireScale = data.FireScale; FireScale = data.FireScale; } //全液面火同步 if (GameSettings.othersSettings.mode != Mode.DisasterManagement) { FireLiquidScaleSyncData arg = new FireLiquidScaleSyncData(); arg.gameObjID = GetComponent().gameObjID; arg.SendUserID = CurrentUserInfo.mySelf.Id; arg.firescale = FireScale; arg.oilTankID = TargetNormalID; NetworkManager.Default.SendAsync("SET_FIRE_LIQUID_SYNC", arg); } } // ChangeFireState(); } //private void Minus(IMessage msg) //{ // if (gameObject.name == (string)msg.Data) // { // if (fireScale >= minScale) // { // fireScale -= Time.deltaTime * scaleSpeed; // } // else // { // fireScale = minScale; // } // ChangeFireState(); // } //} /// /// 改变火的状态 /// private void ChangeFireState() { var box_xz = GetValueAccordingStandardValue(4.7f, 47f); boxCollider.size = new Vector3(box_xz, boxCol_fire.y, box_xz); SetRate(lg1PS, 25f, 250f); var radius_lg1 = lg1PS.shape; radius_lg1.radius = GetValueAccordingStandardValue(2.2f, 22f); SetRate(lg2PS, 10f, 100f); var radius_lg2 = lg2PS.shape; radius_lg2.radius = GetValueAccordingStandardValue(1f, 10f); SetRate(smokePS, 1f, 5f); SetStartSize(smokePS, 10f, 20f, 50f, 100f); var box_Smoke = smokePS.shape; box_Smoke.scale = new Vector3(GetValueAccordingStandardValue(1f, 20f), GetValueAccordingStandardValue(1f, 20f), GetValueAccordingStandardValue(0.5f, 10f)); smokePS.transform.localPosition = new Vector3(pos_smoke.x, GetValueAccordingStandardValue(20f, 28.4f), pos_smoke.z); } private float GetValueAccordingStandardValue(float min, float max) { return (fireScale - minScale) / (maxScale - minScale) * (max - min) + min; } private void SetRate(ParticleSystem ps, float min, float max) { var emission = ps.emission; var rate = emission.rateOverTime; rate.constant = GetValueAccordingStandardValue(min, max); emission.rateOverTime = rate; } private void SetStartSize(ParticleSystem ps, float min_min, float min_max, float max_min, float max_max) { var main = ps.main; var startSize = main.startSize; startSize.constantMin = GetValueAccordingStandardValue(min_min, max_min); startSize.constantMax = GetValueAccordingStandardValue(min_max, max_max); main.startSize = startSize; } private FloatData addMyFireScale(FloatData area) { GameObject mytank = EntitiesManager.Instance.GetEntityByID(TargetNormalID); //float r = mytank.GetComponent().Tank_D / 2; //float myscale = Mathf.PI * (r * r); float myscale = Mathf.RoundToInt(GetComponent().size.x) * Mathf.RoundToInt(GetComponent().size.z); area.value += myscale; return area; } }