SkillManager = {} local this = SkillManager local skillPool = BattleObjectPool.New(function () return Skill:New() end) -- this.DeadSkillList = {} -- 人物死亡后技能队列,死亡技能优先级最高 this.MonsterSkillList = {} this.SkillList = {} this.IsSkilling = false -- 初始化 function this.Init() this.Clear() end -- function this.AddMonsterSkill(skill) if skill.type == BattleSkillType.Monster then table.insert(this.MonsterSkillList, skill) end return skill 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.MonsterSkillList and #this.MonsterSkillList > 0 then return end -- 检测一次灵兽技能 this.CheckMonsterSkill(this.MonsterCheckFunc) -- 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.CheckMonsterSkill(func) this.MonsterCheckFunc = func -- 判断是否可以向下执行 if not this.IsSkilling and (not this.MonsterSkillList or #this.MonsterSkillList == 0) then -- if this.MonsterCheckFunc then local func = this.MonsterCheckFunc -- 置空方法放到回调之前,避免再会调中再次调用检测方法导致方法被删除 this.MonsterCheckFunc = nil func() end end end -- function this.Update() -- 如果正在引导战斗 if BattleManager and BattleManager.IsGuidePause() then return end -- if this.IsSkilling then return end if this.MonsterSkillList and #this.MonsterSkillList > 0 then local skill = this.MonsterSkillList[1] table.remove(this.MonsterSkillList, 1) this.IsSkilling = true if skill:canCastSkill() then skill:Cast(function() -- 检测一下轮转 this.IsSkilling = false this.CheckTurnRound() end) else -- 检测一下轮转 this.IsSkilling = false this.CheckTurnRound() end 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.MonsterSkillList = {} this.DeadSkillList = {} this.SkillList = {} this.IsSkilling = false end return SkillManager