X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame.c;h=9b35f27e8006413a821533f40f810836785d0394;hb=11365c9026fd2a19faddabf26b99bd7aa5c950e3;hp=e62d731504ffd8fd4032deadbbe60a73266cbf3f;hpb=c2caf1470ac560cdec113d232bc52fc336acc07d;p=nothing.git diff --git a/src/game.c b/src/game.c index e62d7315..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" @@ -25,6 +27,11 @@ typedef struct game_t { char *level_file_path; 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, @@ -44,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, @@ -60,7 +70,34 @@ game_t *create_game(const char *level_file_path, } strcpy(game->level_file_path, level_file_path); - game->camera = PUSH_LT(lt, create_camera_from_renderer(renderer), destroy_camera); + game->font = PUSH_LT( + lt, + create_sprite_font_from_file("fonts/charmap-oldschool.bmp", renderer), + destroy_sprite_font); + if (game->font == NULL) { + 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); } @@ -76,7 +113,6 @@ game_t *create_game(const char *level_file_path, } game->state = GAME_STATE_RUNNING; - game->lt = lt; return game; } @@ -99,6 +135,14 @@ int game_render(const game_t *game) return -1; } + 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; + } + return 0; } @@ -150,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; @@ -163,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; @@ -207,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;