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) {
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;
}

View file

@ -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
)