From 78b4b739e6bb162075533b483a1e354a8d3f64e4 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sun, 19 Jul 2026 10:31:17 +0700 Subject: [PATCH] Initialize knight_anims statically so it survives hot reloads --- game.cpp | 11 +-------- game_data.h | 64 ++++++++--------------------------------------------- sprites.h | 5 ++++- 3 files changed, 14 insertions(+), 66 deletions(-) diff --git a/game.cpp b/game.cpp index b184336..346e269 100644 --- a/game.cpp +++ b/game.cpp @@ -13,15 +13,6 @@ using namespace std; #include "game_data.h" GameState *InitState() { - knight_anims[ANIM_KNIGHT_IDLE] = knight_idle; - knight_anims[ANIM_KNIGHT_RUN] = knight_run; - knight_anims[ANIM_KNIGHT_ATTACK_SIDE1] = knight_attack_side1; - knight_anims[ANIM_KNIGHT_ATTACK_SIDE2] = knight_attack_side2; - knight_anims[ANIM_KNIGHT_ATTACK_TOP1] = knight_attack_front1; - knight_anims[ANIM_KNIGHT_ATTACK_TOP2] = knight_attack_front2; - knight_anims[ANIM_KNIGHT_ATTACK_BACK1] = knight_attack_back1; - knight_anims[ANIM_KNIGHT_ATTACK_BACK2] = knight_attack_back2; - Assets assets = {}; assets.textures = (Texture*)malloc(sizeof(Texture2D) * TEXTURES_BUF_SIZE); assets.textures[TEX_GROUND] = LoadTexture("./assets/Terrain/Ground/Tilemap_Flat.png"); @@ -43,7 +34,7 @@ GameState *InitState() { game->knights[i].position = {rand_x,rand_y}; PlayAnimation(ANIM_KNIGHT_IDLE, knight_anims, &game->anim_playbacks[i]); - int rand_frame = GetRandomValue(0, knight_anims[ANIM_KNIGHT_IDLE].total_frames); + int rand_frame = GetRandomValue(0, knight_anims[ANIM_KNIGHT_IDLE].total_frames - 1); game->anim_playbacks[i].current_frame = rand_frame; } game->entity_count = entities; diff --git a/game_data.h b/game_data.h index 5255db3..db112d1 100644 --- a/game_data.h +++ b/game_data.h @@ -14,13 +14,6 @@ #define ANIM_KNIGHT_ATTACK_BACK1 6 #define ANIM_KNIGHT_ATTACK_BACK2 7 -// SpriteSheet knight_spritesheet = { -// .name = "blue_knight", -// .texture = {0}, -// // .anim_count = 8, -// .size = { 1152, 1536 }, -// }; - const u16 knight_sprite_size = 192; const Vector2 knight_origin = {knight_sprite_size / 2, knight_sprite_size / 2 + 35}; const Size knight_col_size = {50, 75}; @@ -32,52 +25,13 @@ const Rectangle knight_colrect_select = { knight_col_size.height, }; -SpriteAnimation knight_idle = { - .loop = true, - .total_frames = 6, +SpriteAnimation knight_anims[8] = { + {.loop = true, .total_frames = 6}, // ANIM_KNIGHT_IDLE + {.loop = true, .total_frames = 6}, // ANIM_KNIGHT_RUN + {.loop = false, .total_frames = 6}, // ANIM_KNIGHT_ATTACK_SIDE1 + {.loop = false, .total_frames = 6}, // ANIM_KNIGHT_ATTACK_SIDE2 + {.loop = false, .total_frames = 6}, // ANIM_KNIGHT_ATTACK_TOP1 + {.loop = false, .total_frames = 6}, // ANIM_KNIGHT_ATTACK_TOP2 + {.loop = false, .total_frames = 6}, // ANIM_KNIGHT_ATTACK_BACK1 + {.loop = false, .total_frames = 6}, // ANIM_KNIGHT_ATTACK_BACK2 }; - -SpriteAnimation knight_run = { - .loop = true, - .total_frames = 6, -}; - -SpriteAnimation knight_attack_side1 = { - .loop = false, - .total_frames = 6, -}; - -SpriteAnimation knight_attack_side2 = { - .loop = false, - .total_frames = 6, -}; - -SpriteAnimation knight_attack_front1 = { - .loop = false, - .total_frames = 6, -}; - -SpriteAnimation knight_attack_front2 = { - .loop = false, - .total_frames = 6, -}; - -SpriteAnimation knight_attack_back1 = { - .loop = false, - .total_frames = 6, -}; - -SpriteAnimation knight_attack_back2 = { - .loop = false, - .total_frames = 6, -}; - -SpriteAnimation knight_anims[8]; -// knight_anims[ANIM_KNIGHT_IDLE] = knight_idle; -// knight_anims[ANIM_KNIGHT_RUN] = knight_run; -// knight_anims[ANIM_KNIGHT_ATTACK_SIDE1] = knight_attack_side1; -// knight_anims[ANIM_KNIGHT_ATTACK_SIDE2] = knight_attack_side2; -// knight_anims[ANIM_KNIGHT_ATTACK_TOP1] = knight_attack_front1; -// knight_anims[ANIM_KNIGHT_ATTACK_TOP2] = knight_attack_front2; -// knight_anims[ANIM_KNIGHT_ATTACK_BACK1] = knight_attack_back1; -// knight_anims[ANIM_KNIGHT_ATTACK_BACK2] = knight_attack_back2; diff --git a/sprites.h b/sprites.h index 9a180ab..840f7dc 100644 --- a/sprites.h +++ b/sprites.h @@ -15,6 +15,7 @@ struct SpriteAnimationPlayback { u8 total_frames; u8 current_frame; u8 loop; + u8 finished; }; void PlayAnimation(int animation, SpriteAnimation *anims, SpriteAnimationPlayback *playback); @@ -27,6 +28,7 @@ inline void PlayAnimation(int animation, SpriteAnimation *anims, SpriteAnimation playback->row = animation; playback->total_frames = anims[animation].total_frames; playback->loop = anims[animation].loop; + playback->finished = false; } void TickSpriteAnimations(SpriteAnimationPlayback *playbacks, int len) { @@ -41,11 +43,12 @@ void TickSpriteAnimations(SpriteAnimationPlayback *playbacks, int len) { if (playback->loop) { playback->current_frame = 0; } + playback->finished = true; } } } } inline bool IsAnimationFinished(SpriteAnimationPlayback playback) { - return playback.current_frame == playback.total_frames; + return playback.finished; }