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()
{
}
}
}