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