From 895e6764872749a2a26415d17697b19ee2587ea9 Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Mon, 16 Nov 2020 17:28:01 +0800 Subject: [PATCH] 水精灵技能 冷冻气息 --- Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs | 87 ++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 81 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs b/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs index 5b6a54b..99463e7 100644 --- a/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs +++ b/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs @@ -117,12 +117,19 @@ private EnergyUICtl[,] arrTowerEnergyUi; - private ParticleSystem[,] arrTowerEnergyEffect; + private FreezeBreath[,] arrTowerFreezeBreathUi; + + private GameObject[,] arrTowerEnergyEffect; + + /// <summary> + /// 水精灵充能满特效 + /// </summary> + private GameObject[,] arrTowerFreezeBreathEffect; /// <summary> /// 充能特效对应的Prefab. /// </summary> - public ParticleSystem energyEffectPrefab; + public GameObject energyEffectPrefab; /// <summary> /// 此位置上塔对应的子弹充能Prefab.塔放置到当前的塔位后,如果是对应的塔防类型,需要把 @@ -134,6 +141,16 @@ /// 充能条对应的界面 /// </summary> public GameObject towerEnergyUIPrefab; + + /// <summary> + /// 水精灵塔技能(冷冻气息)充能条 + /// </summary> + public GameObject FreezeBreathChargePrefab; + + /// <summary> + /// 水精灵塔充能条特效 + /// </summary> + public GameObject FreezeBreathChargeEffect; /// <summary> /// Converts a location in world space into local grid coordinates. @@ -192,6 +209,16 @@ return arrTowerEnergyUi[x, 3 - y]; } + /// <summary> + /// 获取水精灵对应位置的充能条 + /// </summary> + /// <param name="x"></param> + /// <param name="y"></param> + /// <returns></returns> + public FreezeBreath GetFreezeBreath(int x, int y) + { + return arrTowerFreezeBreathUi[x, 3 - y]; + } /// <summary> /// 获取一个可以放置塔防的位置. @@ -660,7 +687,9 @@ m_arrTowerBulletUIPos = new Vector2[dimensions.x, AttackRowNumbers]; arrTowerBulletUi = new BulletUICtl[dimensions.x, AttackRowNumbers]; arrTowerEnergyUi = new EnergyUICtl[dimensions.x, AttackRowNumbers]; - arrTowerEnergyEffect = new ParticleSystem[dimensions.x, AttackRowNumbers]; + arrTowerFreezeBreathUi = new FreezeBreath[dimensions.x, AttackRowNumbers]; + arrTowerEnergyEffect = new GameObject[dimensions.x, AttackRowNumbers]; + arrTowerFreezeBreathEffect = new GameObject[dimensions.x, AttackRowNumbers]; float[] gapArr = { 0.4f, 0.6f }; @@ -724,7 +753,24 @@ arrTowerEnergyEffect[x, y] = Instantiate(energyEffectPrefab); arrTowerEnergyEffect[x, y].transform.position = vpos; - arrTowerEnergyEffect[x, y].Stop(); + + // 创建水精灵充能条 + img = Instantiate(FreezeBreathChargePrefab); + img.transform.SetParent(container.transform); + tpos = img.transform.position; + tpos.x = m_arrTowerBulletUIPos[x, y].x + 4.4f + (x - 2) * gapArr[y]; + tpos.z = m_arrTowerBulletUIPos[x, y].y + 5f; + tpos.y = 30f; + img.transform.position = tpos; + img.transform.localScale = Vector3.one; + img.transform.localRotation = Quaternion.identity; + + FreezeBreath freezeBreath = img.GetComponent<FreezeBreath>(); + arrTowerFreezeBreathUi[x, y] = freezeBreath; + freezeBreath.gameObject.SetActive(false); + + arrTowerFreezeBreathEffect[x, y] = Instantiate(FreezeBreathChargeEffect); + arrTowerFreezeBreathEffect[x, y].transform.position = vpos; } } } @@ -829,20 +875,49 @@ if (!arrTowerEnergyEffect[x, dy]) return; + ParticleSystem ps = arrTowerEnergyEffect[x, dy].GetComponent<ParticleSystem>(); + + if (ps == null) + ps = arrTowerEnergyEffect[x, dy].transform.GetChild(0).GetComponent<ParticleSystem>(); + if (play) { if (!arrTowerEnergyEffect[x, dy].gameObject.activeSelf) arrTowerEnergyEffect[x, dy].gameObject.SetActive(true); - arrTowerEnergyEffect[x, dy].Play(); + ps.Play(); } else { - arrTowerEnergyEffect[x, dy].Stop(); + ps.Stop(); arrTowerEnergyEffect[x, dy].gameObject.SetActive(false); } } + public void PlayFreezeBreathEffect(int x, int y, bool play = true) + { + int dy = dimensions.y - 1 - y; + + if (!arrTowerFreezeBreathEffect[x, dy]) return; + + ParticleSystem ps = arrTowerFreezeBreathEffect[x, dy].GetComponent<ParticleSystem>(); + + if (ps == null) + ps = arrTowerFreezeBreathEffect[x, dy].transform.GetChild(0).GetComponent<ParticleSystem>(); + + if (play) + { + if (!arrTowerFreezeBreathEffect[x, dy].gameObject.activeSelf) + arrTowerFreezeBreathEffect[x, dy].gameObject.SetActive(true); + ps.Play(); + } + else + { + ps.Stop(); + arrTowerFreezeBreathEffect[x, dy].gameObject.SetActive(false); + } + } + /// <summary> /// Set collider's size and center /// </summary> -- Gitblit v1.9.1