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);
|
}
|
|
/// <summary>
|
/// 技能类型
|
/// </summary>
|
public EndlessBossSkillType SkillType { get; set; }
|
|
/// <summary>
|
/// 技能配置表数据
|
/// </summary>
|
public boss_skill SkillData { get; protected set; }
|
|
/// <summary>
|
/// 技能AI
|
/// </summary>
|
public EndlessBossSkillAI SkillAI { get; protected set; }
|
|
/// <summary>
|
/// 冷却是否完成
|
/// </summary>
|
public bool IsCDCompleted { get; set; }
|
|
/// <summary>
|
/// 是否满足AI条件
|
/// </summary>
|
/// <value></value>
|
public bool IsConditionOK { get; set; }
|
|
/// <summary>
|
/// 技能cd的计时器
|
/// </summary>
|
protected Timer cdTimer;
|
|
/// <summary>
|
/// 帧刷新
|
/// </summary>
|
public virtual void Update(float deltaTime)
|
{
|
SkillAI.Update(deltaTime);
|
|
if (SkillAI.IsActived)
|
{
|
if (!IsCDCompleted && cdTimer.Tick(deltaTime))
|
IsCDCompleted = true;
|
IsConditionOK = SkillAI.CanRelease();
|
}
|
}
|
|
/// <summary>
|
/// 后面根据类型来获得
|
/// </summary>
|
/// <param name="param"></param>
|
/// <returns></returns>
|
private EndlessBossSkillAI GetSkillAI(boss_skill param)
|
{
|
return new NormalBossSkillAI(param);
|
}
|
|
/// <summary>
|
/// 释放技能
|
/// </summary>
|
public virtual void ReleaseSkill()
|
{
|
IsCDCompleted = false;
|
ResetCD();
|
}
|
|
/// <summary>
|
/// 技能初始化
|
/// </summary>
|
public virtual void Init()
|
{
|
AddEvent();
|
SkillAI.Init();
|
// 技能第一次的cd直接就是好的
|
cdTimer = new Timer(0);
|
}
|
|
/// <summary>
|
/// 重置cd时间
|
/// </summary>
|
protected void ResetCD()
|
{
|
cdTimer.SetTime(SkillData.cool_down / 1000f);
|
cdTimer.Reset();
|
}
|
|
public virtual void Reset()
|
{
|
cdTimer.SetTime(0);
|
cdTimer.Reset();
|
SkillAI.Reset();
|
}
|
|
/// <summary>
|
/// 清理方法
|
/// </summary>
|
public virtual void Clear()
|
{
|
RemoveEvent();
|
IsCDCompleted = false;
|
cdTimer = null;
|
SkillAI.Clear();
|
}
|
|
protected virtual void AddEvent()
|
{
|
|
}
|
|
protected virtual void RemoveEvent()
|
{
|
|
}
|
}
|
}
|