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"
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;

View File

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

View File

@ -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;
}