From f1cf1110fc9c951cc33f84eec6e864c92c6edf4c Mon Sep 17 00:00:00 2001 From: Sara Date: Sun, 21 Jan 2024 22:12:40 +0100 Subject: [PATCH] feat: added Player Slash state --- game/src/Player.c | 2 ++ game/src/Player.h | 1 + game/src/PlayerStates.c | 32 +++++++++++++++++++++++++++++--- game/src/PlayerStates.h | 9 +++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/game/src/Player.c b/game/src/Player.c index 0244784..eda4869 100644 --- a/game/src/Player.c +++ b/game/src/Player.c @@ -87,6 +87,7 @@ Player* MakePlayer() { .jab_a = NULL, .jab_b = NULL, .kick_a = NULL, + .slash = NULL, .air_heavy = NULL, .slide = NULL, @@ -121,6 +122,7 @@ Player* MakePlayer() { self->jab_a = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Jab_A.png", IVectorFrom(512)), 10.f, LoopMode_Stop); self->jab_b = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Jab_B.png", IVectorFrom(512)), 10.f, LoopMode_Stop); self->kick_a = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Kick_A.png", IVectorFrom(512)), 12.f, LoopMode_Stop); + self->slash = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Slash.png", IVectorFrom(512)), 12.f, LoopMode_Stop); self->air_heavy = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Air_Heavy.png", IVectorFrom(512)), 10.f, LoopMode_Stop); self->slide = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Slide.png", IVectorFrom(512)), 1.f, LoopMode_Loop); diff --git a/game/src/Player.h b/game/src/Player.h index 5d8b249..5d5cb48 100644 --- a/game/src/Player.h +++ b/game/src/Player.h @@ -50,6 +50,7 @@ typedef struct Player { AnimationSprite* jab_a; AnimationSprite* jab_b; AnimationSprite* kick_a; + AnimationSprite* slash; AnimationSprite* air_heavy; AnimationSprite* slide; diff --git a/game/src/PlayerStates.c b/game/src/PlayerStates.c index 59d99df..eebe054 100644 --- a/game/src/PlayerStates.c +++ b/game/src/PlayerStates.c @@ -3,6 +3,7 @@ #include "Damagable.h" #include "Player.h" +#include "animation_sprite.h" // flip the facing direction of the player based on input // does not do movement @@ -31,7 +32,7 @@ const State* PlayerTryStartNewChain(Player* self, const State* fallback) { else if(PlayerInputIsQuarterCircleForward(self)) return PlayerSlide(); else - return PlayerKickA(); + return PlayerSlash(); } return fallback; } @@ -110,7 +111,7 @@ const State* PlayerJabA_Update(Player* self, float deltaTime) { } if(!veqf(self->moveInput, ZeroVector) && ntime > 1.05f) return PlayerWalk(); - if(ntime >= 2.0f) + if(ntime >= 1.5f) return PlayerIdle(); return PlayerJabA(); } @@ -161,11 +162,36 @@ const State* PlayerKickA_Update(Player* self, float deltaTime) { if(frame >= 3 && frame <= 4) { PlayerHurtbox(self, damage, MakeVector(0.16f, 0.06f), MakeVector(0.33f, -0.4f)); } + if(ntime >= 1.f) + return PlayerIdle(); + return PlayerKickA(); +} + +void PlayerSlash_Enter(Player* self) { + PlayerAttackEnter(self); + self->currentAnimation = self->slash; + animation_sprite_play_from(self->currentAnimation, 0.f); +} + +const State* PlayerSlash_Update(Player* self, float deltaTime) { + static const DamageEventData damage = { + .damageAmount = 2, + .knockdown = 0, + .stun = 0.5f, + .knockback = 4.f + }; + const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); + const size_t frame = sprite_get_tile(self->sprite); + if(frame >= 2 && self->animationTriggers == 0) { + ++self->animationTriggers; + PlayerHurtbox(self, damage, MakeVector(0.4f, 0.1f), MakeVector(0.2f, -0.7f)); + } if(!veqf(self->moveInput, ZeroVector) && ntime > 1.05f) return PlayerWalk(); if(ntime >= 1.f) return PlayerIdle(); - return PlayerKickA(); + return PlayerSlash(); + } void PlayerSlide_Enter(Player* self) { diff --git a/game/src/PlayerStates.h b/game/src/PlayerStates.h index f83c022..0e6633c 100644 --- a/game/src/PlayerStates.h +++ b/game/src/PlayerStates.h @@ -54,6 +54,15 @@ DefineState(PlayerKickA, Player, PlayerAnimationExit ) +extern void PlayerSlash_Enter(Player* self); +extern const State* PlayerSlash_Update(Player* self, float deltaTime); + +DefineState(PlayerSlash, Player, + PlayerSlash_Enter, + PlayerSlash_Update, + PlayerAnimationExit +) + extern void PlayerSlide_Enter(Player* self); extern const State* PlayerSlide_Update(Player* self, float deltaTime);