diff --git a/sonic-radiance.love/assets/sprites/charset/perso-jump.png b/sonic-radiance.love/assets/sprites/charset/perso-jump.png new file mode 100644 index 0000000..3d029fd Binary files /dev/null and b/sonic-radiance.love/assets/sprites/charset/perso-jump.png differ diff --git a/sonic-radiance.love/scenes/overworld/actors/player.lua b/sonic-radiance.love/scenes/overworld/actors/player.lua index d1f9ad8..a6a00a0 100644 --- a/sonic-radiance.love/scenes/overworld/actors/player.lua +++ b/sonic-radiance.love/scenes/overworld/actors/player.lua @@ -26,6 +26,8 @@ function Player:new(world, x, y, id) self.previousMap = 0 self:updateCurrentCharset() + self.onGround = true + self.isJumping = false end function Player:updateStart(dt) @@ -49,10 +51,22 @@ function Player:updateStart(dt) end if self.keys["select"].isPressed and self.canChangeActive then - game.characters:setActiveCharacter() - self.canChangeActive = false - self.tweens:newTimer(0.3, "changeCharacter") - self.tweens:newTween(0, 0.3, {activeVisible = self.activeVisible + 1}, "inQuad") + if (self.onGround) then + game.characters:setActiveCharacter() + self.canChangeActive = false + self.tweens:newTimer(0.3, "changeCharacter") + self.tweens:newTween(0, 0.3, {activeVisible = self.activeVisible + 1}, "inQuad") + end + end + + if self.keys["B"].isPressed then + if (self.onGround) then + self.zsp = 2.5 + self.grav = 10 + self.onGround = false + self.isJumping = true + self.assets.sfx["jump"]:play() + end end self.tweens:update(dt) @@ -71,10 +85,44 @@ function Player:updateStart(dt) self.scene:updateCurrentMap(currentMap) end end + + self:updateCurrentCharset() end +function Player:applyGravity(dt) + local grav = self.grav * -1 + self.zsp = self.zsp + (grav * dt) + + if utils.math.sign(self.zsp) == utils.math.sign(grav) then + self:checkGround( ) + end +end + +function Player:checkGround() + if (self.z + self.zsp <= 0) then + self.onGround = true + self.isJumping = false + self.z = 0 + self.zsp = 0 + end +end + +function Player:autoMove(dt) + Player.super.autoMove(self, dt) + self.z = self.z + self.zsp +end + + function Player:updateCurrentCharset() - self:setCharset(self.active.data.charset, self.active.data.charId) + if (not self.isJumping) then + self:setCharset(self.active.data.charset, self.active.data.charId) + self.largeAnim = false + self.isFast = false + else + self:setCharset(self.active.data.charset .. "-jump", self.active.data.charId) + self.largeAnim = true + self.isFast = true + end end function Player:collisionResponse(col)