From 5f14f2394ae9c61beeeed56fb33e7ac81dfc4495 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Thu, 11 Nov 2021 07:09:56 +0100 Subject: [PATCH] thy death --- inc/conf.h | 2 +- inc/level.h | 3 +++ src/level.c | 18 ++++++++++++++++++ src/main.c | 2 -- src/player.c | 21 +++++++++++++++++++++ 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/inc/conf.h b/inc/conf.h index ef98e52..54abfe1 100644 --- a/inc/conf.h +++ b/inc/conf.h @@ -14,4 +14,4 @@ #define FRICTION_BREAK (0.6f / MAX_WALK_SPEED) #define JUMP_GRACE 1 #define JUMP_BUFFER 12 -#define JUMP_SPD -5.0 +#define JUMP_SPD -4.4 diff --git a/inc/level.h b/inc/level.h index 4e57c8c..cdad2c6 100644 --- a/inc/level.h +++ b/inc/level.h @@ -15,9 +15,11 @@ struct Level { int height; int size; char *data; + struct LevelBin *source; }; void level_load(struct LevelBin *); +void level_reload(void); void level_free(void); void level_draw(void); struct Vec level_find(enum Tile); @@ -25,3 +27,4 @@ enum Tile level_get(int x, int y); enum Tile level_get_px(int x, int y); void level_set(int x, int y, enum Tile v); void level_set_px(int x, int y, enum Tile v); +int level_oob(int x, int y); diff --git a/src/level.c b/src/level.c index 288f5dc..3ad3059 100644 --- a/src/level.c +++ b/src/level.c @@ -1,6 +1,8 @@ #include "level.h" #include "camera.h" #include "conf.h" +#include "particles.h" +#include "player.h" #include "tile.h" #include "vec.h" #include @@ -16,11 +18,20 @@ level_load(struct LevelBin *s) self.height = s->height; self.size = i; self.data = malloc(i); + self.source = s; while (i-- > 0) { self.data[i] = s->data[i]; } } +void +level_reload(void) +{ + level_load(self.source); + player_init(level_find(TILE_PLAYER)); + particles_init(); +} + void level_free(void) { @@ -95,3 +106,10 @@ level_set_px(int x, int y, enum Tile v) { level_set(x / TILE_SIZE, y / TILE_SIZE, v); } + +int +level_oob(int x, int y) +{ + return x < 0 || x >= self.width * TILE_SIZE || y < 0 || + y >= self.height * TILE_SIZE; +} diff --git a/src/main.c b/src/main.c index 401a37a..b3c562a 100644 --- a/src/main.c +++ b/src/main.c @@ -26,9 +26,7 @@ main(void) GINT_CALL(callback, &has_ticked)); timer_start(timer); input_init(); - particles_init(); level_load(&lvl_test); - player_init(level_find(TILE_PLAYER)); camera_init(player_pos()); while (!input_down(K_EXIT)) { diff --git a/src/player.c b/src/player.c index 039c15e..d3f824b 100644 --- a/src/player.c +++ b/src/player.c @@ -12,6 +12,8 @@ static struct Player self; static int jump(int on_ground); static void walljump(void); +static void death(void); +static int oob(int x, int y); static int collide_solid(int x, int y); void @@ -63,6 +65,11 @@ player_update(void) if (self.lock_direction && abs(self.spd.x) < MAX_WALK_SPEED / 2) self.lock_direction = 0; + /* death */ + if (oob(self.pos.x, self.pos.y)) { + death(); + } + player_move(player_update_rem()); } @@ -108,6 +115,12 @@ walljump(void) } } +static void +death(void) +{ + level_reload(); +} + void player_draw(void) { @@ -168,6 +181,14 @@ collide_solid(int x, int y) level_get_px(x2, y2) == TILE_SOLID; } +static int +oob(int x, int y) +{ + const int x2 = x + PLAYER_WIDTH - 1; + const int y2 = y + PLAYER_HEIGHT - 1; + return level_oob(x, y) && level_oob(x2, y2); +} + struct Vec * player_pos(void) {