miduo_client/Assets/ManagedResources/~Lua/Modules/Battle/Logic/SkillManager.lua

145 lines
3.8 KiB
Lua

SkillManager = {}
local this = SkillManager
local skillPool = BattleObjectPool.New(function ()
return Skill:New()
end)
--
this.DeadSkillList = {} -- 人物死亡后技能队列,死亡技能优先级最高
this.SkillList = {}
this.IsSkilling = false
-- 初始化
function this.Init()
this.Clear()
end
-- 向技能列表中追加技能
function this.AddSkill(caster, effectData, type, targets, isAdd, isRage)
local skill = skillPool:Get()
skill:Init(caster, effectData, type, targets, isAdd, isRage)
if type == BattleSkillType.DeadSkill then -- 死亡技能加入单独的对列
table.insert(this.DeadSkillList, skill)
else
table.insert(this.SkillList, skill)
end
return skill
end
-- 插入技能到技能列表首位
function this.InsertSkill(caster, effectData, type, targets, isAdd, isRage)
local skill = skillPool:Get()
skill:Init(caster, effectData, type, targets, isAdd, isRage)
if type == BattleSkillType.DeadSkill then -- 死亡技能加入单独的对列
table.insert(this.DeadSkillList, 1, skill)
else
table.insert(this.SkillList, 1, skill)
end
return skill
end
-- 获取是否拥有我的技能未释放
function this.HaveMySkill(role)
for _, skill in ipairs(this.DeadSkillList) do
if skill.owner == role then
return true
end
end
for _, skill in ipairs(this.SkillList) do
if skill.owner == role then
return true
end
end
return false
end
-- 设置用于轮转的方法
function this.SetTurnRoundFunc(func)
this.TurnRoundFunc = func
end
function this.CheckTurnRound()
if this.IsSkilling then
return
end
if this.DeadSkillList and #this.DeadSkillList > 0 then
return
end
if this.SkillList and #this.SkillList > 0 then
return
end
-- 没有技能释放的时候才轮转
if this.TurnRoundFunc then
BattleLogic.WaitForTrigger(0.3, function()
this.TurnRoundFunc()
this.TurnRoundFunc = nil
end)
end
end
--
function this.Update()
--
if this.IsSkilling then
return
end
-- 判断是否有死亡技能
-- 跟佳琦对的是角色死后只有死亡后释放的技能才能释放(DeadSkill) by:王振兴 2020/09/02 18:53
if this.DeadSkillList and #this.DeadSkillList > 0 then
local skill = this.DeadSkillList[1]
table.remove(this.DeadSkillList, 1)
this.IsSkilling = true
if skill.owner:IsDead() then
skill.owner:SkillCast(skill, function()
skill:Dispose()
skillPool:Put(skill)
this.IsSkilling = false
-- 检测一下轮转
this.CheckTurnRound()
end)
else
this.IsSkilling = false
this.CheckTurnRound()
end
return
end
-- 判断
if this.SkillList and #this.SkillList > 0 then
local skill = this.SkillList[1]
table.remove(this.SkillList, 1)
this.IsSkilling = true
-- 检测技能释放 只有角色不是死亡状态或角色身上有不灭
if (not skill.owner:IsDead() or BattleUtil.CheckIsNoDead(skill.owner)) then
skill.owner:SkillCast(skill, function()
skill:Dispose()
skillPool:Put(skill)
this.IsSkilling = false
-- 检测一下轮转
this.CheckTurnRound()
end)
else
this.IsSkilling = false
this.CheckTurnRound()
end
return
end
end
-- 清除
function this.Clear()
for _, skill in ipairs(this.SkillList) do
skill:Dispose()
skillPool:Put(skill)
end
this.SkillList = {}
this.IsSkilling = false
end
return SkillManager