From 8254b76c770d6292c0894e74d7839366a33369c0 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Wed, 28 Dec 2022 11:27:05 +0100 Subject: [PATCH] hud: backpack animation when opening/closing inventory --- assets-cg/fxconv-metadata.txt | 2 +- assets-cg/hud_backpack.ase | Bin 1171 -> 1909 bytes src/anim.c | 3 +++ src/anim.h | 3 +++ src/aoe.c | 2 +- src/game.c | 20 ++++++++++++++++---- src/game.h | 8 +++++--- src/main.c | 9 +++++++-- 8 files changed, 36 insertions(+), 11 deletions(-) diff --git a/assets-cg/fxconv-metadata.txt b/assets-cg/fxconv-metadata.txt index 28f2eb6..f3bde5e 100644 --- a/assets-cg/fxconv-metadata.txt +++ b/assets-cg/fxconv-metadata.txt @@ -13,7 +13,7 @@ hud_backpack.ase: custom-type: aseprite-anim name: frames_hud_backpack center: 0, 0 - next: Idle=Idle, Open=Idle + next: Idle=Idle, Open=Idle, InventoryOpen=InventoryIdle, InventoryIdle=InventoryIdle, InventoryClose=Idle font_rogue.png: type: font diff --git a/assets-cg/hud_backpack.ase b/assets-cg/hud_backpack.ase index 7f68e70695f1bf942ec3aa8dbab803588c00d1b2..9891a956cce9b2f55fcf39d4ca853c094fcd8e03 100644 GIT binary patch delta 506 zcmbQt`IV2ol%0X$!BXCd?3KK?nHU&;edK0HVPIh3-q;(<$UYy)l2Bls{E^W-k&S@^ z$U_3W44!#qsd**&MV0;qsd=0XoJf*DCX&2oN=_;l0}rY^A40!#PJVIfWDO>n$!1J^ zAiUX(DV9l~7O3IZM@F!N7=i4`$xOME{h6!li_j#JfP7X31_l-eHirK|UqApq&252@ zmC?(Oha5X%f9d_?`CAz;I_?V5K(-agmVj6)2=OQ=NWg%DVX`xenie|)4)s9gEDZnQ H%GnqIsQZNh delta 54 zcmey$H<^=tG7AI4gQaW}*(-Sim>3v-edJ(BVPIh3*w`D($ZiK@NhmN){>W%Pxsyp| J^LZwJCIFY24t@Xt diff --git a/src/anim.c b/src/anim.c index 0780f01..4f7e888 100644 --- a/src/anim.c +++ b/src/anim.c @@ -62,6 +62,9 @@ ANIM1(hud_xp_Shine); ANIM1(hud_xp_Explode); ANIM1(hud_backpack_Idle); ANIM1(hud_backpack_Open); +ANIM1(hud_backpack_InventoryOpen); +ANIM1(hud_backpack_InventoryIdle); +ANIM1(hud_backpack_InventoryClose); /* Items */ ANIM1(item_life); diff --git a/src/anim.h b/src/anim.h index 30c873a..23e47d0 100644 --- a/src/anim.h +++ b/src/anim.h @@ -105,6 +105,9 @@ extern anim_t anims_hud_xp_Shine; extern anim_t anims_hud_xp_Explode; extern anim_t anims_hud_backpack_Idle; extern anim_t anims_hud_backpack_Open; +extern anim_t anims_hud_backpack_InventoryIdle; +extern anim_t anims_hud_backpack_InventoryOpen; +extern anim_t anims_hud_backpack_InventoryClose; /* Items */ extern anim_t anims_item_life; diff --git a/src/aoe.c b/src/aoe.c index 1377bbf..bb5dcec 100644 --- a/src/aoe.c +++ b/src/aoe.c @@ -274,7 +274,7 @@ void aoe_apply(game_t *game, entity_t *entity, entity_t *e) if(aoe->type == AOE_ITEM && e_f && e_f->player) { bool picked = player_give_item(e, aoe->data.item.type); if(picked) { - game_hud_start_backpack_anim(game); + game_hud_anim_backpack_item(game); aoe->lifetime = 0; } /* Don't bother recording the hit since the item will disappear */ diff --git a/src/game.c b/src/game.c index 0d0132a..0d27554 100644 --- a/src/game.c +++ b/src/game.c @@ -187,12 +187,24 @@ void game_message(game_t *g, fixed_t duration, char const *fmt, ...) g->message_time = duration; } -void game_hud_start_backpack_anim(game_t *g) +void game_hud_anim_backpack_item(game_t *g) { g->hud_backpack_anim.frame = anims_hud_backpack_Open.start[0]; g->hud_backpack_anim.elapsed = 0; } +void game_hud_anim_backpack_open(game_t *g) +{ + g->hud_backpack_anim.frame = anims_hud_backpack_InventoryOpen.start[0]; + g->hud_backpack_anim.elapsed = 0; +} + +void game_hud_anim_backpack_close(game_t *g) +{ + g->hud_backpack_anim.frame = anims_hud_backpack_InventoryClose.start[0]; + g->hud_backpack_anim.elapsed = 0; +} + //--- // Object management functions //--- @@ -425,7 +437,7 @@ void game_spawn_enemies(game_t *g) } } -void game_update_animations(game_t *g, fixed_t dt) +void game_update_animations(game_t *g, fixed_t dt, fixed_t dt_rt) { for(int i = 0; i < g->entity_count; i++) { entity_t *e = g->entities[i]; @@ -437,8 +449,8 @@ void game_update_animations(game_t *g, fixed_t dt) for(int i = 0; i < g->map->width * g->map->height; i++) g->map_anim[i] += fround(dt * 1000); - anim_state_update(&g->hud_xp_anim, dt); - anim_state_update(&g->hud_backpack_anim, dt); + anim_state_update(&g->hud_xp_anim, dt_rt); + anim_state_update(&g->hud_backpack_anim, dt_rt); } void game_update_effects(game_t *g, fixed_t dt) diff --git a/src/game.h b/src/game.h index 3722dbf..4024a5b 100644 --- a/src/game.h +++ b/src/game.h @@ -92,8 +92,10 @@ void game_shake(game_t *g, int amplitude, fixed_t duration); /* Set the current game message */ void game_message(game_t *g, fixed_t duration, char const *fmt, ...); -/* Start the backpack animation */ -void game_hud_start_backpack_anim(game_t *g); +/* Start backpack animations */ +void game_hud_anim_backpack_item(game_t *g); +void game_hud_anim_backpack_open(game_t *g); +void game_hud_anim_backpack_close(game_t *g); //--- // Managing dynamic game elements @@ -136,7 +138,7 @@ int game_sort_entities(game_t const *g, entity_measure_t *measure, void game_spawn_enemies(game_t *g); /* Update all entities' and effect areas' animations. */ -void game_update_animations(game_t *g, fixed_t dt); +void game_update_animations(game_t *g, fixed_t dt, fixed_t dt_rt); /* Update all entities' status ailments and temporary buffs/debuffs */ void game_update_effects(game_t *g, fixed_t dt); diff --git a/src/main.c b/src/main.c index 3b7ac1d..ed5a034 100644 --- a/src/main.c +++ b/src/main.c @@ -442,8 +442,13 @@ int main(void) /* Menus */ if(!debug.paused && ev.key == KEY_F6 && !debug.dev_menu - && !keydown(KEY_ALPHA)) + && !keydown(KEY_ALPHA)) { + if(game.menu_open) + game_hud_anim_backpack_close(&game); + else + game_hud_anim_backpack_open(&game); game.menu_open = !game.menu_open; + } /* Inventory movement */ if(!debug.paused && game.menu_open) { @@ -599,7 +604,7 @@ int main(void) - XP boosts - Weaker but longer-lasting buffs */ - game_update_animations(&game, dt); + game_update_animations(&game, dt, dt_rt); game_update_effects(&game, dt); game_update_aoes(&game, dt); game_update_particles(&game, dt);