using System.Collections; using System.Collections.Generic; using UnityEngine; using Core.Utilities; /** * 无尽模式boss技能管理器 * @Author: chenxin * @Date: 2020-11-02 16:46:12 */ namespace KTGMGemClient { public class EndlessBossSkillManager : Singleton { /// /// boss技能id列表 /// private List skillIdList; /// /// 技能列表,所有的技能 cdList + waitList = skillList /// private List skillList; /// /// 技能cd列表,技能冷却好了就放到这个队列 /// private List cdList; /// /// 正在等待冷却的技能队列 /// private List waitList; /// /// 是否终止使用技能 /// /// private bool isPaused { get; set; } // Start is called before the first frame update private void Start() { skillList = new List(); cdList = new List(); waitList = new List(); } // Update is called once per frame private void Update() { if (isPaused) return; for (int i = 0; i < skillList.Count; ++i) { skillList[i].Update(Time.deltaTime); if (skillList[i].IsCDCompleted) AddSkill(skillList[i]); } for (int i = 0; i < cdList.Count; ++i) { if (cdList[i].IsConditionOK) { cdList[i].ReleaseSkill(); RemoveSkill(cdList[i]); } } } /// /// 更新关卡需要重新初始化boss技能 /// /// public void Init(List idList) { Debug.Log("--------------------- 初始化boss技能列表 ---------------------"); skillIdList = idList; for (int i = 0; i < idList.Count; ++i) { EndlessBossSkill skill = GetSkillInstanceByType(idList[i]); if (skill != null) { skillList.Add(skill); skill.Init(); } } isPaused = false; } /// /// 关卡结束需要清理一下技能列表 /// public void ClearSkillList() { Debug.Log("--------------------- 关卡结束,清空技能列表 ---------------------"); for (int i = 0; i < skillList.Count; ++i) { skillList[i].Clear(); } skillList.Clear(); cdList.Clear(); waitList.Clear(); isPaused = true; } /// /// 波次更新时需要重置所有技能 /// public void Reset() { for (int i = 0; i < skillList.Count; ++i) { skillList[i].Reset(); } cdList.Clear(); waitList.Clear(); isPaused = true; } /// /// 重新开始新的一波,重新启动技能 /// public void Restart() { isPaused = false; } /// /// 获取技能实例 /// /// 技能id /// private EndlessBossSkill GetSkillInstanceByType(int skillId) { boss_skill data = EndlessBossSkillData.GetDataById(skillId); if (data == null) { Debug.LogError($"--------------------- skillId: {skillId},没有对应的技能数据 ---------------------"); return null; } switch ((EndlessBossSkillType)data.skill_class) { case EndlessBossSkillType.ShieldWall: return new BossSkillShieldWall(data); case EndlessBossSkillType.BubbleBomb: return new BossSkillBubbleBomb(data); case EndlessBossSkillType.WoodPile: return new BossSkillWoodPile(data); } return null; } /// /// 技能cd好了,加到cd列表 /// /// private void AddSkill(EndlessBossSkill skill) { waitList.Remove(skill); cdList.Add(skill); } /// /// 技能进入冷却状态,加到等待列表 /// /// private void RemoveSkill(EndlessBossSkill skill) { cdList.Remove(skill); waitList.Add(skill); } } }