| | |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using Core.Utilities; |
| | | using TowerDefense.Agents; |
| | | using TowerDefense.Level; |
| | | |
| | | /** |
| | | * 召唤木桩 |
| | | * 召唤木桩墙壁 |
| | | * @Author: chenxin |
| | | * @Date: 2020-11-02 17:15:39 |
| | | */ |
| | |
| | | { |
| | | 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]); |
| | | } |
| | | } |
| | | } |
| | | } |