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]);
}
}
}
}