From e03464995b19b74ece788e2799261a8c58cb4861 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Fri, 17 Dec 2021 18:44:13 +0100 Subject: [PATCH] player spawn tile --- inc/level.h | 3 +++ inc/player.h | 2 +- inc/tile.h | 2 ++ res/test.kble | Bin 356 -> 356 bytes res/tileset.png | Bin 119 -> 205 bytes src/level.c | 10 ++++++++++ src/main.c | 2 +- src/player.c | 7 ++++--- 8 files changed, 21 insertions(+), 5 deletions(-) diff --git a/inc/level.h b/inc/level.h index 31e5246..074fe4b 100644 --- a/inc/level.h +++ b/inc/level.h @@ -1,4 +1,6 @@ #pragma once +#include "tile.h" +#include "vec.h" #include "visual_data.h" #include @@ -26,3 +28,4 @@ void level_draw(void); int level_get(int x, int y); int level_get_px(int x, int y); +struct Vec level_find(enum Tile); diff --git a/inc/player.h b/inc/player.h index 0257881..cae09be 100644 --- a/inc/player.h +++ b/inc/player.h @@ -10,7 +10,7 @@ struct Player { int jump_buffer, jump_grace; }; -void player_init(struct Player *); +void player_spawn(struct Player *); void player_update(struct Player *); void player_draw(struct Player *); void player_move(struct Player *, struct Vec); diff --git a/inc/tile.h b/inc/tile.h index 1e7c482..cccc40e 100644 --- a/inc/tile.h +++ b/inc/tile.h @@ -3,5 +3,7 @@ enum Tile { TILE_AIR, TILE_SOLID, + TILE_SPAWN, + TILE_EXIT, TILE_OOB, }; diff --git a/res/test.kble b/res/test.kble index 01129de1cf81ec0274fcd21de992bdcca90c585c..475a9ce0f05df2ecc42e428fa47d1acd6d0f42bf 100644 GIT binary patch delta 16 YcmaFD^n_``G)Cr$(?b}UCcdcv05=E*YXATM delta 29 lcmaFD^n_``w8{32tP=xRCeHVncu8Vn8{fog?#VKY9ssY{3flkx diff --git a/res/tileset.png b/res/tileset.png index a630e7e88ab117d504ff4eb64c6dc982b57c523f..498da533db261c7151282abb96429d90af8fdc73 100644 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox0VEijd(^%HsVSZ=jv*GOmrg#&$D+vLe7p1i z|I_*WR%@~+SXkfb3CPgACZv z>-cTq#22$pCaO%k%KmQdtbnWM-mhOGdL2KwDWVkQaS&&7-zht48)_KLTZ^_o-rUfYU^2YGeO=9qL^>bP0l+XkKeOoDq diff --git a/src/level.c b/src/level.c index 7a6c8d1..86a8d1b 100644 --- a/src/level.c +++ b/src/level.c @@ -1,6 +1,7 @@ #include "level.h" #include "conf.h" #include "tile.h" +#include "vec.h" #include "visual_data.h" #include #include @@ -92,6 +93,15 @@ level_get_px(int x, int y) return level_get(x / TILE_SIZE, y / TILE_SIZE); } +struct Vec +level_find(enum Tile t) +{ + int i = level.size; + while (i-- > 0 && level.data[i] != t) + ; + return (struct Vec){i % level.width, i / level.width}; +} + static void level_free(void) { diff --git a/src/main.c b/src/main.c index ed9d835..0a1ab1e 100644 --- a/src/main.c +++ b/src/main.c @@ -24,6 +24,7 @@ main(void) init(); level_load(&kble_test); + player_spawn(&player); do { int i; @@ -51,7 +52,6 @@ init(void) input_init(); level_init(); - player_init(&player); } static void diff --git a/src/player.c b/src/player.c index 484ce97..4abad17 100644 --- a/src/player.c +++ b/src/player.c @@ -13,10 +13,11 @@ static int collide(int x, int y, int tile); static int collide_solid(int x, int y); void -player_init(struct Player *p) +player_spawn(struct Player *p) { - p->pos.x = TILE_SIZE; - p->pos.y = TILE_SIZE; + struct Vec pos = level_find(TILE_SPAWN); + p->pos.x = pos.x * TILE_SIZE + (TILE_SIZE - PLAYER_WIDTH) / 2; + p->pos.y = pos.y * TILE_SIZE + TILE_SIZE - PLAYER_HEIGHT; reset_speed(p, 1, 1); p->air_state = AS_NEUTRAL; p->jump_buffer = 0;