Initialize knight_anims statically so it survives hot reloads

This commit is contained in:
Joseph Ferano 2026-07-19 10:31:17 +07:00
parent 7e1748d3b4
commit 78b4b739e6
3 changed files with 14 additions and 66 deletions

View File

@ -13,15 +13,6 @@ using namespace std;
#include "game_data.h" #include "game_data.h"
GameState *InitState() { 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 assets = {};
assets.textures = (Texture*)malloc(sizeof(Texture2D) * TEXTURES_BUF_SIZE); assets.textures = (Texture*)malloc(sizeof(Texture2D) * TEXTURES_BUF_SIZE);
assets.textures[TEX_GROUND] = LoadTexture("./assets/Terrain/Ground/Tilemap_Flat.png"); 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}; game->knights[i].position = {rand_x,rand_y};
PlayAnimation(ANIM_KNIGHT_IDLE, knight_anims, &game->anim_playbacks[i]); 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->anim_playbacks[i].current_frame = rand_frame;
} }
game->entity_count = entities; game->entity_count = entities;

View File

@ -14,13 +14,6 @@
#define ANIM_KNIGHT_ATTACK_BACK1 6 #define ANIM_KNIGHT_ATTACK_BACK1 6
#define ANIM_KNIGHT_ATTACK_BACK2 7 #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 u16 knight_sprite_size = 192;
const Vector2 knight_origin = {knight_sprite_size / 2, knight_sprite_size / 2 + 35}; const Vector2 knight_origin = {knight_sprite_size / 2, knight_sprite_size / 2 + 35};
const Size knight_col_size = {50, 75}; const Size knight_col_size = {50, 75};
@ -32,52 +25,13 @@ const Rectangle knight_colrect_select = {
knight_col_size.height, knight_col_size.height,
}; };
SpriteAnimation knight_idle = { SpriteAnimation knight_anims[8] = {
.loop = true, {.loop = true, .total_frames = 6}, // ANIM_KNIGHT_IDLE
.total_frames = 6, {.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;

View File

@ -15,6 +15,7 @@ struct SpriteAnimationPlayback {
u8 total_frames; u8 total_frames;
u8 current_frame; u8 current_frame;
u8 loop; u8 loop;
u8 finished;
}; };
void PlayAnimation(int animation, SpriteAnimation *anims, SpriteAnimationPlayback *playback); void PlayAnimation(int animation, SpriteAnimation *anims, SpriteAnimationPlayback *playback);
@ -27,6 +28,7 @@ inline void PlayAnimation(int animation, SpriteAnimation *anims, SpriteAnimation
playback->row = animation; playback->row = animation;
playback->total_frames = anims[animation].total_frames; playback->total_frames = anims[animation].total_frames;
playback->loop = anims[animation].loop; playback->loop = anims[animation].loop;
playback->finished = false;
} }
void TickSpriteAnimations(SpriteAnimationPlayback *playbacks, int len) { void TickSpriteAnimations(SpriteAnimationPlayback *playbacks, int len) {
@ -41,11 +43,12 @@ void TickSpriteAnimations(SpriteAnimationPlayback *playbacks, int len) {
if (playback->loop) { if (playback->loop) {
playback->current_frame = 0; playback->current_frame = 0;
} }
playback->finished = true;
} }
} }
} }
} }
inline bool IsAnimationFinished(SpriteAnimationPlayback playback) { inline bool IsAnimationFinished(SpriteAnimationPlayback playback) {
return playback.current_frame == playback.total_frames; return playback.finished;
} }