Separate sprites into .c/.h files

This commit is contained in:
Joseph Ferano 2024-01-01 09:58:51 +07:00
parent a0126529de
commit ff49e7d2b3
6 changed files with 49 additions and 30 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
/deps/ /deps/
*.aseprite *.aseprite
/.idea/ /.idea/
/sprites.o

View File

@ -5,10 +5,13 @@ CC=gcc
all: main all: main
main: main.c ./lib/libraylib.a main: main.c sprites.o sprites.h game_data.h ./lib/libraylib.a
$(CC) $(CFLAGS) -Iinclude/ -lm main.c -o main ./lib/libraylib.a $(CC) $(CFLAGS) -Iinclude/ -lm main.c -o main sprites.o ./lib/libraylib.a
run: main sprites.o: sprites.c sprites.h lib.h
$(CC) $(CFLAGS) -c sprites.c -o sprites.o
run: all
./main ./main
clean: clean:

View File

@ -53,7 +53,7 @@ SpriteAnimation knight_attack_front2 = {
.src_rect = { 0, cell_size * 5, 192, 192 }, .src_rect = { 0, cell_size * 5, 192, 192 },
}; };
Spriteanimation knight_attack_back1 = { SpriteAnimation knight_attack_back1 = {
.name = "attack_back1", .name = "attack_back1",
.total_frames = 6, .total_frames = 6,
.src_rect = { 0, cell_size * 6, 192, 192 }, .src_rect = { 0, cell_size * 6, 192, 192 },
@ -66,3 +66,11 @@ SpriteAnimation knight_attack_back2 = {
}; };
SpriteAnimation knight_anims[8]; 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;

5
lib.h
View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include <stdint.h> #include <stdint.h>
#include <stddef.h> #include <stddef.h>
#include "include/raylib.h"
typedef uint8_t u8; typedef uint8_t u8;
// typedef char16_t c16; // typedef char16_t c16;
@ -20,8 +21,8 @@ typedef size_t usize;
typedef Vector2 Position; typedef Vector2 Position;
typedef struct Size { typedef struct Size {
float width; // Rectangle width float width;
float height; // Rectangle height float height;
} Size; } Size;
typedef struct Rect { typedef struct Rect {

26
sprites.c Normal file
View File

@ -0,0 +1,26 @@
#include "sprites.h"
#include "include/raylib.h"
void PlayAnimation(SpriteAnimationPlayback *playbacks, SpriteAnimationPlayback playback) {
playback.time_elapsed = 0.0f;
playback.current_frame = 0;
playbacks[0] = playback;
}
void TickSpriteAnimations(const 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];
const 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;
}
}
}
}

View File

@ -1,7 +1,8 @@
// sprites.h
#pragma once #pragma once
#include "lib.h" #include "lib.h"
#include "raylib.h" #include "include/raylib.h"
typedef struct { typedef struct {
Texture2D texture; Texture2D texture;
@ -21,26 +22,5 @@ typedef struct {
f32 time_elapsed; f32 time_elapsed;
} SpriteAnimationPlayback; } SpriteAnimationPlayback;
void PlayAnimation(SpriteAnimationPlayback *playbacks, SpriteAnimationPlayback playback) { void PlayAnimation(SpriteAnimationPlayback *playbacks, SpriteAnimationPlayback playback);
playback.time_elapsed = 0.0f; void TickSpriteAnimations(const SpriteAnimation *animations, SpriteAnimationPlayback *playbacks, int len);
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;
}
}
}
}