using System.Collections.Generic; using UnityEngine; using Core.Utilities; using TowerDefense.Agents; using TowerDefense.Level; /** * 召唤木桩墙壁 * @Author: chenxin * @Date: 2020-11-02 17:15:39 */ namespace KTGMGemClient { public class BossSkillWoodPile : EndlessBossSkill { public BossSkillWoodPile(boss_skill param) : base(param) { } protected string prefabPath = "Prefabs/Endless/WoodPile"; /// /// 保存所有还在场景中的agent用于清理 /// protected List agentList; /// /// 释放技能 /// public override void ReleaseSkill() { base.ReleaseSkill(); SpawnOnTunel(); } protected void SpawnOnTunel() { List tunelIdList = GetTunelList(); GameObject prefab = Resources.Load(prefabPath); // 因为表里5条赛道都会配,所有直接取第一条基础血量就行 float enemiesTotalHP = 0f; List> list = EndlessPortData.GetLevelWaveData(EndlessLevelManager.instance.CurrentLevel); if (list.Count > 0) enemiesTotalHP = list[0][0].Config.b_hp; for (int i = 0; i < tunelIdList.Count; ++i) { GameObject obj = GameObject.Instantiate(prefab); WoodPileAgent agent = obj.GetComponent(); 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 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(); } protected override void AddEvent() { EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessWoodPileBeKilled, OnWoodPileAgentRemoved); } protected override void RemoveEvent() { EventCenter.Ins.Add((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(); } /// /// 清理在场景中的所有木桩墙壁 /// private void ClearWoodPileAgents() { while (agentList.Count > 0) { agentList[0].Remove(); agentList.Remove(agentList[0]); } } } }