X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame.c;h=9b35f27e8006413a821533f40f810836785d0394;hb=11365c9026fd2a19faddabf26b99bd7aa5c950e3;hp=a659e0bae50d75f580c42cfaed4d7d49075af5c9;hpb=16e4f2123d07e387efa690cf082e71c59e3a64f0;p=nothing.git diff --git a/src/game.c b/src/game.c index a659e0ba..9b35f27e 100644 --- a/src/game.c +++ b/src/game.c @@ -4,6 +4,8 @@ #include #include "game.h" +#include "game/debug_tree.h" +#include "game/edit_field.h" #include "game/level.h" #include "game/sound_samples.h" #include "system/error.h" @@ -26,6 +28,10 @@ typedef struct game_t { sound_samples_t *sound_samples; camera_t *camera; sprite_font_t *font; + debug_tree_t *debug_tree; + /* TODO: remove edit_field from game when edit_field_t functionality is fully implemented */ + edit_field_t *edit_field; + SDL_Renderer *renderer; } game_t; game_t *create_game(const char *level_file_path, @@ -45,6 +51,9 @@ game_t *create_game(const char *level_file_path, throw_error(ERROR_TYPE_LIBC); RETURN_LT(lt, NULL); } + game->lt = lt; + + game->renderer = renderer; game->level = PUSH_LT( lt, @@ -69,6 +78,25 @@ game_t *create_game(const char *level_file_path, RETURN_LT(lt, NULL); } + game->debug_tree = PUSH_LT( + lt, + create_debug_tree(game->font), + destroy_debug_tree); + if (game->debug_tree == NULL) { + RETURN_LT(lt, NULL); + } + + game->edit_field = PUSH_LT( + lt, + create_edit_field( + game->font, + vec(5.0f, 5.0f), + color(1.0f, 1.0f, 1.0f, 1.0f)), + destroy_edit_field); + if (game->edit_field == NULL) { + RETURN_LT(lt, NULL); + } + game->camera = PUSH_LT(lt, create_camera(renderer, game->font), destroy_camera); if (game->camera == NULL) { RETURN_LT(lt, NULL); @@ -85,7 +113,6 @@ game_t *create_game(const char *level_file_path, } game->state = GAME_STATE_RUNNING; - game->lt = lt; return game; } @@ -108,7 +135,11 @@ int game_render(const game_t *game) return -1; } - if (camera_render_text(game->camera, "hello world", vec(8.0f, 4.0f), color(1.0f, 0.0f, 0.0f, 0.5f), vec(-30.0f, 0.0f)) < 0) { + if (debug_tree_render(game->debug_tree, game->renderer) < 0) { + return -1; + } + + if (edit_field_render(game->edit_field, game->renderer, vec(100.0f, 100.0f)) < 0) { return -1; } @@ -163,6 +194,7 @@ static int game_event_pause(game_t *game, const SDL_Event *event) case SDLK_l: camera_toggle_debug_mode(game->camera); level_toggle_debug_mode(game->level); + debug_tree_toggle_enabled(game->debug_tree); break; } break; @@ -176,6 +208,10 @@ static int game_event_running(game_t *game, const SDL_Event *event) assert(game); assert(event); + if (edit_field_handle_event(game->edit_field, event) < 0) { + return -1; + } + switch (event->type) { case SDL_QUIT: game->state = GAME_STATE_QUIT; @@ -220,6 +256,7 @@ static int game_event_running(game_t *game, const SDL_Event *event) case SDLK_l: camera_toggle_debug_mode(game->camera); level_toggle_debug_mode(game->level); + debug_tree_toggle_enabled(game->debug_tree); break; } break;