local ChoregraphySystem = Object:extend() local choregraphyUtils = require "game.utils.choregraphy" local stepObjectList = require "scenes.battlesystem.controllers.fighters.systems.choregraphy.step" local qteObjectList = require "scenes.battlesystem.controllers.fighters.systems.choregraphy.qte" function ChoregraphySystem:new(action, choregraphy) self.action = action self.fighter = action.fighter self.actor = self.fighter.actor self.assets = self.fighter.actor.assets self.world = self.actor.world self.target = action.target self.haveSentDamage = false self.currentStepId = 0 self.currentStep = nil self.stepList = choregraphy self.qte = {} self.qte.current = nil self.qte.wasSuccess = false end function ChoregraphySystem:update(dt) if (self.qte.current ~= nil) then self.qte.current:updateQte(dt) end if (self.currentStep ~= nil) then self.currentStep:updateStep(dt) else self:switchStep() end end function ChoregraphySystem:switchStep() if self:haveNextStep() then self.currentStepId = self.currentStepId + 1 local stepData = choregraphyUtils.getStepDatas(self.stepList[self.currentStepId]) core.debug:print("cbs/choregraphy", "Starting step " .. stepData.name) if (stepObjectList[stepData.name] ~= nil and self:checkCondition(stepData.condition)) then self.currentStep = stepObjectList[stepData.name](self, stepData.arguments) end else self:endChoregraphy() end end function ChoregraphySystem:checkCondition(condition) local conditionArgs = utils.string.split(condition, ":") local success = true if (conditionArgs[1] == "sentDamage" and (not self.haveSentDamage)) then success = false end return success end function ChoregraphySystem:addQTE(action, origin, qteBaseData, blockProcess) local qteData = choregraphyUtils.getQteDatas(qteBaseData) if (qteObjectList[qteData.name] ~= nil) then core.debug:print("cbs/choregraphy", "Starting qte " .. qteData.name) self.qte.current = qteObjectList[qteData.name](self, qteData.arguments, 0, 0) self.qte.current:blockAction(action, blockProcess) self.qte.current:setOrigin(origin) end end function ChoregraphySystem:endQte(success) self.qte.current = nil self.qte.wasSuccess = success end function ChoregraphySystem:sendDamage(power, accuracy, isSpecial, isAerial) if (self.target ~= nil) then if (self.fighter.isAlive) then self.haveSentDamage = self.fighter:sendDamage(self.target, power, accuracy, isSpecial, isAerial) else self.haveSentDamage = false end end end function ChoregraphySystem:useItemEffect() self.action:useItemEffect() end function ChoregraphySystem:endStep() self.currentStep = nil end function ChoregraphySystem:endChoregraphy() self.actor:choregraphyEnded() self.action:choregraphyEnded() self.fighter.turnSystem:applyDeath() end function ChoregraphySystem:haveNextStep() return ((self.currentStepId + 1) <= #self.stepList) end function ChoregraphySystem:draw() if (self.qte.current ~= nil) then self.qte.current:draw() end end return ChoregraphySystem