Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SettingsMenu Struct Reference

#include <SettingsMenu.hxx>

+ Inheritance diagram for SettingsMenu:
+ Collaboration diagram for SettingsMenu:

Public Member Functions

 SettingsMenu ()
 
 ~SettingsMenu ()
 
virtual void draw () const override
 
- Public Member Functions inherited from GameMenu
virtual ~GameMenu ()=default
 
virtual bool isMouseHovered () const
 
virtual void closeSubmenus ()
 

Additional Inherited Members

- Public Types inherited from GameMenu
using Ptr = std::shared_ptr< GameMenu >
 

Detailed Description

Definition at line 6 of file SettingsMenu.hxx.

Constructor & Destructor Documentation

◆ SettingsMenu()

SettingsMenu::SettingsMenu ( )

Definition at line 17 of file SettingsMenu.cxx.

17 {}

◆ ~SettingsMenu()

SettingsMenu::~SettingsMenu ( )

Definition at line 198 of file SettingsMenu.cxx.

198 {}

Member Function Documentation

◆ draw()

void SettingsMenu::draw ( ) const
overridevirtual

Reimplemented from GameMenu.

Definition at line 19 of file SettingsMenu.cxx.

20 {
21  ImVec2 windowSize(600, 600);
22  ImVec2 screenSize = ui::GetIO().DisplaySize;
23 
24  // dont remove yet, need for tuning
25  //bool show = true;
26  //ui::ShowDemoWindow(&show);
27 
28  auto &uiManager = UIManager::instance();
29  auto &settings = Settings::instance();
30 
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);
34 
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);
38 
39  ui::PushFont(layout.font);
40  ui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
41  ui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
42  //ui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(buttonOffset.x, 0));
43  ui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, buttonOffset.y));
44 
45  bool open = true;
46  ui::BeginCt("PauseMenu", &open,
47  ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar |
48  ImGuiWindowFlags_NoScrollWithMouse);
49 
50  // empty header
51  ui::Dummy({0.f, buttonSize.y});
52  ui::PushItemWidth(widgetSize.x);
53 
54  // header label
55  {
56  auto textWidth = ImGui::CalcTextSize("Settings").x;
57  ImGui::SetCursorPosX((windowSize.x - textWidth) * 0.5f);
58  ui::LabelText("##settingslbl", "Settings");
59  }
60 
61  // vsync label + checkbox
62  {
63  ui::LabelText("##vsynclbl", "Enable VSync");
64  ui::SameLine();
65  ui::CheckboxCt("##vsync", &settings.vSync);
66  }
67 
68  // sceen mode label + combobox
69  {
70  ui::LabelText("##fullscreenmodelbl", "Screen Mode");
71  ui::SameLine();
72  std::vector<std::string> modes = {"WINDOWED", "BORDERLESS", "FULLSCREEN"};
73  if (ui::BeginComboCt("##fullcreenmmode", modes[settings.fullScreenMode].c_str()))
74  {
75  for (int i = 0; i < modes.size(); ++i)
76  {
77  const bool is_selected = (settings.fullScreenMode == i);
78  if (ui::Selectable(modes[i].c_str(), is_selected))
79  {
82  }
83  if (is_selected)
84  ui::SetItemDefaultFocus();
85  }
86  ui::EndCombo();
87  }
88  }
89 
90  // screen resolution label + combobox
91  {
92  ui::LabelText("##screenreslbl", "Resolution");
93  ui::SameLine();
94  std::string currentResolution = std::to_string(settings.screenWidth) + " x " + std::to_string(settings.screenHeight);
95  if (ui::BeginComboCt("##screenres", currentResolution.c_str()))
96  {
97  for (const auto &mode : WindowManager::instance().getSupportedScreenResolutions())
98  {
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))
102  {
104  (int)(&mode - &WindowManager::instance().getSupportedScreenResolutions().front()));
106  }
107  if (is_selected)
108  ui::SetItemDefaultFocus();
109  }
110  ui::EndCombo();
111  }
112  }
113 
114  // menu layout label + combobox
115  {
116  ui::LabelText("##menulayoutlbl", "Build Menu Pos");
117  ui::SameLine();
118  int buildMenuLayoutIdx = (int)uiManager.buildMenuLayout();
119  std::vector<const char *> layouts = {"LEFT", "RIGHT", "TOP", "BOTTOM"};
120  if (ui::BeginComboCt("##menulayoutcombo", layouts[buildMenuLayoutIdx]))
121  {
122  for (size_t n = 0, size = layouts.size(); n < size; n++)
123  {
124  const bool is_selected = (buildMenuLayoutIdx == n);
125  if (ui::Selectable(layouts[n], is_selected))
126  {
127  settings.buildMenuPosition = layouts[n];
128  uiManager.setBuildMenuLayout(static_cast<BUILDMENU_LAYOUT>(n));
129  }
130 
131  // Set the initial focus when opening the combo (scrolling + keyboard navigation focus)
132  if (is_selected)
133  ui::SetItemDefaultFocus();
134  }
135  ui::EndCombo();
136  }
137  }
138 
139  // music volume label + slider
140  {
141  ui::LabelText("##musicvol", "Music Volume");
142  ui::SameLine();
143  float saveVolume = settings.musicVolume;
144  ui::SliderFloatCt(" ", &settings.musicVolume, 0, 1, "", ImGuiSliderFlags_NoText);
145 
146  if (saveVolume != settings.musicVolume)
147  {
148 #ifdef USE_AUDIO
149  AudioMixer::instance().setMusicVolume(settings.musicVolume);
150 #endif
151  }
152  }
153 
154  //sfx volume label + slider
155  ui::LabelText("##sfxvol", "Sound FX Volume");
156  ui::SameLine();
157  float saveSFXVolume = settings.soundEffectsVolume;
158  ui::SliderFloatCt("sfx", &settings.soundEffectsVolume, 0, 1, "", ImGuiSliderFlags_NoText);
159 
160  if (saveSFXVolume != settings.soundEffectsVolume)
161  {
162 #ifdef USE_AUDIO
163  AudioMixer::instance().setSoundEffectVolume(settings.soundEffectsVolume);
164 #endif
165  }
166 
167  ui::PopItemWidth();
168 
169  ImVec2 btnSize(windowSize.x / 4, 40);
170 
171  ui::SetCursorPosY(windowSize.y - btnSize.y * 2);
172  ui::Dummy({btnSize.x / 2, 0.f});
173  ui::SameLine();
174  if (ui::ButtonCt("OK", btnSize))
175  {
176  uiManager.closeMenu();
177  }
178 
179  ui::SameLine();
180  if (ui::ButtonCt("Cancel", btnSize))
181  {
182  uiManager.closeMenu();
183  }
184 
185  ui::SameLine();
186  if (ui::ButtonCt("Reset", btnSize))
187  {
188  uiManager.closeMenu();
190  }
191 
192  ui::PopFont();
193  ui::PopStyleVar(3);
194 
195  ui::End();
196 }
+ Here is the call graph for this function:

