diff --git a/sonic-radiance.love/assets/sfx/flight.wav b/sonic-radiance.love/assets/sfx/flight.wav new file mode 100644 index 0000000..d452690 Binary files /dev/null and b/sonic-radiance.love/assets/sfx/flight.wav differ diff --git a/sonic-radiance.love/assets/sprites/charset/perso-flight.png b/sonic-radiance.love/assets/sprites/charset/perso-flight.png new file mode 100644 index 0000000..abae62e Binary files /dev/null and b/sonic-radiance.love/assets/sprites/charset/perso-flight.png differ diff --git a/sonic-radiance.love/scenes/overworld/actors/parent.lua b/sonic-radiance.love/scenes/overworld/actors/parent.lua index 4f73b77..627a514 100644 --- a/sonic-radiance.love/scenes/overworld/actors/parent.lua +++ b/sonic-radiance.love/scenes/overworld/actors/parent.lua @@ -30,6 +30,7 @@ function Parent:initCharset() self.isTurning = false self.isFast = false self.largeAnim = false + self.alwaysWalk = false end function Parent:setCharset(charset, charId, cantWalk) @@ -50,7 +51,7 @@ function Parent:drawCharset(charset, charId) self.charsetManager:drawLargeAnim(self.charset, self.charId, self.charDir, x, y - z, self.isFast) else if (not self.isTurning) then - if (self:isMoving() and (not self.cantWalk)) then + if ((self:isMoving() and (not self.cantWalk)) or self.alwaysWalk) then self.charsetManager:drawMoving(self.charset, self.charId, self.charDir, x, y - z, self.isFast) else self.charsetManager:drawStanding(self.charset, self.charId, self.charDir, x, y - z, self.isFast) diff --git a/sonic-radiance.love/scenes/overworld/actors/player/actions.lua b/sonic-radiance.love/scenes/overworld/actors/player/actions.lua index 00d999b..9d3d320 100644 --- a/sonic-radiance.love/scenes/overworld/actors/player/actions.lua +++ b/sonic-radiance.love/scenes/overworld/actors/player/actions.lua @@ -43,8 +43,25 @@ function PlayerActions:actionJump() self:goUpward(JMP_STRENGHT) self.assets.sfx["jump"]:play() self.currentAction = "jump" + elseif (self.currentAction == "jump" and self:canDoAction("fly")) then + self.currentAction = "fly" + self.grav = 0 + self.zsp = 0 + self.tweens:newTimer(0.75, "endFly") + self.assets.sfx["fly"]:play() end end + + if self.keys["B"].isReleased then + self:endFly() + end +end + +function PlayerActions:endFly() + if (self.currentAction == "fly") then + self:goUpward(0) + self.currentAction = "idle" + end end function PlayerActions:actionSwitch() diff --git a/sonic-radiance.love/scenes/overworld/actors/player/charset.lua b/sonic-radiance.love/scenes/overworld/actors/player/charset.lua index 9703a77..58001b0 100644 --- a/sonic-radiance.love/scenes/overworld/actors/player/charset.lua +++ b/sonic-radiance.love/scenes/overworld/actors/player/charset.lua @@ -1,7 +1,8 @@ local PlayerCharset = Object:extend() local ACTIONS_LARGEANIM = {"jump"} -local ACTIONS_ISFAST = {"jump"} +local ACTIONS_ISFAST = {"jump", "fly"} +local ACTIONS_ALWAYSWALK = {"fly"} function PlayerCharset:initPlayerCharset() self:updateCurrentCharset() @@ -11,22 +12,29 @@ function PlayerCharset:updateCurrentCharset() self:setCharset(self:getCharset(), self.active.data.charId) self.isFast = self:getIsFast() self.largeAnim = self:getLargeAnim() + self.alwaysWalk = self:getAlwaysWalk() end function PlayerCharset:getCharset() local charset = self.active.data.charset if (self.currentAction == "jump") then charset = charset .. "-jump" + elseif (self.currentAction == "fly") then + charset = charset .. "-flight" end return charset end function PlayerCharset:getLargeAnim() - return utils.table.contain(ACTIONS_ISFAST, self.currentAction) -end - -function PlayerCharset:getIsFast() return utils.table.contain(ACTIONS_LARGEANIM, self.currentAction) end +function PlayerCharset:getIsFast() + return utils.table.contain(ACTIONS_ISFAST, self.currentAction) +end + +function PlayerCharset:getAlwaysWalk() + return utils.table.contain(ACTIONS_ALWAYSWALK, self.currentAction) +end + return PlayerCharset diff --git a/sonic-radiance.love/scenes/overworld/actors/player/init.lua b/sonic-radiance.love/scenes/overworld/actors/player/init.lua index 7b15599..d7f9267 100644 --- a/sonic-radiance.love/scenes/overworld/actors/player/init.lua +++ b/sonic-radiance.love/scenes/overworld/actors/player/init.lua @@ -95,6 +95,8 @@ end function Player:timerResponse(response) if (response == "changeCharacter") then self:endCharacterSwitchAnimation() + elseif (response == "endFly") then + self:endFly() end end diff --git a/sonic-radiance.love/scenes/overworld/assets.lua b/sonic-radiance.love/scenes/overworld/assets.lua index 0b1c176..ee834e3 100644 --- a/sonic-radiance.love/scenes/overworld/assets.lua +++ b/sonic-radiance.love/scenes/overworld/assets.lua @@ -45,6 +45,7 @@ return { {"hit", "assets/sfx/hit.wav"}, {"hitconnect", "assets/sfx/hitconnect.wav"}, {"jump", "assets/sfx/jump.wav"}, + {"fly", "assets/sfx/flight.wav"}, {"woosh", "assets/sfx/woosh.wav"}, {"spincharge", "assets/sfx/spincharge.wav"}, {"spinrelease", "assets/sfx/spinrelease.wav"},