4 #include "imgui_impl_sdl.h"
5 #include "imgui_impl_sdlrenderer.h"
12 #include "../services/AudioMixer.hxx"
21 ImVec2 windowSize(600, 600);
22 ImVec2 screenSize = ui::GetIO().DisplaySize;
31 const auto &layout = uiManager.getLayouts()[
"PauseMenuButtons"];
32 ui::SetNextWindowPos(ImVec2((screenSize.x - windowSize.x) / 2, (screenSize.y - windowSize.y) / 2));
33 ui::SetNextWindowSize(windowSize);
35 const ImVec2 buttonSize(200, 40);
36 const ImVec2 buttonOffset((windowSize.x - buttonSize.x) / 2, buttonSize.y / 2);
37 const ImVec2 widgetSize((windowSize.x / 2) - 8, 20);
39 ui::PushFont(layout.font);
40 ui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
41 ui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
43 ui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, buttonOffset.y));
46 ui::BeginCt(
"PauseMenu", &open,
47 ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar |
48 ImGuiWindowFlags_NoScrollWithMouse);
51 ui::Dummy({0.f, buttonSize.y});
52 ui::PushItemWidth(widgetSize.x);
56 auto textWidth = ImGui::CalcTextSize(
"Settings").x;
57 ImGui::SetCursorPosX((windowSize.x - textWidth) * 0.5f);
58 ui::LabelText(
"##settingslbl",
"Settings");
63 ui::LabelText(
"##vsynclbl",
"Enable VSync");
65 ui::CheckboxCt(
"##vsync", &settings.vSync);
70 ui::LabelText(
"##fullscreenmodelbl",
"Screen Mode");
72 std::vector<std::string> modes = {
"WINDOWED",
"BORDERLESS",
"FULLSCREEN"};
73 if (ui::BeginComboCt(
"##fullcreenmmode", modes[settings.fullScreenMode].c_str()))
75 for (
int i = 0; i < modes.size(); ++i)
77 const bool is_selected = (settings.fullScreenMode == i);
78 if (ui::Selectable(modes[i].c_str(), is_selected))
84 ui::SetItemDefaultFocus();
92 ui::LabelText(
"##screenreslbl",
"Resolution");
94 std::string currentResolution = std::to_string(settings.screenWidth) +
" x " + std::to_string(settings.screenHeight);
95 if (ui::BeginComboCt(
"##screenres", currentResolution.c_str()))
99 std::string resolution = std::to_string(mode->w) +
" x " + std::to_string(mode->h);
100 const bool is_selected = (settings.screenHeight == mode->h && settings.screenWidth == mode->w);
101 if (ui::Selectable(resolution.c_str(), is_selected))
108 ui::SetItemDefaultFocus();
116 ui::LabelText(
"##menulayoutlbl",
"Build Menu Pos");
118 int buildMenuLayoutIdx = (
int)uiManager.buildMenuLayout();
119 std::vector<const char *> layouts = {
"LEFT",
"RIGHT",
"TOP",
"BOTTOM"};
120 if (ui::BeginComboCt(
"##menulayoutcombo", layouts[buildMenuLayoutIdx]))
122 for (
size_t n = 0, size = layouts.size(); n < size; n++)
124 const bool is_selected = (buildMenuLayoutIdx == n);
125 if (ui::Selectable(layouts[n], is_selected))
127 settings.buildMenuPosition = layouts[n];
133 ui::SetItemDefaultFocus();
141 ui::LabelText(
"##musicvol",
"Music Volume");
143 float saveVolume = settings.musicVolume;
144 ui::SliderFloatCt(
" ", &settings.musicVolume, 0, 1,
"", ImGuiSliderFlags_NoText);
146 if (saveVolume != settings.musicVolume)
155 ui::LabelText(
"##sfxvol",
"Sound FX Volume");
157 float saveSFXVolume = settings.soundEffectsVolume;
158 ui::SliderFloatCt(
"sfx", &settings.soundEffectsVolume, 0, 1,
"", ImGuiSliderFlags_NoText);
160 if (saveSFXVolume != settings.soundEffectsVolume)
169 ImVec2 btnSize(windowSize.x / 4, 40);
171 ui::SetCursorPosY(windowSize.y - btnSize.y * 2);
172 ui::Dummy({btnSize.x / 2, 0.f});
174 if (ui::ButtonCt(
"OK", btnSize))
176 uiManager.closeMenu();
180 if (ui::ButtonCt(
"Cancel", btnSize))
182 uiManager.closeMenu();
186 if (ui::ButtonCt(
"Reset", btnSize))
188 uiManager.closeMenu();