diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2022-06-24 17:53:46 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2022-06-26 21:51:47 +0200 |
| commit | c401b7663d0854a7a3f5c35b6809faf65dc1fd66 (patch) | |
| tree | 68e2f9af0115bc48fcc34ba41ceb1461bccf5f1d /src/menu | |
| parent | 70bc98f96c3e4ae7a45ff095c5f539711aaf7fb1 (diff) | |
| download | rts-c401b7663d0854a7a3f5c35b6809faf65dc1fd66.tar.gz | |
Implement main menu
Diffstat (limited to 'src/menu')
| -rw-r--r-- | src/menu/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/menu/inc/menu.h | 15 | ||||
| -rw-r--r-- | src/menu/src/menu.c | 71 |
3 files changed, 91 insertions, 0 deletions
diff --git a/src/menu/CMakeLists.txt b/src/menu/CMakeLists.txt new file mode 100644 index 0000000..c4adb09 --- /dev/null +++ b/src/menu/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(menu + "src/menu.c" +) +target_include_directories(menu PUBLIC "inc") +target_link_libraries(menu PRIVATE camera game gfx gui system) diff --git a/src/menu/inc/menu.h b/src/menu/inc/menu.h new file mode 100644 index 0000000..4e92a3f --- /dev/null +++ b/src/menu/inc/menu.h @@ -0,0 +1,15 @@ +#ifndef MENU_H +#define MENU_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +int menu(void); + +#ifdef __cplusplus +} +#endif + +#endif /* MENU_H */ diff --git a/src/menu/src/menu.c b/src/menu/src/menu.c new file mode 100644 index 0000000..12da1a8 --- /dev/null +++ b/src/menu/src/menu.c @@ -0,0 +1,71 @@ +#include <menu.h> +#include <camera.h> +#include <game.h> +#include <gfx.h> +#include <gui.h> +#include <gui/button.h> +#include <system.h> +#include <stdbool.h> + +static void on_pressed(void *const arg) +{ + *(bool *)arg = true; +} + +int menu(void) +{ + struct camera cam = {0}; + struct gui_button play; + union peripheral p; + bool start = false; + + if (game_resinit()) + return -1; + + cursor_init(&cam.cursor); + gui_button_init(&play); + play.on_pressed = on_pressed; + play.arg = &start; + play.w = 140; + play.label.text = "Play"; + + { + const struct peripheral_cfg cfg = + { + .type = PERIPHERAL_TYPE_KEYBOARD_MOUSE + }; + + peripheral_init(&cfg, &p); + } + + while (!start) + { + system_loop(); + peripheral_update(&p); + camera_update(&cam, &p); + + play.common.x = screen_w / 2 - play.w / 2; + play.common.y = screen_h / 2 - 20; + play.label.common.x = play.w / 2 - 20; + play.label.common.y = 4; + + if (gui_update(&play.common, &p, &cam)) + return -1; + + rect_get_or_ret(r, -1); + rect_init(r); + r->w = screen_w; + r->h = screen_h; + rect_sort(r); + + if (p.common.exit) + return 0; + + if (gui_render(&play.common) + || cursor_render(&cam.cursor) + || gfx_draw()) + return -1; + } + + return game(NULL); +} |
