From cd0190f0655cbb05b651592d5c8bef8b22cb3685 Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Sat, 10 Apr 2021 20:47:34 +0200 Subject: [PATCH] feat: add a basic "punch" action Fixes #78 --- .../assets/sprites/charset/perso-punch.png | Bin 0 -> 32914 bytes .../assets/sprites/gfx/punch.lua | 18 +++++++++++ .../assets/sprites/gfx/punch.png | Bin 0 -> 1051 bytes sonic-radiance.love/assets/sprites/punch.png | Bin 0 -> 678 bytes .../overworld/actors/player/actions.lua | 30 ++++++++++++++++++ .../overworld/actors/player/charset.lua | 2 ++ .../scenes/overworld/actors/player/init.lua | 3 ++ .../scenes/overworld/actors/player/punch.lua | 17 ++++++++++ .../scenes/overworld/assets.lua | 1 + 9 files changed, 71 insertions(+) create mode 100644 sonic-radiance.love/assets/sprites/charset/perso-punch.png create mode 100644 sonic-radiance.love/assets/sprites/gfx/punch.lua create mode 100644 sonic-radiance.love/assets/sprites/gfx/punch.png create mode 100644 sonic-radiance.love/assets/sprites/punch.png create mode 100644 sonic-radiance.love/scenes/overworld/actors/player/punch.lua diff --git a/sonic-radiance.love/assets/sprites/charset/perso-punch.png b/sonic-radiance.love/assets/sprites/charset/perso-punch.png new file mode 100644 index 0000000000000000000000000000000000000000..4092617174e155926b4e1a92a2d1100adf26bff3 GIT binary patch literal 32914 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 V{cMI-v4;Qv002ovPDHLkV1ig8*2@3@ literal 0 HcmV?d00001 diff --git a/sonic-radiance.love/assets/sprites/punch.png b/sonic-radiance.love/assets/sprites/punch.png new file mode 100644 index 0000000000000000000000000000000000000000..c9cdcceef4865b1f7180d7062c436005e0a3acfa GIT binary patch literal 678 zcmV;X0$KfuP)EX>4Tx04R}tk-JO7P!z_$rj?dbanQj^hYZz0EQo?QxLCy^R0y?#RR{CvLrBt) zq_{W=t_26t#n+&JfavPrDhPrih`9I<_*$gIbCW=ev|hNJU%s64aqo8l?p&2MD>Mpd zx^3n%X@0q|!iV1wLKI=d5f^34m==UAIjZCAHav}7Q_6VJ(pX%kn7 zCpK+^@ey&KToD!G3*r%z4oLjUbjjmS#$}he2xBv!n;}jR^W_$nT3D`_8u1iyQqgqs z=hi(|7;iJy)SB#{lie^@)Rz{i4%1E`0~H(4V8B8VJS5cUTZN4jRh<+IIqFJNw(Wfe zTpxkvB-cx(nORiHQ*<4`-r{e@R%v|9bBd93*NfwP3u~RgpWi$dApG0oC-@7tjdY!D$r2|3000JJOGiWi{{WW&wQz8i zg#Z8m32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Rg1PT%l8SF8oBme*a9CSrkbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*yX>D+GW$sQG2LJ#7a7jc#R2b8Zkg*NGAPfYb?D8c$ z(84kv%^eKGBJP|bf+R$Va*`|C?~?--NIC$NQUCz8R`lKj0EBfQrG%XGEg;5tERb|F za}jYfdo7Z_;Rmg?(@|AF(?!G|&V$u`ISj(&K1-Qb$I0}MTI$~s)DzW@LL M07*qoM6N<$f`K#|D*ylh literal 0 HcmV?d00001 diff --git a/sonic-radiance.love/scenes/overworld/actors/player/actions.lua b/sonic-radiance.love/scenes/overworld/actors/player/actions.lua index 5f162d6..ef1d385 100644 --- a/sonic-radiance.love/scenes/overworld/actors/player/actions.lua +++ b/sonic-radiance.love/scenes/overworld/actors/player/actions.lua @@ -20,6 +20,9 @@ function PlayerActions:canDoAction(action) end function PlayerActions:actionMove() + if (self.currentAction == "punch") then + return + end if (self.currentAction == "jumpdash" or self.currentAction == "run") then self.xsp, self.ysp = utils.math.lengthdir(BASE_SPEED * RUN_FACTOR, math.rad(self.charsetManager.angle[self.charDir])) self.xsp = -self.xsp @@ -112,6 +115,24 @@ function PlayerActions:actionRun() end end +function PlayerActions:actionPunch() + if self.keys["C"].isPressed then + if (self:canDoAction("punch")) then + self.xsp, self.ysp = utils.math.lengthdir(BASE_SPEED * RUN_FACTOR, math.rad(self.charsetManager.angle[self.charDir])) + self.xsp = -self.xsp + self.currentAction = "punch" + self.tweens:newTimer(0.15, "endPunch") + self.assets.sprites["punch"]:changeAnimation("default", true) + end + end +end + +function PlayerActions:endPunch() + if (self.currentAction == "punch") then + self.currentAction = "idle" + end +end + function PlayerActions:endJump() if (self.currentAction == "jump") then self.currentAction = "idle" @@ -129,6 +150,15 @@ function PlayerActions:drawActionEffect() local x, y = self.x + 8 - dx, self.y + 8 - self.z + dy self.assets.sprites["dash"]:drawAnimation(x, y, math.rad(self.charsetManager.angle[self.charDir])) end + if (self.currentAction == "punch") then + local dx, dy = utils.math.lengthdir(20, math.rad(self.charsetManager.angle[self.charDir])) + if (self.charDir == "down") then + dy = 8 + end + local x, y = self.x + 8 - dx, self.y + 8 - self.z + dy + print(x, y) + self.assets.sprites["punch"]:drawAnimation(x, y, math.rad(self.charsetManager.angle[self.charDir])) + end end return PlayerActions diff --git a/sonic-radiance.love/scenes/overworld/actors/player/charset.lua b/sonic-radiance.love/scenes/overworld/actors/player/charset.lua index 6e16906..b66fa0e 100644 --- a/sonic-radiance.love/scenes/overworld/actors/player/charset.lua +++ b/sonic-radiance.love/scenes/overworld/actors/player/charset.lua @@ -21,6 +21,8 @@ function PlayerCharset:getCharset() charset = charset .. "-jump" elseif (self.currentAction == "fly") then charset = charset .. "-flight" + elseif (self.currentAction == "punch") then + charset = charset .. "-jump" end return charset end diff --git a/sonic-radiance.love/scenes/overworld/actors/player/init.lua b/sonic-radiance.love/scenes/overworld/actors/player/init.lua index 1b95d27..75974c8 100644 --- a/sonic-radiance.love/scenes/overworld/actors/player/init.lua +++ b/sonic-radiance.love/scenes/overworld/actors/player/init.lua @@ -39,6 +39,7 @@ function Player:updateStart(dt) self:actionJump() self:actionSwitch() self:actionRun() + self:actionPunch() self.world:getTileTypeAtPoint(self.x, self.y) @@ -98,6 +99,8 @@ function Player:timerResponse(response) self:endCharacterSwitchAnimation() elseif (response == "endFly") then self:endFly() + elseif (response == "endPunch") then + self:endPunch() end end diff --git a/sonic-radiance.love/scenes/overworld/actors/player/punch.lua b/sonic-radiance.love/scenes/overworld/actors/player/punch.lua new file mode 100644 index 0000000..ad7e759 --- /dev/null +++ b/sonic-radiance.love/scenes/overworld/actors/player/punch.lua @@ -0,0 +1,17 @@ +local Base = require "core.modules.world.actors.actor2D" +local Punch = Base:extend() + +function Punch:new(world, x, y, dir) + Punch.super.new(self, world, "wall", x, y, 8, 8, false) +end + +function Punch:update(dt) + self.depth = -self.y + Punch.super.update(self, dt) +end + +function Punch:draw() + +end + +return Punch \ No newline at end of file diff --git a/sonic-radiance.love/scenes/overworld/assets.lua b/sonic-radiance.love/scenes/overworld/assets.lua index e3a51bb..29d1f0b 100644 --- a/sonic-radiance.love/scenes/overworld/assets.lua +++ b/sonic-radiance.love/scenes/overworld/assets.lua @@ -9,6 +9,7 @@ return { {"cursorground", "assets/gui/cursor/ground"}, {"hitGFX", "assets/sprites/gfx/hit"}, {"encounter", "assets/sprites/encounter"}, + {"punch", "assets/sprites/gfx/punch"}, {"dash", "assets/sprites/gfx/dash"}, }, ["textures"] = {