47 lines
1.2 KiB
C
47 lines
1.2 KiB
C
#pragma once
|
|
|
|
#include "lib.h"
|
|
#include "raylib.h"
|
|
|
|
typedef struct {
|
|
Texture2D texture;
|
|
char *name;
|
|
Size size;
|
|
} SpriteSheet;
|
|
|
|
typedef struct {
|
|
char* name;
|
|
u16 total_frames;
|
|
Rectangle src_rect;
|
|
} SpriteAnimation;
|
|
|
|
typedef struct {
|
|
u16 anim_id;
|
|
u16 current_frame;
|
|
f32 time_elapsed;
|
|
} SpriteAnimationPlayback;
|
|
|
|
void PlayAnimation(SpriteAnimationPlayback *playbacks, SpriteAnimationPlayback playback) {
|
|
playback.time_elapsed = 0.0f;
|
|
playback.current_frame = 0;
|
|
playbacks[0] = playback;
|
|
}
|
|
|
|
void TickSpriteAnimations(SpriteAnimation *animations,
|
|
SpriteAnimationPlayback *playbacks,
|
|
int len) {
|
|
const f32 anim_speed = 1.0f / 10.0f;
|
|
for (int i = 0; i < len; i++) {
|
|
SpriteAnimationPlayback *playback = &playbacks[i];
|
|
SpriteAnimation *animation = &animations[playback->anim_id];
|
|
playback->time_elapsed += GetFrameTime();
|
|
if (playback->time_elapsed >= anim_speed) {
|
|
playback->time_elapsed = 0.0f;
|
|
playback->current_frame++;
|
|
if (playback->current_frame >= animation->total_frames) {
|
|
playback->current_frame = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|