-- --- 定时释放本某个技能(技能的SkillIndex)(且添加倒计时显示) --- local Base = require("Battle/Logic/Entity/SkillDecorator/SkillDecorator") local SkillDecoratorTimingUseSomeSkill = class("SkillDecoratorTimingUseSomeSkill", Base) local EventSystem = require 'Event/EventSystem' local FP_Greater = FP.Greater local FP_LessEquals = FP.LessEquals -- 注意:这个 skillID 必须是belongTo技能id ; -- 使用skillIndex的原因:技能替换后SkillID会变化,但是skillIndex不会变化的,通过skillIndex始终能找到正确的替换后的技能。 function SkillDecoratorTimingUseSomeSkill:initialize(entity, skillID, maxTimer, skillIndex, isSkillCanSwitchAll) Base.initialize(self, entity, skillID) self.type = LuaConst.SkillDecoratorType.TimingUseSomeSkill self.UIType = LuaConst.UISkillBtnResetType.TimingUseSomeSkill self.isSkillCanSwitchAll = isSkillCanSwitchAll -- 必须是无技能释放时,才可自动释放 self.skillIndex = skillIndex -- 需要释放的技能index self.maxTimer = FP.newV1(0):Reset(maxTimer) -- 倒计时总时长 单位:毫秒 self.leftTime = FP.newV1(0):Reset(maxTimer) -- 剩余时长 单位:毫秒 end function SkillDecoratorTimingUseSomeSkill:OnLogicUpdate() if not self.enable then return end if FP_Greater(self.leftTime,0) then self.leftTime:Sub(LuaConst.TimeSpanMs) end if FP_LessEquals(self.leftTime,0) then local skillBaseComponent = self.entity.components.skillBase if self.isSkillCanSwitchAll then -- 等待其他技能释放完毕后 if not skillBaseComponent.CanSwitchAll then return end end if not self.entity.components.buff.CurrentBuffStates:Get(LuaConst.SpecialBuffs.CanSkill) then -- 可释放技能时 return end -- 可使用技能了 local skillData = skillBaseComponent:GetSkillDataBySkillIndex(self.skillIndex) if not skillData then logging.error(LTAG.ERROR, " [战斗策划] :技能额外功能填写错误,技能表找不到技能数据。skillIndex = ", self.skillIndex , ", 此额外功能的技能ID =", self.skillID) return end SystemManager.SetNextState(LuaConst.StateType.Attack, self.entity, skillData.ID, "", {}) -- 关闭此Decorator self.enable = false -- 告知UI EventSystem.Dispatch(EventID.UI_BattleAttack_ResetBtn, self.entity, self.skillID, self.UIType, nil) end end -- ui上面渲染的方法 function SkillDecoratorTimingUseSomeSkill:OnUIBtn() EventSystem.Dispatch(EventID.UI_BattleAttack_ResetBtn, self.entity, self.skillID, self.UIType, self.leftTime, self.maxTimer) end function SkillDecoratorTimingUseSomeSkill:SetEnable(value) self.leftTime:Reset(self.maxTimer) self.enable = value end function SkillDecoratorTimingUseSomeSkill.StringParamToFormat(str) local strArr = string.split(str,",") local maxTimer, skillIndex = strArr[1], strArr[2] maxTimer = tonumber(maxTimer) skillIndex = tonumber(skillIndex) local isSkillCanSwitchAll = strArr[3] == "1" return maxTimer, skillIndex, isSkillCanSwitchAll end return SkillDecoratorTimingUseSomeSkill