diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-12-20 21:32:31 +0100 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-12-20 21:32:31 +0100 |
| commit | 88fb94168c87dd8cc07e16cb988e0ea5c25bc202 (patch) | |
| tree | 4ccbd60426aac061c80f0264040363daa24e393d /src | |
| parent | 38d8d7f442a4b5cb66815ada7bb508c734186c6e (diff) | |
spawner sprite
Diffstat (limited to 'src')
| -rw-r--r-- | src/sprite.c | 33 | ||||
| -rw-r--r-- | src/zombies.c | 9 |
2 files changed, 33 insertions, 9 deletions
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( |
