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