feat: implemented air-heavy / adjusted timing of KickA

This commit is contained in:
Sara 2024-01-16 12:38:11 +01:00
parent 4265148156
commit 6175e52297
2 changed files with 56 additions and 38 deletions

View file

@ -15,6 +15,7 @@ void InternalSpriteFlipWithMovement(Player* self) {
void PlayerAnimationExit(Player* self) { void PlayerAnimationExit(Player* self) {
self->animationTriggers = 0; self->animationTriggers = 0;
self->attackInput = 0;
} }
void PlayerIdleEnter(Player* self) { 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)); PlayerHurtbox(self, damage, MakeVector(0.1f, 0.06f), MakeVector(0.3f, -0.6f));
++self->animationTriggers; ++self->animationTriggers;
} }
if(ntime > 1.0f) { if(ntime > 1.0f && self->attackInput == 1)
if(self->attackInput == 1) return PlayerKickA();
return PlayerJabA();
else if(self->attackInput == 2)
return PlayerKickA();
}
if(!veqf(self->moveInput, ZeroVector) && ntime > 1.05f) if(!veqf(self->moveInput, ZeroVector) && ntime > 1.05f)
return PlayerWalk(); return PlayerWalk();
if(ntime >= 2.0f) if(ntime >= 2.0f)
@ -149,7 +146,7 @@ const State* PlayerKickA_Update(Player* self, float deltaTime) {
.knockback = 0.15f, .knockback = 0.15f,
}; };
const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); 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)); PlayerHurtbox(self, damage, MakeVector(0.1f, 0.06f), MakeVector(0.3f, -0.4f));
++self->animationTriggers; ++self->animationTriggers;
} }
@ -162,26 +159,47 @@ const State* PlayerKickA_Update(Player* self, float deltaTime) {
return PlayerKickA(); return PlayerKickA();
} }
static
const State* PlayerAir_Update(Player* self, float deltaTime) {
return NULL;
}
void PlayerJump_Enter(Player* self) { void PlayerJump_Enter(Player* self) {
self->currentAnimation = self->jump; if(self->jumpInput) {
self->verticalVelocity = 2.f; self->currentAnimation = self->jump;
self->verticalVelocity = 2.f;
}
animation_sprite_play_from(self->currentAnimation, 0.f); animation_sprite_play_from(self->currentAnimation, 0.f);
} }
const State* PlayerJump_Update(Player* self, float deltaTime) { const State* PlayerJump_Update(Player* self, float deltaTime) {
self->verticalVelocity += .3f * deltaTime; self->verticalVelocity -= 3.f * deltaTime;
if(self->verticalVelocity > 0.f) if(self->height == 0.f) {
return PlayerFall(); self->verticalVelocity = 0.f;
return PlayerIdle();
}
if(self->attackInput == 2)
return PlayerAirHeavy();
return PlayerJump(); return PlayerJump();
} }
void PlayerFall_Enter(Player* self) { void PlayerAirHeavy_Enter(Player* self) {
self->currentAnimation = self->jump; self->currentAnimation = self->air_heavy;
animation_sprite_play_from(self->currentAnimation, 0.f);
} }
const State* PlayerFall_Update(Player* self, float deltaTime) { const State* PlayerAirHeavy_Update(Player* self, float deltaTime) {
self->verticalVelocity -= 3.f * deltaTime; const static DamageEventData damage = {
if(self->height == 0.f) .damageAmount = 6,
return PlayerIdle(); .knockdown = 1,
return PlayerFall(); .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;
} }

View file

@ -5,10 +5,10 @@
typedef struct Player Player; typedef struct Player Player;
void PlayerAnimationExit(Player* self); extern void PlayerAnimationExit(Player* self);
void PlayerIdleEnter(Player* self); extern void PlayerIdleEnter(Player* self);
const State* PlayerIdleUpdate(Player* self, float deltaTime); extern const State* PlayerIdleUpdate(Player* self, float deltaTime);
DefineState(PlayerIdle, Player, DefineState(PlayerIdle, Player,
PlayerIdleEnter, PlayerIdleEnter,
@ -16,8 +16,8 @@ DefineState(PlayerIdle, Player,
PlayerAnimationExit PlayerAnimationExit
) )
void PlayerWalk_Enter(Player* self); extern void PlayerWalk_Enter(Player* self);
const State* PlayerWalk_Update(Player* self, float deltaTime); extern const State* PlayerWalk_Update(Player* self, float deltaTime);
DefineState(PlayerWalk, Player, DefineState(PlayerWalk, Player,
PlayerWalk_Enter, PlayerWalk_Enter,
@ -25,10 +25,10 @@ DefineState(PlayerWalk, Player,
PlayerAnimationExit PlayerAnimationExit
) )
void PlayerAttackEnter(Player* self); extern void PlayerAttackEnter(Player* self);
void PlayerJabA_Enter(Player* self); extern void PlayerJabA_Enter(Player* self);
const State* PlayerJabA_Update(Player* self, float deltaTime); extern const State* PlayerJabA_Update(Player* self, float deltaTime);
DefineState(PlayerJabA, Player, DefineState(PlayerJabA, Player,
PlayerJabA_Enter, PlayerJabA_Enter,
@ -36,8 +36,8 @@ DefineState(PlayerJabA, Player,
PlayerAnimationExit PlayerAnimationExit
) )
void PlayerJabB_Enter(Player* self); extern void PlayerJabB_Enter(Player* self);
const State* PlayerJabB_Update(Player* self, float deltaTime); extern const State* PlayerJabB_Update(Player* self, float deltaTime);
DefineState(PlayerJabB, Player, DefineState(PlayerJabB, Player,
PlayerJabB_Enter, PlayerJabB_Enter,
@ -45,8 +45,8 @@ DefineState(PlayerJabB, Player,
PlayerAnimationExit PlayerAnimationExit
) )
void PlayerKickA_Enter(Player* self); extern void PlayerKickA_Enter(Player* self);
const State* PlayerKickA_Update(Player* self, float deltaTime); extern const State* PlayerKickA_Update(Player* self, float deltaTime);
DefineState(PlayerKickA, Player, DefineState(PlayerKickA, Player,
PlayerKickA_Enter, PlayerKickA_Enter,
@ -54,8 +54,8 @@ DefineState(PlayerKickA, Player,
PlayerAnimationExit PlayerAnimationExit
) )
void PlayerJump_Enter(Player *self); extern void PlayerJump_Enter(Player *self);
const State* PlayerJump_Update(Player* self, float deltaTime); extern const State* PlayerJump_Update(Player* self, float deltaTime);
DefineState(PlayerJump, Player, DefineState(PlayerJump, Player,
PlayerJump_Enter, PlayerJump_Enter,
@ -63,12 +63,12 @@ DefineState(PlayerJump, Player,
PlayerAnimationExit PlayerAnimationExit
) )
void PlayerFall_Enter(Player* self); extern void PlayerAirHeavy_Enter(Player* self);
const State* PlayerFall_Update(Player* self, float deltaTime); extern const State* PlayerAirHeavy_Update(Player* self, float deltaTime);
DefineState(PlayerFall, Player, DefineState(PlayerAirHeavy, Player,
PlayerFall_Enter, PlayerAirHeavy_Enter,
PlayerFall_Update, PlayerAirHeavy_Update,
PlayerAnimationExit PlayerAnimationExit
) )