From d35d31d85fd4b827dc37008aef39c019b6a7781d Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Sat, 07 Nov 2020 16:34:50 +0800 Subject: [PATCH] Merge commit '2940e451058b1af7541ff651f485f33a10e92f7e' into master --- Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs | 89 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 86 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs index 994b011..55e1712 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs @@ -1,7 +1,11 @@ +using System.Collections.Generic; using UnityEngine; +using Core.Utilities; +using TowerDefense.Agents; +using TowerDefense.Level; /** - * 召唤木桩 + * 召唤木桩墙壁 * @Author: chenxin * @Date: 2020-11-02 17:15:39 */ @@ -11,23 +15,102 @@ { public BossSkillWoodPile(boss_skill param) : base(param) { } + protected string prefabPath = "Prefabs/Endless/WoodPile"; + + /// <summary> + /// 保存所有还在场景中的agent用于清理 + /// </summary> + protected List<WoodPileAgent> agentList; + /// <summary> /// 释放技能 /// </summary> public override void ReleaseSkill() { + base.ReleaseSkill(); + SpawnOnTunel(); + } + protected void SpawnOnTunel() + { + List<int> tunelIdList = GetTunelList(); + GameObject prefab = Resources.Load<GameObject>(prefabPath); + + for (int i = 0; i < tunelIdList.Count; ++i) + { + GameObject obj = Poolable.TryGetPoolable(prefab); + WoodPileAgent agent = obj.GetComponent<WoodPileAgent>(); + + agent.Id = GameUtils.GetId(); + agent.waveLineID = tunelIdList[i] - 1; + agent.AgentType = SpawnAgentType.WoodPile; + agent.opponentAgent = false; + agent.FireHurtRate = SkillData.effect[1]; + + Vector3 spawnPosition = EndlessLevelManager.instance.GetTunelWorldPosition(tunelIdList[i], (EndlessBossSkillTunelType)SkillData.target[1]); + obj.transform.position = spawnPosition; + agent.Initialize(); + + float enemiesTotalHP = EndlessPortData.GetWaveEnemiesHP(EndlessLevelManager.instance.CurrentLevel, EndlessLevelManager.instance.WaveManager.CurrentWaveIndex, tunelIdList[i]); + // 当前波次怪物 * 倍数 + float hp = enemiesTotalHP * SkillData.effect[0]; + agent.SetAgentData(hp, 0, 0); + AgentInsManager.instance.addAgent(agent); + agentList.Add(agent); + } } public override void Init() { base.Init(); Debug.Log("--------------------- 召唤木桩技能初始化 ---------------------"); + agentList = new List<WoodPileAgent>(); } - public override void Update(float deltaTime) + protected override void AddEvent() { - IsCDCompleted = false; + EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessWoodPileBeKilled, OnWoodPileAgentRemoved); + } + + protected override void RemoveEvent() + { + EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessWoodPileBeKilled, OnWoodPileAgentRemoved); + } + + private void OnWoodPileAgentRemoved(int id) + { + for (int i = 0; i < agentList.Count; ++i) + { + if (agentList[i].Id == id) + { + agentList.Remove(agentList[i]); + break; + } + } + } + + public override void Reset() + { + base.Reset(); + ClearWoodPileAgents(); + } + + public override void Clear() + { + base.Clear(); + ClearWoodPileAgents(); + } + + /// <summary> + /// 清理在场景中的所有木桩墙壁 + /// </summary> + private void ClearWoodPileAgents() + { + while (agentList.Count > 0) + { + agentList[0].Remove(); + agentList.Remove(agentList[0]); + } } } } \ No newline at end of file -- Gitblit v1.9.1