From d95c1b6cb37ad74a4adb0b148aad91476a7ed401 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Fri, 11 Sep 2020 18:07:53 +0200 Subject: [PATCH] Shaping out the games structure --- include/camera.h | 16 ++++++++++++++++ include/level.h | 16 ++++++++++++++++ include/main.h | 10 ++++++++++ include/player.h | 7 ++++--- include/vec.h | 2 +- src/camera.c | 5 +++++ src/level.c | 11 +++++++++++ src/main.c | 39 ++++++++++++++++++++++++++++++++++++--- src/player.c | 10 ++++++++-- 9 files changed, 107 insertions(+), 9 deletions(-) create mode 100644 include/camera.h create mode 100644 include/level.h create mode 100644 include/main.h create mode 100644 src/camera.c create mode 100644 src/level.c diff --git a/include/camera.h b/include/camera.h new file mode 100644 index 0000000..517e04b --- /dev/null +++ b/include/camera.h @@ -0,0 +1,16 @@ +#ifndef _DEF_CAMERA +#define _DEF_CAMERA + +#include "vec.h" + +typedef struct Camera +{ + Vec position; + Vec *follow; /* the target position to lerp on */ + float speed; /* camera lerp speed with 0 < speed <= 1 */ +} Camera; + +void camera_step(Camera *camera); +/* camera is invisible */ + +#endif /* _DEF_CAMERA */ diff --git a/include/level.h b/include/level.h new file mode 100644 index 0000000..6a145ba --- /dev/null +++ b/include/level.h @@ -0,0 +1,16 @@ +#ifndef _DEF_LEVEL +#define _DEF_LEVEL + +#include "camera.h" + +typedef struct Level +{ + unsigned char tiles[64 * 64]; /* max level size */ + unsigned int width; /* in tiles */ + unsigned int height; /* in tiles */ +} Level; + +void level_step(Level *level); +void level_draw(Level *level, Camera *camera); + +#endif /* _DEF_LEVEL */ diff --git a/include/main.h b/include/main.h new file mode 100644 index 0000000..67a1f00 --- /dev/null +++ b/include/main.h @@ -0,0 +1,10 @@ +#include "player.h" +#include "level.h" + +#ifndef _DEF_MAIN +#define _DEF_MAIN + +void step_event(Player *player, Level *level, Camera *camera); +void draw_event(Player *player, Level *level, Camera *camera); + +#endif diff --git a/include/player.h b/include/player.h index 50739df..d13bc56 100644 --- a/include/player.h +++ b/include/player.h @@ -2,13 +2,14 @@ #define _DEF_PLAYER #include "vec.h" +#include "camera.h" typedef struct Player { Vec position; } Player; -/* draw the player */ -void draw_player(Player *player); +void player_step(Player *player); +void player_draw(Player *player, Camera *camera); -#endif +#endif /* _DEF_PLAYER */ diff --git a/include/vec.h b/include/vec.h index 75abd93..2705f0c 100644 --- a/include/vec.h +++ b/include/vec.h @@ -13,4 +13,4 @@ void vec_add(Vec *vector, Vec force); /* apply the opposite of a force on a vector */ void vec_sub(Vec *vector, Vec force); -#endif +#endif /* _DEF_VEC */ diff --git a/src/camera.c b/src/camera.c new file mode 100644 index 0000000..4589d27 --- /dev/null +++ b/src/camera.c @@ -0,0 +1,5 @@ +#include "camera.h" + +void camera_step(Camera *camera) +{ +} diff --git a/src/level.c b/src/level.c new file mode 100644 index 0000000..0f1b7d8 --- /dev/null +++ b/src/level.c @@ -0,0 +1,11 @@ +#include "level.h" +#include "camera.h" + +void level_step(Level *level) +{ +} + +void level_draw(Level *level, Camera *camera) +{ + /* TODO */ +} diff --git a/src/main.c b/src/main.c index 828d2a8..9ccd4ff 100644 --- a/src/main.c +++ b/src/main.c @@ -1,8 +1,13 @@ #include #include +#include + +#include "main.h" #include "init.h" #include "vec.h" #include "player.h" +#include "level.h" +#include "camera.h" int main(void) { @@ -13,10 +18,38 @@ int main(void) .position = (Vec){32, 32} }; - dclear(C_WHITE); - draw_player(&player); - dupdate(); + /* create level */ + Level level = { + .width = 0, + .height = 0 + }; + + /* create camera */ + Camera camera = { + .follow = &player.position + }; + camera.position.x = player.position.x; + camera.position.y = player.position.y; + + /* main game loop */ + step_event(&player, &level, &camera); + draw_event(&player, &level, &camera); getkey(); return 1; } + +void step_event(Player *player, Level *level, Camera *camera) +{ + player_step(player); + level_step(level); + camera_step(camera); +} + +void draw_event(Player *player, Level *level, Camera *camera) +{ + dclear(C_WHITE); + level_draw(level, camera); + player_draw(player, camera); + dupdate(); +} diff --git a/src/player.c b/src/player.c index 65bfc35..89424a0 100644 --- a/src/player.c +++ b/src/player.c @@ -1,7 +1,13 @@ -#include "player.h" #include -void draw_player(Player *player) +#include "player.h" +#include "camera.h" + +void player_step(Player *player) +{ +} + +void player_draw(Player *player, Camera *camera) { dpixel(player->position.x, player->position.y, C_BLACK); }