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";
|
|
/// <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);
|
|
// 因为表里5条赛道都会配,所有直接取第一条基础血量就行
|
float enemiesTotalHP = 0f;
|
List<List<EndlessPortConfig>> 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<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 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>();
|
}
|
|
protected override void AddEvent()
|
{
|
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]);
|
}
|
}
|
}
|
}
|