From 6175e5229753b04de4d67d740598c2fe82e1b152 Mon Sep 17 00:00:00 2001 From: Sara Date: Tue, 16 Jan 2024 12:38:11 +0100 Subject: [PATCH] feat: implemented air-heavy / adjusted timing of KickA --- game/src/PlayerStates.c | 56 +++++++++++++++++++++++++++-------------- game/src/PlayerStates.h | 38 ++++++++++++++-------------- 2 files changed, 56 insertions(+), 38 deletions(-) diff --git a/game/src/PlayerStates.c b/game/src/PlayerStates.c index d55f355..c2946ee 100644 --- a/game/src/PlayerStates.c +++ b/game/src/PlayerStates.c @@ -15,6 +15,7 @@ void InternalSpriteFlipWithMovement(Player* self) { void PlayerAnimationExit(Player* self) { self->animationTriggers = 0; + self->attackInput = 0; } void PlayerIdleEnter(Player* self) { @@ -122,12 +123,8 @@ const State* PlayerJabB_Update(Player* self, float deltaTime) { PlayerHurtbox(self, damage, MakeVector(0.1f, 0.06f), MakeVector(0.3f, -0.6f)); ++self->animationTriggers; } - if(ntime > 1.0f) { - if(self->attackInput == 1) - return PlayerJabA(); - else if(self->attackInput == 2) - return PlayerKickA(); - } + if(ntime > 1.0f && self->attackInput == 1) + return PlayerKickA(); if(!veqf(self->moveInput, ZeroVector) && ntime > 1.05f) return PlayerWalk(); if(ntime >= 2.0f) @@ -149,7 +146,7 @@ const State* PlayerKickA_Update(Player* self, float deltaTime) { .knockback = 0.15f, }; const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); - if(ntime > 0.25f && self->animationTriggers == 0) { + if(ntime > 0.6f && self->animationTriggers == 0) { PlayerHurtbox(self, damage, MakeVector(0.1f, 0.06f), MakeVector(0.3f, -0.4f)); ++self->animationTriggers; } @@ -162,26 +159,47 @@ const State* PlayerKickA_Update(Player* self, float deltaTime) { return PlayerKickA(); } +static +const State* PlayerAir_Update(Player* self, float deltaTime) { + return NULL; +} + void PlayerJump_Enter(Player* self) { - self->currentAnimation = self->jump; - self->verticalVelocity = 2.f; + if(self->jumpInput) { + self->currentAnimation = self->jump; + self->verticalVelocity = 2.f; + } animation_sprite_play_from(self->currentAnimation, 0.f); } const State* PlayerJump_Update(Player* self, float deltaTime) { - self->verticalVelocity += .3f * deltaTime; - if(self->verticalVelocity > 0.f) - return PlayerFall(); + self->verticalVelocity -= 3.f * deltaTime; + if(self->height == 0.f) { + self->verticalVelocity = 0.f; + return PlayerIdle(); + } + if(self->attackInput == 2) + return PlayerAirHeavy(); return PlayerJump(); } -void PlayerFall_Enter(Player* self) { - self->currentAnimation = self->jump; +void PlayerAirHeavy_Enter(Player* self) { + self->currentAnimation = self->air_heavy; + animation_sprite_play_from(self->currentAnimation, 0.f); } -const State* PlayerFall_Update(Player* self, float deltaTime) { - self->verticalVelocity -= 3.f * deltaTime; - if(self->height == 0.f) - return PlayerIdle(); - return PlayerFall(); +const State* PlayerAirHeavy_Update(Player* self, float deltaTime) { + const static DamageEventData damage = { + .damageAmount = 6, + .knockdown = 1, + .stun = 0.5f, + .knockback = 0.15f + }; + const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); + if(ntime > 0.25f && self->animationTriggers == 0) { + PlayerHurtbox(self, damage, MakeVector(0.1f, 0.06f), MakeVector(0.3f, -0.4f)); + ++self->animationTriggers; + } + const State* result = PlayerJump_Update(self, deltaTime); + return result == PlayerJump() ? PlayerAirHeavy() : result; } diff --git a/game/src/PlayerStates.h b/game/src/PlayerStates.h index 90746e8..30a7a5c 100644 --- a/game/src/PlayerStates.h +++ b/game/src/PlayerStates.h @@ -5,10 +5,10 @@ typedef struct Player Player; -void PlayerAnimationExit(Player* self); +extern void PlayerAnimationExit(Player* self); -void PlayerIdleEnter(Player* self); -const State* PlayerIdleUpdate(Player* self, float deltaTime); +extern void PlayerIdleEnter(Player* self); +extern const State* PlayerIdleUpdate(Player* self, float deltaTime); DefineState(PlayerIdle, Player, PlayerIdleEnter, @@ -16,8 +16,8 @@ DefineState(PlayerIdle, Player, PlayerAnimationExit ) -void PlayerWalk_Enter(Player* self); -const State* PlayerWalk_Update(Player* self, float deltaTime); +extern void PlayerWalk_Enter(Player* self); +extern const State* PlayerWalk_Update(Player* self, float deltaTime); DefineState(PlayerWalk, Player, PlayerWalk_Enter, @@ -25,10 +25,10 @@ DefineState(PlayerWalk, Player, PlayerAnimationExit ) -void PlayerAttackEnter(Player* self); +extern void PlayerAttackEnter(Player* self); -void PlayerJabA_Enter(Player* self); -const State* PlayerJabA_Update(Player* self, float deltaTime); +extern void PlayerJabA_Enter(Player* self); +extern const State* PlayerJabA_Update(Player* self, float deltaTime); DefineState(PlayerJabA, Player, PlayerJabA_Enter, @@ -36,8 +36,8 @@ DefineState(PlayerJabA, Player, PlayerAnimationExit ) -void PlayerJabB_Enter(Player* self); -const State* PlayerJabB_Update(Player* self, float deltaTime); +extern void PlayerJabB_Enter(Player* self); +extern const State* PlayerJabB_Update(Player* self, float deltaTime); DefineState(PlayerJabB, Player, PlayerJabB_Enter, @@ -45,8 +45,8 @@ DefineState(PlayerJabB, Player, PlayerAnimationExit ) -void PlayerKickA_Enter(Player* self); -const State* PlayerKickA_Update(Player* self, float deltaTime); +extern void PlayerKickA_Enter(Player* self); +extern const State* PlayerKickA_Update(Player* self, float deltaTime); DefineState(PlayerKickA, Player, PlayerKickA_Enter, @@ -54,8 +54,8 @@ DefineState(PlayerKickA, Player, PlayerAnimationExit ) -void PlayerJump_Enter(Player *self); -const State* PlayerJump_Update(Player* self, float deltaTime); +extern void PlayerJump_Enter(Player *self); +extern const State* PlayerJump_Update(Player* self, float deltaTime); DefineState(PlayerJump, Player, PlayerJump_Enter, @@ -63,12 +63,12 @@ DefineState(PlayerJump, Player, PlayerAnimationExit ) -void PlayerFall_Enter(Player* self); -const State* PlayerFall_Update(Player* self, float deltaTime); +extern void PlayerAirHeavy_Enter(Player* self); +extern const State* PlayerAirHeavy_Update(Player* self, float deltaTime); -DefineState(PlayerFall, Player, - PlayerFall_Enter, - PlayerFall_Update, +DefineState(PlayerAirHeavy, Player, + PlayerAirHeavy_Enter, + PlayerAirHeavy_Update, PlayerAnimationExit )