using Core.Utilities; /** * 无尽模式boss技能基类 * @Author: chenxin * @Date: 2020-11-02 16:47:31 */ namespace KTGMGemClient { public abstract class EndlessBossSkill { public EndlessBossSkill(boss_skill param) { SkillData = param; SkillType = (EndlessBossSkillType)param.skill_class; SkillAI = GetSkillAI(param); } /// /// 技能类型 /// public EndlessBossSkillType SkillType { get; set; } /// /// 技能配置表数据 /// public boss_skill SkillData { get; protected set; } /// /// 技能AI /// public EndlessBossSkillAI SkillAI { get; protected set; } /// /// 冷却是否完成 /// public bool IsCDCompleted { get; set; } /// /// 是否满足AI条件 /// /// public bool IsConditionOK { get; set; } /// /// 技能cd的计时器 /// protected Timer cdTimer; /// /// 帧刷新 /// public virtual void Update(float deltaTime) { SkillAI.Update(deltaTime); if (SkillAI.IsActived) { if (!IsCDCompleted && cdTimer.Tick(deltaTime)) IsCDCompleted = true; IsConditionOK = SkillAI.CanRelease(); } } /// /// 后面根据类型来获得 /// /// /// private EndlessBossSkillAI GetSkillAI(boss_skill param) { return new NormalBossSkillAI(param); } /// /// 释放技能 /// public virtual void ReleaseSkill() { IsCDCompleted = false; ResetCD(); } /// /// 技能初始化 /// public virtual void Init() { AddEvent(); SkillAI.Init(); // 技能第一次的cd直接就是好的 cdTimer = new Timer(0); } /// /// 重置cd时间 /// protected void ResetCD() { cdTimer.SetTime(SkillData.cool_down / 1000f); cdTimer.Reset(); } public virtual void Reset() { if (cdTimer != null) { cdTimer.SetTime(0); cdTimer.Reset(); } SkillAI.Reset(); } /// /// 清理方法 /// public virtual void Clear() { RemoveEvent(); IsCDCompleted = false; cdTimer = null; SkillAI.Clear(); } protected virtual void AddEvent() { } protected virtual void RemoveEvent() { } } }