summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-12-20 21:32:31 +0100
committerAldrik Ramaekers <aldrik@amftech.nl>2022-12-20 21:32:31 +0100
commit88fb94168c87dd8cc07e16cb988e0ea5c25bc202 (patch)
tree4ccbd60426aac061c80f0264040363daa24e393d
parent38d8d7f442a4b5cb66815ada7bb508c734186c6e (diff)
spawner sprite
-rw-r--r--build/zombies.exebin1768159 -> 1771319 bytes
-rw-r--r--include/sprite.h2
-rw-r--r--src/sprite.c33
-rw-r--r--src/zombies.c9
4 files changed, 34 insertions, 10 deletions
diff --git a/build/zombies.exe b/build/zombies.exe
index 49ce0fc..41f3267 100644
--- a/build/zombies.exe
+++ b/build/zombies.exe
Binary files differ
diff --git a/include/sprite.h b/include/sprite.h
index 58ff293..a5e04d8 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -22,6 +22,6 @@ typedef struct t_sprite_frame {
sprite create_sprite(image* img, int frame_count, int fwidth, int fheight, float sec_per_frame);
void update_sprite(sprite* sprite);
-sprite_frame get_frame(sprite* sprite);
+sprite_frame sprite_get_frame(sprite* sprite);
#endif \ No newline at end of file
diff --git a/src/sprite.c b/src/sprite.c
index 6b35e62..fa6f2e9 100644
--- a/src/sprite.c
+++ b/src/sprite.c
@@ -13,16 +13,37 @@ sprite create_sprite(image* img, int frame_count, int fwidth, int fheight, float
}
void update_sprite(sprite* sprite) {
+ sprite->time += SERVER_TICK_RATE;
int frame = sprite->time / sprite->sec_per_frame;
sprite->current_frame = frame;
- sprite->time += update_delta;
+ if (frame >= sprite->frame_count) {
+ sprite->time = 0.0f;
+ sprite->current_frame = 0;
+ }
}
-sprite_frame get_frame(sprite* sprite) {
- sprite_frame frame;
+sprite_frame sprite_get_frame(sprite* sprite) {
+ sprite_frame frame = {0};
+ if (!sprite->image->loaded) return frame;
+
+ int columns = sprite->image->width / sprite->frame_width;
+ int rows = sprite->image->height / sprite->frame_height;
+ float column_percentage = 1.0f / columns;
+ float row_percentage = 1.0f / rows;
+
+ int column = sprite->current_frame % columns;
+ int row = sprite->current_frame / columns;
+
+ frame.tl = (vec2f){column * column_percentage, row * row_percentage};
+ frame.tr = (vec2f){column * column_percentage + column_percentage, row * row_percentage};
+ frame.bl = (vec2f){column * column_percentage, row * row_percentage + row_percentage};
+ frame.br = (vec2f){column * column_percentage + column_percentage, row * row_percentage + row_percentage};
+
+ /*
frame.tl = (vec2f){0,0};
- frame.tr = (vec2f){1,0};
- frame.bl = (vec2f){0,1};
- frame.br = (vec2f){1,1};
+ frame.tr = (vec2f){0.25f,0};
+ frame.bl = (vec2f){0,0.25f};
+ frame.br = (vec2f){0.25f,0.25f};
+ */
return frame;
} \ No newline at end of file
diff --git a/src/zombies.c b/src/zombies.c
index afcfd7f..542412e 100644
--- a/src/zombies.c
+++ b/src/zombies.c
@@ -28,7 +28,7 @@ void create_spawner(vec2 position) {
s.active = true;
s.position = position;
s.sec_since_last_spawn = 999.0f;
- s.sprite = create_sprite(img_spawner, 14, 64, 64, 0.3f);
+ s.sprite = create_sprite(img_spawner, 14, 64, 64, 0.1f);
for (int i = 0; i < MAX_SPAWNERS; i++) {
spawner o = spawner_tiles[i];
@@ -64,6 +64,7 @@ void update_spawners_server() {
for (int x = 0; x < MAX_SPAWNERS; x++) {
spawner spawner = spawner_tiles[x];
if (!spawner.active) continue;
+ update_sprite(&spawner_tiles[x].sprite);
spawner_tiles[x].sec_since_last_spawn += SERVER_TICK_RATE;
if (spawner_tiles[x].sec_since_last_spawn >= 2.0f) {
spawn_zombie(spawner.position.x, spawner.position.y);
@@ -83,11 +84,13 @@ void draw_spawners(platform_window* window) {
tile tile = map_loaded[spawner.position.y][spawner.position.x];
- renderer->render_image_quad(spawner.sprite.image,
+ sprite_frame frame = sprite_get_frame(&spawner.sprite);
+ renderer->render_image_quad_partial(spawner.sprite.image,
tile.tl.x, tile.tl.y,
tile.bl.x, tile.bl.y,
tile.br.x, tile.br.y,
- tile.tr.x, tile.tr.y);
+ tile.tr.x, tile.tr.y,
+ frame.tl, frame.tr, frame.bl, frame.br);
/*
renderer->render_quad(