The documentation for this struct was generated from the following files:
AudioMixer::setMusicVolume
void setMusicVolume(float volume)
sets the music volume
Definition: AudioMixer.cxx:139
int
int
Definition: tileData.hxx:57
FULLSCREEN_MODE
FULLSCREEN_MODE
Definition: WindowManager.hxx:12
MapFunctions::refreshVisibleMap
void refreshVisibleMap()
Refresh the visible part of the map.
Definition: MapFunctions.cxx:764
BUILDMENU_LAYOUT
BUILDMENU_LAYOUT
Definition: UIManager.hxx:27
AudioMixer::setSoundEffectVolume
void setSoundEffectVolume(float volume)
sets the sound effects volume
Definition: AudioMixer.cxx:149
WindowManager::setFullScreenMode
void setFullScreenMode(FULLSCREEN_MODE mode) const
sets the game's window mode
Definition: WindowManager.cxx:96
Settings::resetSettingsToDefaults
void resetSettingsToDefaults()
Reset settings to defaults from local settings file.
Definition: Settings.cxx:88
Singleton< UIManager >::instance
static UIManager & instance(void)
Get an instance of the singleton.
Definition: Singleton.hxx:15
WindowManager::setScreenResolution
void setScreenResolution(int mode)
Definition: WindowManager.cxx:188
string
std::string string
Definition: AudioConfig.hxx:14