CPP-TOOLBOX
Loading...
Searching...
No Matches
input_graphics_sound_menu.hpp
Go to the documentation of this file.
1#ifndef INPUT_GRAPHICS_SOUND_MENU_HPP
2#define INPUT_GRAPHICS_SOUND_MENU_HPP
3
4#include <iostream>
5#include <vector>
6#include <functional>
7
8#include <glad/glad.h>
9#include <GLFW/glfw3.h>
10
12
13enum class UIState {
14 // TODO remove the dummy state and fill in with all the states you need
16
23
25};
26
39 private:
40 vertex_geometry::Rectangle settings_menu_rect = vertex_geometry::Rectangle(glm::vec3(0, 0, 0), 1.2, 1.2);
41 std::vector<vertex_geometry::Rectangle> settings_menu = weighted_subdivision(settings_menu_rect, {1, 3}, true);
42
43 SoundSystem &sound_system;
44 Batcher &batcher;
45 Configuration &configuration;
46 Window &window;
47 InputState &input_state; // only taking this because of the member function to check if key is valid, remove
48 // hopefully in future
49
50 Logger logger = Logger("input_graphics_sound_menu");
51
52 std::function<void()> on_hover = [&]() { sound_system.queue_sound(SoundType::UI_HOVER); };
53 std::function<void(const std::string)> dropdown_on_hover = [&](const std::string) {
54 sound_system.queue_sound(SoundType::UI_HOVER);
55 };
56
57 public:
58 bool enabled = true;
60
63
74
88 InputGraphicsSoundMenu(Window &window, InputState &input_state, Batcher &batcher, SoundSystem &sound_system,
89 Configuration &configuration)
90 : window(window), input_state(input_state), batcher(batcher), sound_system(sound_system),
91 configuration(configuration), main_menu_ui(create_main_menu_ui()), about_ui(create_about_ui()),
92 settings_menu_ui(create_settings_menu_ui()), player_settings_ui(create_player_settings_ui()),
93 input_settings_ui(create_input_settings_ui()), sound_settings_ui(create_sound_settings_ui()),
94 graphics_settings_ui(create_graphics_settings_ui()), advanced_settings_ui(create_advanced_settings_ui()) {
95
96 configuration.register_config_handler("graphics", "resolution",
97 [&](const std::string resolution) { window.set_resolution(resolution); });
98
99 configuration.register_config_handler("graphics", "fullscreen",
100 [&](const std::string value) { window.set_fullscreen_by_on_off(value); });
101
102 configuration.register_config_handler("graphics", "wireframe", [&](const std::string value) {
103 if (value == "on") {
104 window.enable_wireframe_mode();
105 } else if (value == "off") {
106 window.disable_wireframe_mode();
107 }
108 });
109
110 configuration.apply_config_logic();
111
112 logger.info("successfully initialized");
113 };
114
115 private:
125 std::vector<UIState> get_ui_dependencies(const UIState &ui_state) {
126 switch (ui_state) {
128 return {};
130 return {};
132 return {UIState::SETTINGS_MENU};
134 return {UIState::SETTINGS_MENU};
136 return {UIState::SETTINGS_MENU};
138 return {UIState::SETTINGS_MENU};
140 return {UIState::SETTINGS_MENU};
141 case UIState::ABOUT:
142 return {};
143 break;
144 }
145 return {};
146 }
147
158 glm::vec2 get_ndc_mouse_pos(GLFWwindow *window, double xpos, double ypos) {
159 int width, height;
160 glfwGetWindowSize(window, &width, &height);
161
162 return {(2.0f * xpos) / width - 1.0f, 1.0f - (2.0f * ypos) / height};
163 }
164
172 glm::vec2 aspect_corrected_ndc_mouse_pos(const glm::vec2 &ndc_mouse_pos, float x_scale) {
173 return {ndc_mouse_pos.x * x_scale, ndc_mouse_pos.y};
174 }
175
176 public:
189 void process_and_queue_render_menu(Window &window, InputState &input_state, IUIRenderSuite &ui_render_suite) {
190 auto ndc_mouse_pos =
191 get_ndc_mouse_pos(window.glfw_window, input_state.mouse_position_x, input_state.mouse_position_y);
192 auto acnmp = aspect_corrected_ndc_mouse_pos(ndc_mouse_pos, window.width_px / (float)window.height_px);
193
194 std::vector<UIState> uis_to_render = {curr_state};
195 for (const auto &ui_state : get_ui_dependencies(curr_state)) {
196 uis_to_render.push_back(ui_state);
197 }
198
199 for (const auto &ui_state : uis_to_render) {
200 if (game_state_to_ui.find(ui_state) != game_state_to_ui.end()) {
201 UI &selected_ui = game_state_to_ui.at(ui_state);
202
204 acnmp, selected_ui, ui_render_suite, input_state.get_keys_just_pressed_this_tick(),
205 input_state.is_just_pressed(EKey::BACKSPACE), input_state.is_just_pressed(EKey::ENTER),
206 input_state.is_just_pressed(EKey::LEFT_MOUSE_BUTTON));
207 }
208 }
209 }
210
211 private:
220 UI create_main_menu_ui() {
221
222 std::function<void()> on_program_start = [&]() {
223 sound_system.queue_sound(SoundType::UI_CLICK);
224 enabled = false;
225 };
226 std::function<void()> on_click_settings = [&]() {
227 sound_system.queue_sound(SoundType::UI_CLICK);
229 };
230 std::function<void()> on_click_about = [&]() {
231 sound_system.queue_sound(SoundType::UI_CLICK);
233 };
234 std::function<void()> on_game_quit = [&]() {
235 sound_system.queue_sound(SoundType::UI_CLICK);
236 glfwSetWindowShouldClose(window.glfw_window, GLFW_TRUE);
237 };
238 std::function<void()> on_back_clicked = [&]() {
239 sound_system.queue_sound(SoundType::UI_CLICK);
241 };
242
243 // UIRenderSuiteImpl ui_render_suite(batcher);
244
245 // main menu ui
246 UI main_menu_ui(0, batcher.absolute_position_with_colored_vertex_shader_batcher.object_id_generator);
247 main_menu_ui.add_textbox("Welcome to the program.", 0, 0.75, 1, 0.25, colors::grey);
248
249 vertex_geometry::Grid grid(4, 1, 0.5, 0.5);
250 auto frag_time_rect = grid.get_at(0, 0);
251 main_menu_ui.add_clickable_textbox(on_program_start, on_hover, "RESUME", frag_time_rect, colors::darkgreen,
253
254 auto settings_rect = grid.get_at(0, 1);
255 main_menu_ui.add_clickable_textbox(on_click_settings, on_hover, "SETTINGS", settings_rect, colors::darkblue,
257
258 auto credits_rect = grid.get_at(0, 2);
259 main_menu_ui.add_clickable_textbox(on_click_about, on_hover, "ABOUT", credits_rect, colors::darkblue,
261
262 auto exit_rect = grid.get_at(0, 3);
263 main_menu_ui.add_clickable_textbox(on_game_quit, on_hover, "QUIT", exit_rect, colors::darkred, colors::red);
264
265 return main_menu_ui;
266 }
267
276 UI create_about_ui() {
277 std::function<void()> on_back_clicked = [&]() { curr_state = {UIState::MAIN_MENU}; };
278
279 UI about_ui(0, batcher.absolute_position_with_colored_vertex_shader_batcher.object_id_generator);
280 std::function<void(std::string)> on_confirm = [&](std::string contents) { std::cout << contents << std::endl; };
281
282 about_ui.add_textbox(
284 "this program was created with the toolbox engine, this engine is an open source collection of tools "
285 "which come together to form an engine to make games using c++, it's designed for programmers and just "
286 "gives you tools to do stuff faster in that realm instead of an all encompassing solution. Learn more "
287 "about it at cpptbx.cuppajoeman.com and join the discord."),
288 0, 0, 1, 1, colors::grey18);
289
290 about_ui.add_clickable_textbox(on_back_clicked, on_hover, "back to main menu", -0.65, -0.65, 0.5, 0.5,
292
293 return about_ui;
294 }
295
306 UI create_settings_menu_ui() {
307 UI settings_menu_ui(0, batcher.absolute_position_with_colored_vertex_shader_batcher.object_id_generator);
308
309 vertex_geometry::Grid top_row_grid(1, 5, settings_menu.at(0));
310
311 std::function<void()> on_back_clicked = [&]() {
312 sound_system.queue_sound(SoundType::UI_CLICK);
314 };
315 std::function<void()> on_apply_clicked = [&]() {
316 sound_system.queue_sound(SoundType::UI_CLICK);
317 configuration.apply_config_logic();
318 };
319 std::function<void()> on_save_clicked = [&]() {
320 sound_system.queue_sound(SoundType::UI_CLICK);
321 configuration.save_to_file();
322 };
323 std::function<void()> settings_on_click = [&]() { sound_system.queue_sound(SoundType::UI_CLICK); };
324
325 std::function<void()> player_on_click = [&]() {
326 sound_system.queue_sound(SoundType::UI_CLICK);
328 };
329 auto player_rect = top_row_grid.get_at(0, 0);
330 settings_menu_ui.add_clickable_textbox(player_on_click, on_hover, "player", player_rect, colors::darkblue,
332
333 std::function<void()> input_on_click = [&]() {
334 sound_system.queue_sound(SoundType::UI_CLICK);
336 };
337 auto input_rect = top_row_grid.get_at(1, 0);
338 settings_menu_ui.add_clickable_textbox(input_on_click, on_hover, "input", input_rect, colors::darkblue,
340
341 std::function<void()> sound_on_click = [&]() {
342 sound_system.queue_sound(SoundType::UI_CLICK);
344 };
345 auto sound_rect = top_row_grid.get_at(2, 0);
346 settings_menu_ui.add_clickable_textbox(sound_on_click, on_hover, "sound", sound_rect, colors::darkblue,
348
349 std::function<void()> graphics_on_click = [&]() {
350 sound_system.queue_sound(SoundType::UI_CLICK);
352 };
353 auto graphics_rect = top_row_grid.get_at(3, 0);
354 settings_menu_ui.add_clickable_textbox(graphics_on_click, on_hover, "graphics", graphics_rect, colors::darkblue,
356
357 std::function<void()> network_on_click = [&]() {
358 sound_system.queue_sound(SoundType::UI_CLICK);
360 };
361 auto network_rect = top_row_grid.get_at(4, 0);
362 settings_menu_ui.add_clickable_textbox(network_on_click, on_hover, "network", network_rect, colors::darkblue,
364
365 vertex_geometry::Rectangle main_settings_rect = settings_menu.at(1);
366 settings_menu_ui.add_colored_rectangle(main_settings_rect, colors::grey);
367
368 vertex_geometry::Rectangle go_back_rect = vertex_geometry::create_rectangle_from_corners(
369 glm::vec3(-1, -0.75, 0), glm::vec3(-0.75, -0.75, 0), glm::vec3(-1, -1, 0), glm::vec3(-0.75, -1, 0));
370 settings_menu_ui.add_clickable_textbox(on_back_clicked, on_hover, "BACK", go_back_rect, colors::darkred,
372
373 vertex_geometry::Rectangle apply_rect = vertex_geometry::create_rectangle_from_corners(
374 glm::vec3(1, -0.75, 0), glm::vec3(0.75, -0.75, 0), glm::vec3(1, -1, 0), glm::vec3(0.75, -1, 0));
375 settings_menu_ui.add_clickable_textbox(on_apply_clicked, on_hover, "APPLY", apply_rect, colors::darkgreen,
377
378 vertex_geometry::Rectangle save_rect = vertex_geometry::slide_rectangle(apply_rect, -1, 0);
379
380 settings_menu_ui.add_clickable_textbox(on_save_clicked, on_hover, "SAVE", save_rect, colors::darkgreen,
382
383 vertex_geometry::Grid main_settings_grid(7, 3, main_settings_rect);
384
385 return settings_menu_ui;
386 }
387
396 UI create_player_settings_ui() {
397
398 std::function<void(std::string)> on_confirm = [&](std::string contents) { std::cout << contents << std::endl; };
399
400 UI player_settings_ui(-0.1, batcher.absolute_position_with_colored_vertex_shader_batcher.object_id_generator);
401
402 vertex_geometry::Rectangle main_settings_rect = settings_menu.at(1);
403 vertex_geometry::Grid main_settings_grid(7, 3, main_settings_rect);
404
405 std::function<void(std::string)> username_on_confirm = [](std::string s) {};
406 player_settings_ui.add_textbox("username", main_settings_grid.get_at(0, 0), colors::maroon);
407 player_settings_ui.add_input_box(on_confirm, "username", main_settings_grid.get_at(2, 0), colors::orange,
409 player_settings_ui.add_textbox("crosshair", main_settings_grid.get_at(0, 1), colors::maroon);
410
411 vertex_geometry::Grid input_settings_grid(10, 3, main_settings_rect);
412
413 return player_settings_ui;
414 }
415
426 UI create_input_settings_ui() {
427
428 vertex_geometry::Rectangle main_settings_rect = settings_menu.at(1);
429 vertex_geometry::Grid main_settings_grid(7, 3, main_settings_rect);
430
431 vertex_geometry::Grid input_settings_grid(11, 3, main_settings_rect);
432 UI input_settings_ui(-0.1, batcher.absolute_position_with_colored_vertex_shader_batcher.object_id_generator);
433 input_settings_ui.add_textbox("mouse sensitivity", input_settings_grid.get_at(0, 0), colors::maroon);
434
435 std::function<void(std::string)> sens_on_click = [this](std::string option) {
436 sound_system.queue_sound(SoundType::UI_CLICK);
437 configuration.set_value("input", "mouse_sensitivity", option);
438 };
439
440 input_settings_ui.add_input_box(sens_on_click, "1", input_settings_grid.get_at(2, 0), colors::grey,
442
443 std::function<void(std::string)> on_confirm = [&](std::string contents) { std::cout << contents << std::endl; };
444
445 input_settings_ui.add_textbox("fire", input_settings_grid.get_at(0, 1), colors::maroon);
446 input_settings_ui.add_input_box(on_confirm, "lmb", input_settings_grid.get_at(2, 1), colors::grey,
448
449 input_settings_ui.add_textbox("jump", input_settings_grid.get_at(0, 2), colors::maroon);
450 input_settings_ui.add_input_box(on_confirm, "space", input_settings_grid.get_at(2, 2), colors::grey,
452
453 std::function<std::function<void(std::string)>(std::string)> create_key_on_confirm_function =
454 [&](std::string key_str) {
455 return [this, key_str](std::string input_value) {
456 if (input_state.is_valid_key_string(input_value)) {
457 configuration.set_value("input", key_str, input_value);
458 sound_system.queue_sound(SoundType::UI_CLICK);
459 } else {
460 logger.warn("{} is not a valid key string, not setting it in the config, use a proper value.",
461 input_value);
462 }
463 };
464 };
465
466 input_settings_ui.add_textbox("move forward", input_settings_grid.get_at(0, 3), colors::maroon);
467 input_settings_ui.add_input_box(create_key_on_confirm_function("forward"),
468 configuration.get_value("input", "forward").value_or("w"),
469 input_settings_grid.get_at(2, 3), colors::grey, colors::lightgrey);
470
471 input_settings_ui.add_textbox("move backward", input_settings_grid.get_at(0, 4), colors::maroon);
472 input_settings_ui.add_input_box(create_key_on_confirm_function("back"), "s", input_settings_grid.get_at(2, 4),
474
475 input_settings_ui.add_textbox("move left", input_settings_grid.get_at(0, 5), colors::maroon);
476 input_settings_ui.add_input_box(create_key_on_confirm_function("left"), "a", input_settings_grid.get_at(2, 5),
478
479 input_settings_ui.add_textbox("move right", input_settings_grid.get_at(0, 6), colors::maroon);
480 input_settings_ui.add_input_box(create_key_on_confirm_function("right"), "d", input_settings_grid.get_at(2, 6),
482
483 input_settings_ui.add_textbox("move up", input_settings_grid.get_at(0, 7), colors::maroon);
484 input_settings_ui.add_input_box(create_key_on_confirm_function("left"), " ", input_settings_grid.get_at(2, 7),
486
487 input_settings_ui.add_textbox("move down", input_settings_grid.get_at(0, 8), colors::maroon);
488 input_settings_ui.add_input_box(create_key_on_confirm_function("down"), "left_shift",
489 input_settings_grid.get_at(2, 8), colors::grey, colors::lightgrey);
490
491 input_settings_ui.add_textbox("slow move", input_settings_grid.get_at(0, 9), colors::maroon);
492 input_settings_ui.add_input_box(create_key_on_confirm_function("slow_move"), "left_control",
493 input_settings_grid.get_at(2, 9), colors::grey, colors::lightgrey);
494
495 input_settings_ui.add_textbox("fast move", input_settings_grid.get_at(0, 10), colors::maroon);
496 input_settings_ui.add_input_box(create_key_on_confirm_function("fast_move"), "tab",
497 input_settings_grid.get_at(2, 10), colors::grey, colors::lightgrey);
498
499 return input_settings_ui;
500 }
501
510 UI create_sound_settings_ui() {
511
512 vertex_geometry::Rectangle main_settings_rect = settings_menu.at(1);
513 vertex_geometry::Grid main_settings_grid(7, 3, main_settings_rect);
514
515 vertex_geometry::Grid sound_settings_grid(1, 3, main_settings_rect);
516 UI sound_settings_ui(-0.1, batcher.absolute_position_with_colored_vertex_shader_batcher.object_id_generator);
517 sound_settings_ui.add_textbox("volume", sound_settings_grid.get_at(0, 0), colors::maroon);
518 return sound_settings_ui;
519 }
520
521 int get_index_or_default(const std::string &value, const std::vector<std::string> &vec) {
522 auto it = std::find(vec.begin(), vec.end(), value);
523 return (it != vec.end()) ? std::distance(vec.begin(), it) : 0;
524 }
525
537 UI create_graphics_settings_ui() {
538
539 std::vector<std::string> resolutions = get_available_resolutions("16:9");
540 // NOTE: on mac this returns empty so for compliation purposes I'm just going to hack a fake value in
541 if (resolutions.empty())
542 resolutions = {"1920x1080"};
543
544 std::function<void(std::string)> on_confirm = [&](std::string contents) { std::cout << contents << std::endl; };
545
546 vertex_geometry::Rectangle main_settings_rect = settings_menu.at(1);
547 vertex_geometry::Grid main_settings_grid(7, 3, main_settings_rect);
548
549 std::function<void()> on_click_settings = [&]() { curr_state = UIState::PROGRAM_SETTINGS; };
550
551 std::vector<std::string> on_off_options = {"on", "off"};
552
553 vertex_geometry::Grid graphics_settings_grid(10, 3, main_settings_rect);
554 UI graphics_settings_ui(-0.1, batcher.absolute_position_with_colored_vertex_shader_batcher.object_id_generator);
555
556 std::vector<std::string> options = resolutions;
557 std::vector<std::function<void()>> option_on_clicks(options.size(), []() {});
558
559 std::function<void(std::string)> empty_on_click = [](std::string option) { std::cout << option << std::endl; };
560
561 std::function<void(std::string)> resolution_dropdown_on_click = [this](std::string option) {
562 sound_system.queue_sound(SoundType::UI_CLICK);
563 size_t x_pos = option.find('x');
564 unsigned int width, height;
565 if (x_pos != std::string::npos) {
566 width = std::stoi(option.substr(0, x_pos));
567 height = std::stoi(option.substr(x_pos + 1));
568 // the above verifies that indeed the things are numbers which means its valid I think... probably not
569 // needed since the options are already
570 configuration.set_value("graphics", "resolution", option);
571 } else {
572 throw std::invalid_argument("Input string is not in the correct format (e.g. 1280x960)");
573 }
574 };
575
576 int dropdown_option_idx;
577
578 dropdown_option_idx =
579 get_index_or_default(configuration.get_value("graphics", "resolution").value_or("1280x720"), options);
580 graphics_settings_ui.add_textbox("resolution", graphics_settings_grid.get_at(0, 0), colors::maroon);
581
582 graphics_settings_ui.add_dropdown(on_click_settings, on_hover, dropdown_option_idx,
583 graphics_settings_grid.get_at(2, 0), colors::orange, colors::orangered,
584 options, resolution_dropdown_on_click, dropdown_on_hover);
585
586 std::function<void(std::string)> fullscreen_on_click = [this](std::string option) {
587 sound_system.queue_sound(SoundType::UI_CLICK);
588 configuration.set_value("graphics", "fullscreen", option);
589 };
590
591 dropdown_option_idx =
592 get_index_or_default(configuration.get_value("graphics", "fullscreen").value_or("off"), on_off_options);
593 graphics_settings_ui.add_textbox("fullscreen", graphics_settings_grid.get_at(0, 1), colors::maroon);
594 graphics_settings_ui.add_dropdown(on_click_settings, on_hover, dropdown_option_idx,
595 graphics_settings_grid.get_at(2, 1), colors::orange, colors::orangered,
596 on_off_options, fullscreen_on_click, dropdown_on_hover);
597
598 std::function<void(std::string)> wireframe_on_click = [this](std::string option) {
599 sound_system.queue_sound(SoundType::UI_CLICK);
600 configuration.set_value("graphics", "wireframe", option);
601 };
602
603 dropdown_option_idx =
604 get_index_or_default(configuration.get_value("graphics", "wireframe").value_or("off"), on_off_options);
605 graphics_settings_ui.add_textbox("wireframe", graphics_settings_grid.get_at(0, 2), colors::maroon);
606 graphics_settings_ui.add_dropdown(on_click_settings, on_hover, dropdown_option_idx,
607 graphics_settings_grid.get_at(2, 2), colors::orange, colors::orangered,
608 on_off_options, wireframe_on_click, dropdown_on_hover);
609
610 std::function<void(std::string)> fov_on_confirm = [&](std::string option) {
611 configuration.set_value("graphics", "field_of_view", option);
612 };
613
614 graphics_settings_ui.add_textbox("field of view", graphics_settings_grid.get_at(0, 3), colors::maroon);
615 graphics_settings_ui.add_input_box(
616 fov_on_confirm, configuration.get_value("graphics", "field_of_view").value_or("degrees (30-160 limit)"),
617 graphics_settings_grid.get_at(2, 3), colors::grey, colors::lightgrey);
618
619 std::function<void(std::string)> max_fps_on_confirm = [&](std::string option) {
620 configuration.set_value("graphics", "max_fps", option);
621 };
622
623 graphics_settings_ui.add_textbox("max fps", graphics_settings_grid.get_at(0, 4), colors::maroon);
624 graphics_settings_ui.add_input_box(max_fps_on_confirm,
625 configuration.get_value("graphics", "max_fps").value_or("120"),
626 graphics_settings_grid.get_at(2, 4), colors::grey, colors::lightgrey);
627
628 std::function<void(std::string)> show_fps_on_click = [&](std::string option) {
629 configuration.set_value("graphics", "show_fps", option);
630 };
631
632 graphics_settings_ui.add_textbox("show fps", graphics_settings_grid.get_at(0, 5), colors::maroon);
633 graphics_settings_ui.add_dropdown(on_click_settings, on_hover, dropdown_option_idx,
634 graphics_settings_grid.get_at(2, 5), colors::orange, colors::orangered,
635 on_off_options, show_fps_on_click, dropdown_on_hover);
636
637 std::function<void(std::string)> show_pos_on_click = [&](std::string option) {
638 configuration.set_value("graphics", "show_pos", option);
639 };
640
641 graphics_settings_ui.add_textbox("show pos", graphics_settings_grid.get_at(0, 6), colors::maroon);
642 graphics_settings_ui.add_dropdown(on_click_settings, on_hover, dropdown_option_idx,
643 graphics_settings_grid.get_at(2, 6), colors::orange, colors::orangered,
644 on_off_options, show_pos_on_click, dropdown_on_hover);
645
647 }
648
656 UI create_advanced_settings_ui() {
657
658 vertex_geometry::Rectangle main_settings_rect = settings_menu.at(1);
659 vertex_geometry::Grid main_settings_grid(7, 3, main_settings_rect);
660
661 vertex_geometry::Grid advanced_settings_grid(3, 3, main_settings_rect);
662 UI advanced_settings_ui(-0.1, batcher.absolute_position_with_colored_vertex_shader_batcher.object_id_generator);
663 advanced_settings_ui.add_textbox("display tick time expendature", advanced_settings_grid.get_at(0, 0),
665 advanced_settings_ui.add_textbox("display current ping", advanced_settings_grid.get_at(0, 1), colors::maroon);
666 advanced_settings_ui.add_textbox("display movement dial", advanced_settings_grid.get_at(0, 2), colors::maroon);
667
669 }
670};
671
672#endif // INPUT_GRAPHICS_SOUND_MENU_HPP
Class to parse a configuration file and apply logic based on section-key pairs.
Definition config_file_parser.hpp:17
Interface for UI rendering operations.
Definition ui.hpp:329
bool enabled
Definition input_graphics_sound_menu.hpp:58
InputGraphicsSoundMenu(Window &window, InputState &input_state, Batcher &batcher, SoundSystem &sound_system, Configuration &configuration)
Constructs an InputGraphicsSoundMenu and initializes all UIs and configuration handlers.
Definition input_graphics_sound_menu.hpp:88
std::map< UIState, UI & > game_state_to_ui
Definition input_graphics_sound_menu.hpp:64
UI main_menu_ui
Definition input_graphics_sound_menu.hpp:61
UI graphics_settings_ui
Definition input_graphics_sound_menu.hpp:62
UI player_settings_ui
Definition input_graphics_sound_menu.hpp:61
UI about_ui
Definition input_graphics_sound_menu.hpp:61
UI advanced_settings_ui
Definition input_graphics_sound_menu.hpp:62
UI input_settings_ui
Definition input_graphics_sound_menu.hpp:61
UI sound_settings_ui
Definition input_graphics_sound_menu.hpp:61
UIState curr_state
Definition input_graphics_sound_menu.hpp:59
void process_and_queue_render_menu(Window &window, InputState &input_state, IUIRenderSuite &ui_render_suite)
Processes and queues the rendering of all active menu UIs.
Definition input_graphics_sound_menu.hpp:189
UI settings_menu_ui
Definition input_graphics_sound_menu.hpp:61
Definition input_state.hpp:198
Definition logger.hpp:22
Definition sound_system.hpp:28
Definition ui.hpp:168
Definition window.hpp:27
Definition vertex_geometry.hpp:126
UIState
Definition input_graphics_sound_menu.hpp:13
@ SETTINGS_MENU
Definition input_graphics_sound_menu.hpp:17
@ ABOUT
Definition input_graphics_sound_menu.hpp:24
@ SOUND_SETTINGS
Definition input_graphics_sound_menu.hpp:20
@ INPUT_SETTINGS
Definition input_graphics_sound_menu.hpp:19
@ ADVANCED_SETTINGS
Definition input_graphics_sound_menu.hpp:22
@ MAIN_MENU
Definition input_graphics_sound_menu.hpp:15
@ GRAPHICS_SETTINGS
Definition input_graphics_sound_menu.hpp:21
@ PROGRAM_SETTINGS
Definition input_graphics_sound_menu.hpp:18
@ s
Definition input_state.hpp:45
@ ENTER
Definition input_state.hpp:124
@ BACKSPACE
Definition input_state.hpp:126
@ LEFT_MOUSE_BUTTON
Definition input_state.hpp:158
glm::vec3 maroon
Definition colors.hpp:469
glm::vec3 blue
Definition colors.hpp:33
glm::vec3 orangered
Definition colors.hpp:518
glm::vec3 lightgrey
Definition colors.hpp:430
glm::vec3 darkred
Definition colors.hpp:109
glm::vec3 darkgreen
Definition colors.hpp:90
glm::vec3 grey
Definition colors.hpp:270
glm::vec3 red
Definition colors.hpp:568
glm::vec3 darkblue
Definition colors.hpp:82
glm::vec3 seagreen
Definition colors.hpp:590
glm::vec3 green
Definition colors.hpp:264
glm::vec3 grey18
Definition colors.hpp:289
glm::vec3 orange
Definition colors.hpp:513
const std::vector< std::string > on_off_options
Definition toolbox_engine.hpp:53
std::string add_newlines_to_long_string(const std::string &text, size_t max_chars_per_line)
Insert newlines into long strings.
Definition text_utils.cpp:63
Rectangle slide_rectangle(const Rectangle &rect, int x_offset, int y_offset)
Definition vertex_geometry.cpp:437
Rectangle create_rectangle_from_corners(const glm::vec3 top_left, const glm::vec3 top_right, const glm::vec3 bottom_left, const glm::vec3 bottom_right)
Definition vertex_geometry.cpp:154
void process_and_queue_render_ui(glm::vec2 ndc_mouse_pos, UI &curr_ui, IUIRenderSuite &ui_render_suite, const std::vector< std::string > &key_strings_just_pressed, bool delete_action_just_pressed, bool confirm_action_just_pressed, bool mouse_just_clicked)
Definition ui.cpp:711
std::vector< std::string > get_available_resolutions(const std::optional< std::string > &aspect_ratio)
Definition window.cpp:357