From 5ead22e91fe1165f3a9208c0d1c965b3edd104be Mon Sep 17 00:00:00 2001 From: zlago Date: Sun, 29 Sep 2024 22:45:59 +0200 Subject: player entity --- src/main.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index eccd351..0e53a68 100644 --- a/src/main.c +++ b/src/main.c @@ -13,6 +13,8 @@ #include "incbin.h" #include "libplum.h" +#include "main.h" + SDL_Window *window = NULL; SDL_Renderer *renderer = NULL; @@ -30,6 +32,11 @@ SDL_Scancode keybinds[] = { SDL_SCANCODE_S, }; +struct entity player[1] = {0}; + +struct entity *player_new(void); +int player_property(struct entity *const restrict entity, char const *const restrict property, char const *const restrict value); + int main(int argc, char **argv) { if (SDL_Init(INIT_SUBSYSTEMS)) { fprintf(stderr, "failed to initialize SDL2: %s\n", SDL_GetError()); @@ -59,6 +66,7 @@ int main(int argc, char **argv) { free(a); struct blob map = res_get_map("untitled"); tilemap = tilemap_load(map.data, map.size); + //memmem(map.data + tilemap->byte_count, map.size - tilemap->byte_count, (char []) {0, 0}, 2); printf("load_tilemap %p\n", (void *) tilemap); SDL_SetRenderTarget(renderer, NULL); } @@ -83,6 +91,9 @@ int main(int argc, char **argv) { SDL_ShowWindow(window); int x = 0, y = 0; + player_new(); + player_property(player, "x", "40"); + player_property(player, "y", "40"); while (1) { SDL_Event evt; while (SDL_PollEvent(&evt)) { @@ -183,13 +194,18 @@ int main(int argc, char **argv) { SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); SDL_RenderClear(renderer); - x += input_right(input_now) - input_left(input_now); - y += input_down(input_now) - input_up(input_now); + //SDL_RenderCopy(renderer, tilemap->wang_tileset, &(SDL_Rect) {0, 0, 128, 90}, &(SDL_Rect) {0, 0, 128, 90}); + player[0].update(player); + + //x += input_right(input_now) - input_left(input_now); + //y += input_down(input_now) - input_up(input_now); + x = (player[0].x / 16) - (WINDOW_WIDTH / 2); + y = (player[0].y / 16) - (WINDOW_HEIGHT / 2); if (x < 0) {x = 0;} else if (x + WINDOW_WIDTH > tilemap->width * 8) {x = tilemap->width * 8 - WINDOW_WIDTH;} if (y < 0) {y = 0;} else if (y + WINDOW_HEIGHT > tilemap->height * 8) {y = tilemap->height * 8 - WINDOW_HEIGHT;} - //SDL_RenderCopy(renderer, tilemap->wang_tileset, &(SDL_Rect) {0, 0, 128, 90}, &(SDL_Rect) {0, 0, 128, 90}); tilemap_background(tilemap, x, y, WINDOW_WIDTH, WINDOW_HEIGHT); + player[0].draw(player, x, y); tilemap_foreground(tilemap, x, y, WINDOW_WIDTH, WINDOW_HEIGHT); //SDL_RenderCopy(renderer, res_get_texture("meow").data, &(SDL_Rect) {0, 0, 128, 90}, &(SDL_Rect) {0, 0, 128, 90}); // then we wait for the next video frame -- cgit 1.4.1-2-gfad0