using System.Collections.Generic;
|
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);
|
random = new System.Random();
|
}
|
|
/// <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;
|
|
protected System.Random random;
|
|
/// <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()
|
{
|
if (cdTimer != null)
|
{
|
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()
|
{
|
|
}
|
|
/// <summary>
|
/// 获取赛道列表
|
/// </summary>
|
protected virtual List<int> GetTunelList()
|
{
|
List<int> tunelIdList = new List<int>();
|
int count = 0;
|
// 剩余没有用到的赛道
|
List<int> remainList = new List<int>() { 1, 2, 3, 4, 5 };
|
|
for (int i = 0; i < SkillData.tunnel.Count; ++i)
|
{
|
// 统计6这种类型的数量
|
if (SkillData.tunnel[i] == 6)
|
{
|
++count;
|
continue;
|
}
|
|
tunelIdList.Add(SkillData.tunnel[i]);
|
remainList.Remove(SkillData.tunnel[i]);
|
}
|
|
for (int i = 0; i < count; ++i)
|
{
|
int num = random.Next(remainList.Count);
|
tunelIdList.Add(remainList[num]);
|
remainList.Remove(remainList[num]);
|
}
|
|
return tunelIdList;
|
}
|
}
|
}
|