Add pause feature on sprite animation

Ladder animation now pauses on no movement
scene_man
En Yi 2023-05-24 21:54:59 +08:00
parent c0aa37886f
commit 937f63b0ca
3 changed files with 5 additions and 0 deletions

View File

@ -132,6 +132,7 @@ typedef struct _CSprite_t {
unsigned int current_idx; unsigned int current_idx;
bool flip_x; bool flip_x;
bool flip_y; bool flip_y;
bool pause;
} CSprite_t; } CSprite_t;
static inline void set_bbox(CBBox_t* p_bbox, unsigned int x, unsigned int y) static inline void set_bbox(CBBox_t* p_bbox, unsigned int x, unsigned int y)

View File

@ -1076,6 +1076,7 @@ void sprite_animation_system(Scene_t* scene)
p_cspr->sprites[spr_idx].sprite->current_frame = 0; p_cspr->sprites[spr_idx].sprite->current_frame = 0;
} }
} }
if (p_cspr->pause) return;
SpriteRenderInfo_t spr = p_cspr->sprites[p_cspr->current_idx]; SpriteRenderInfo_t spr = p_cspr->sprites[p_cspr->current_idx];
// Animate it (handle frame count) // Animate it (handle frame count)
spr.sprite->elapsed++; spr.sprite->elapsed++;

View File

@ -27,6 +27,8 @@ static unsigned int player_sprite_transition_func(Entity_t* ent)
if (p_ctrans->velocity.x > 0) p_spr->flip_x = true; if (p_ctrans->velocity.x > 0) p_spr->flip_x = true;
else if (p_ctrans->velocity.x < 0) p_spr->flip_x = false; else if (p_ctrans->velocity.x < 0) p_spr->flip_x = false;
p_spr->pause = false;
if (p_move->ground_state & 1) if (p_move->ground_state & 1)
{ {
if (p_plr->is_crouch) if (p_plr->is_crouch)
@ -44,6 +46,7 @@ static unsigned int player_sprite_transition_func(Entity_t* ent)
} }
else if (p_plr->ladder_state) else if (p_plr->ladder_state)
{ {
p_spr->pause = Vector2LengthSqr(p_ctrans->velocity) < 10.0f;
return SPR_PLAYER_LADDER; return SPR_PLAYER_LADDER;
} }
else if (p_move->water_state & 1) else if (p_move->water_state & 1)