IsAnimationFinished function rather than a bool
This commit is contained in:
parent
1dda2f9315
commit
ba44c72d09
6
main.c
6
main.c
@ -162,7 +162,7 @@ void Update(GameState *game, Camera2D *cam, float dt) {
|
||||
|
||||
// Handle the attacking state, if not handle state transitions
|
||||
if (knight->state == KNIGHT_ATTACKING) {
|
||||
if (game->anim_playbacks[i].is_finished) {
|
||||
if (IsAnimationFinished(game->anim_playbacks[i])) {
|
||||
knight->state = KNIGHT_IDLE;
|
||||
PlayAnimation(ANIM_KNIGHT_IDLE, knight_anims, &game->anim_playbacks[i]);
|
||||
}
|
||||
@ -254,6 +254,8 @@ void Draw(const GameState *game, Assets assets, Camera2D cam, float dt) {
|
||||
Vector2 world = GetScreenToWorld2D(GetMousePosition(), cam);
|
||||
Vector2 pointer_pos = Vector2Subtract(world, (Vector2){24, 19});
|
||||
D_DrawTextureV(assets.textures[2], pointer_pos, WHITE);
|
||||
|
||||
DrawFPS(1500, 10);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
@ -281,7 +283,7 @@ int main(void) {
|
||||
GameState game = {0};
|
||||
game.knights = malloc(sizeof(Knight) * MAX_KNIGHTS);
|
||||
game.knights[0] = (Knight){0};
|
||||
game.knights[0].position = (Vector2){100,100};
|
||||
game.knights[0].position = (Vector2){400,150};
|
||||
game.anim_playbacks = malloc(sizeof(SpriteAnimationPlayback) * MAX_KNIGHTS);
|
||||
game.anim_playbacks_count = 1;
|
||||
// First one is idle
|
||||
|
@ -5,7 +5,6 @@ inline void PlayAnimation(int animation, SpriteAnimation *anims, SpriteAnimation
|
||||
playback->time_elapsed = 0.0f;
|
||||
playback->current_frame = 0;
|
||||
playback->row = animation;
|
||||
playback->is_finished = false;
|
||||
playback->total_frames = anims[animation].total_frames;
|
||||
playback->loop = anims[animation].loop;
|
||||
}
|
||||
@ -21,11 +20,12 @@ void TickSpriteAnimations(SpriteAnimationPlayback *playbacks, int len) {
|
||||
if (playback->current_frame >= playback->total_frames) {
|
||||
if (playback->loop) {
|
||||
playback->current_frame = 0;
|
||||
} else {
|
||||
playback->is_finished = true;
|
||||
playback->current_frame--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline bool IsAnimationFinished(SpriteAnimationPlayback playback) {
|
||||
return playback.current_frame == playback.total_frames;
|
||||
}
|
||||
|
@ -4,12 +4,6 @@
|
||||
#include "lib.h"
|
||||
#include "include/raylib.h"
|
||||
|
||||
// typedef struct {
|
||||
// Texture2D texture;
|
||||
// char *name;
|
||||
// Size size;
|
||||
// } SpriteSheet;
|
||||
|
||||
typedef struct {
|
||||
u8 loop;
|
||||
u8 total_frames;
|
||||
@ -21,9 +15,8 @@ typedef struct {
|
||||
u8 total_frames;
|
||||
u8 current_frame;
|
||||
u8 loop;
|
||||
// TODO: Maybe we can get rid of this one
|
||||
u8 is_finished;
|
||||
} SpriteAnimationPlayback;
|
||||
|
||||
void PlayAnimation(int animation, SpriteAnimation *anims, SpriteAnimationPlayback *playback);
|
||||
void TickSpriteAnimations(SpriteAnimationPlayback *playbacks, int len);
|
||||
bool IsAnimationFinished(SpriteAnimationPlayback playback);
|
||||
|
Loading…
x
Reference in New Issue
Block a user