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

97 lines
2.2 KiB
Lua

SkillManager = {}
local this = SkillManager
local skillPool = BattleObjectPool.New(function ()
return Skill:New()
end)
--
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)
table.insert(this.SkillList, skill)
return skill
end
-- 插入技能到技能列表首位
function this.InsertSkill(caster, effectData, type, targets, isAdd, isRage)
local skill = skillPool:Get()
skill:Init(caster, effectData, type, targets, isAdd, isRage)
table.insert(this.SkillList, 1, skill)
return skill
end
-- 获取是否拥有我的技能未释放
function this.HaveMySkill(role)
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.SkillList and #this.SkillList > 0 then
return
end
-- 没有技能释放的时候才轮转
if this.TurnRoundFunc then
BattleLogic.WaitForTrigger(0.3, function()
LogBlue(Language[10239])
this.TurnRoundFunc()
this.TurnRoundFunc = nil
end)
end
end
--
function this.Update()
--
if this.IsSkilling then
return
end
if not this.SkillList or #this.SkillList == 0 then
return
end
local skill = this.SkillList[1]
table.remove(this.SkillList, 1)
this.IsSkilling = true
-- 检测技能释放
skill.owner:SkillCast(skill, function()
skill:Dispose()
skillPool:Put(skill)
this.IsSkilling = false
-- 检测一下轮转
this.CheckTurnRound()
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