From 3d269dca4a31db935287739b0bea3a8ad41f38b8 Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Sat, 24 Aug 2019 21:46:59 +0200 Subject: [PATCH] feat(cbs): add jumpBack and dashForward choregraphy actions --- .../datas/gamedata/skills/attack.lua | 6 ++ .../scenes/battlesystem/actors/hero.lua | 61 ++++++++++++++++++- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/sonic-radiance.love/datas/gamedata/skills/attack.lua b/sonic-radiance.love/datas/gamedata/skills/attack.lua index 4cc9263..b6679ed 100644 --- a/sonic-radiance.love/datas/gamedata/skills/attack.lua +++ b/sonic-radiance.love/datas/gamedata/skills/attack.lua @@ -62,6 +62,12 @@ return { -- :: -- :: {"sendDamage", condition, damageEffect, accuracy, isSpecial, isAerial} +-- "dashForward" :: Dash until your are stopped +-- :: {"dashForward", condition, speed, blockProcess} + +-- "jumpBack" :: jump to initial position +-- :: {"jumpBack", condition, blockProcess} + CONDITION TYPES -- -- "sentDamage" :: an ennemy have received damage diff --git a/sonic-radiance.love/scenes/battlesystem/actors/hero.lua b/sonic-radiance.love/scenes/battlesystem/actors/hero.lua index 43a1a0f..172126b 100644 --- a/sonic-radiance.love/scenes/battlesystem/actors/hero.lua +++ b/sonic-radiance.love/scenes/battlesystem/actors/hero.lua @@ -133,11 +133,13 @@ end function Hero:jumpTo(dx, dy, size, timerName, spinjump, duration) local duration = self:getMovementDuration(dx, dy, duration) - self:goTo(dx, dy, timerName, duration) + self.tweens:newTween(0, duration, {x = dx, y = dy}, 'inOutQuad') + self.tweens:newTimer(duration + 0.02, timerName) self:setJump(size, spinjump, duration) end function Hero:updateSpeed(dt) + self:applyMotion(dt) self.xspeed = self.x - self.xprevious self.yspeed = self.y - self.yprevious @@ -166,12 +168,41 @@ function Hero:initJump() end function Hero:setJump(size, spinjump, duration) - local duration = duration or 0.66 local tweenDuration = duration / 2 self.tweens:newTween(0, tweenDuration, {z = size}, 'outQuad') self.tweens:newTween(tweenDuration, tweenDuration, {z = 0}, 'inQuad') end +function Hero:setMotionX(direction, speed) + self.motion = speed + self.motionDirection = direction +end + +function Hero:applyMotion(dt) + if self.motion ~= 0 and self.motion ~= nil then + local dx = self.x + self.motion * self.motionDirection * dt + print(dx) + -- {1, 0, "line", 5, true} + local ox = self.choregraphy.startx + (self.choregraphy.effectArea[1] * self.choregraphy.direction) + local oy = self.choregraphy.starty + self.choregraphy.effectArea[2] + local shape = self.choregraphy.effectArea[3] + local size = self.choregraphy.effectArea[4] + local direction = self.choregraphy.direction + + local new_case_x = math.floor(dx) + local new_case_y = math.floor(self.y) + if self.maputils.isInMask(dx, self.y, ox, oy, shape, size, direction) and self.world:caseIsEmpty(new_case_x, self.y) then + self.x = dx + else + self.motion = 0 + if (self.choregraphy.blockedBy == 'action_dashForward') then + self.choregraphy.changeAction = true + self.direction = self.choregraphy.direction + end + end + end +end + -- SIGNAL FUNCTIONS -- All functions related to signal receiving @@ -217,6 +248,8 @@ function Hero:timerResponse(timer) elseif timer == 'backMove' then self:changeAnimation("idle") self.direction = self.directionPrevious + elseif timer == self.choregraphy.blockedBy and self.choregraphy.changeAction == false then + self.choregraphy.changeAction = true end end @@ -241,6 +274,10 @@ function Hero:initChoregraphySystem() self.choregraphy.dy = self.y self.choregraphy.blockedBy = "" + self.choregraphy.startx = self.x + self.choregraphy.starty = self.y + self.choregraphy.direction = self.direction + self.isChoregraphyActive = false end @@ -262,6 +299,11 @@ function Hero:startChoregraphy(skill, dx, dy) self.choregraphy.changeAction = true self.choregraphy.data = skill.choregraphy self.choregraphy.effectArea = skill.effectArea + + self.choregraphy.startx = self.x + self.choregraphy.starty = self.y + self.choregraphy.direction = self.direction + self.choregraphy.dx = dx or self.x self.choregraphy.dy = dy or self.y @@ -335,6 +377,21 @@ function Hero:doChoregraphyAction(choregraphyAction) elseif type == "playSFX" then local sfx = choregraphyAction[3] self.assets.sfx[sfx]:play() + elseif type == "dashForward" then + local speed = choregraphyAction[3] + local blockProcess = choregraphyAction[4] + self:setMotionX(self.direction, speed) + if (blockProcess) then + self.choregraphy.blockedBy = "action_dashForward" + self.choregraphy.changeAction = false + end + elseif type == "jumpBack" then + local blockProcess = choregraphyAction[3] + if (blockProcess) then + self.choregraphy.blockedBy = "action_jumpBack" + self.choregraphy.changeAction = false + end + self:jumpTo(self.choregraphy.startx, self.choregraphy.starty, 32, "action_jumpBack", false) else core.debug:warning("cbs/hero", "unknown action type " .. type) end