Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
UIManager.hxx
Go to the documentation of this file.
1 #ifndef UIMANAGER_HXX_
2 #define UIMANAGER_HXX_
3 
4 #include <SDL.h>
5 #include <vector>
6 
7 #include "../util/Singleton.hxx"
8 #include <Layout.hxx>
9 
10 // BaseClass for game menu, only one menu can show on frame
11 struct GameMenu
12 {
13  using Ptr = std::shared_ptr<GameMenu>;
14  virtual ~GameMenu() = default;
15  virtual void draw() const
16  { /* default implementation do nothing */
17  }
18  virtual bool isMouseHovered() const { return false; }
19  virtual void closeSubmenus()
20  { /* default implementation do nothing */
21  }
22 };
23 
24 struct BuildMenu;
26 
27 enum class BUILDMENU_LAYOUT
28 {
29  LEFT = 0,
30  RIGHT = 1,
31  TOP = 2,
32  BOTTOM = 3
33 };
34 
39 class UIManager : public Singleton<UIManager>
40 {
41 public:
43 
49  void init();
50 
51  struct ImFont *loadFont(const std::string &name, uint32_t size);
52  void initializeImGuiFonts();
53 
54  void loadSettings(json &uiLayout);
55  void parseLayouts(const json &uiLayout);
56 
60  void drawUI();
61 
66 
72  void setFPSCounterText(const std::string &fps);
73 
79  std::unordered_map<std::string, LayoutData> &getLayouts() { return m_layouts; }
80 
81  void setTooltip(const std::string &tooltipText);
82 
87  void clearTooltip();
88 
92  void closeOpenMenus();
93 
94  void openMenu(GameMenu::Ptr menuOption);
95 
96  template <class Menu> void openMenu() { openMenu(std::make_shared<Menu>()); }
97 
98  void closeMenu();
99  inline bool isAnyMenuOpen() const { return !m_menuStack.empty(); }
100 
101  void addPersistentMenu(GameMenu::Ptr menu);
102 
103  bool isMouseHovered() const;
104 
105  template <class Menu> inline GameMenu::Ptr findMenu() const
106  {
107  for (const auto &m : m_menuStack)
108  {
109  if (dynamic_cast<Menu *>(m.get()))
110  {
111  return m;
112  }
113  }
114 
115  for (const auto &m : m_persistentMenu)
116  {
117  if (dynamic_cast<Menu *>(m.get()))
118  {
119  return m;
120  }
121  }
122 
123  return nullptr;
124  }
125 
126  template <class Menu> void addPersistentMenu() { addPersistentMenu(std::make_shared<Menu>()); }
127 
130 
131 private:
132  UIManager() = default;
133  ~UIManager() = default;
134 
136  std::unordered_map<std::string, LayoutData> m_layouts;
137 
139 
140  std::unordered_map<std::string, ImFont *> m_loadedFonts;
141  std::vector<GameMenu::Ptr> m_menuStack;
142  std::vector<GameMenu::Ptr> m_persistentMenu;
143 
145  bool m_showDebugMenu = false;
146 
148  bool m_showFpsCounter = true;
149 
151  struct ImFont *fontDefault = nullptr;
153 };
154 
155 #endif
GameMenu::Ptr
std::shared_ptr< GameMenu > Ptr
Definition: UIManager.hxx:13
UIManager::openMenu
void openMenu()
Definition: UIManager.hxx:96
BUILDMENU_LAYOUT::BOTTOM
@ BOTTOM
UIManager::m_showFpsCounter
bool m_showFpsCounter
Definition: UIManager.hxx:148
UIManager::getLayouts
std::unordered_map< std::string, LayoutData > & getLayouts()
Get the LayoutGroup container.
Definition: UIManager.hxx:79
UIManager::closeOpenMenus
void closeOpenMenus()
Close all open menus but the build menu.
Definition: UIManager.cxx:144
UIManager
Draws the UI to the screen.
Definition: UIManager.hxx:39
UIManager::setFPSCounterText
void setFPSCounterText(const std::string &fps)
Helper function to update the FPS Counter.
Definition: UIManager.cxx:142
UIManager::~UIManager
~UIManager()=default
GameMenu::isMouseHovered
virtual bool isMouseHovered() const
Definition: UIManager.hxx:18
UIManager::setTooltip
void setTooltip(const std::string &tooltipText)
Definition: UIManager.cxx:222
BUILDMENU_LAYOUT::TOP
@ TOP
UIManager::init
void init()
Parses the UiLayout.json files and creates UI Elements.
UIManager::setBuildMenuLayout
void setBuildMenuLayout(BUILDMENU_LAYOUT l)
Definition: UIManager.hxx:129
UIManager::m_loadedFonts
std::unordered_map< std::string, ImFont * > m_loadedFonts
Definition: UIManager.hxx:140
GameMenu::closeSubmenus
virtual void closeSubmenus()
Definition: UIManager.hxx:19
UIManager::m_fpsCounter
std::string m_fpsCounter
Definition: UIManager.hxx:147
UIManager::m_tooltip
std::string m_tooltip
Definition: UIManager.hxx:138
UIManager::fontDefault
struct ImFont * fontDefault
pointer to the default font used for in-game text
Definition: UIManager.hxx:151
UIManager::m_layouts
std::unordered_map< std::string, LayoutData > m_layouts
map holding layput groups, accessible via the layoutgroup ID
Definition: UIManager.hxx:136
UIManager::parseLayouts
void parseLayouts(const json &uiLayout)
Definition: UIManager.cxx:94
BUILDMENU_LAYOUT
BUILDMENU_LAYOUT
Definition: UIManager.hxx:27
UIManager::initializeImGuiFonts
void initializeImGuiFonts()
Definition: UIManager.cxx:69
UIManager::drawUI
void drawUI()
Renders all UI Widgets.
Definition: UIManager.cxx:184
BUILDMENU_LAYOUT::RIGHT
@ RIGHT
json
nlohmann::json json
Definition: UIManager.hxx:25
UIManager::isAnyMenuOpen
bool isAnyMenuOpen() const
Definition: UIManager.hxx:99
BuildMenu
Definition: BuildMenu.hxx:74
UIManager::closeMenu
void closeMenu()
Definition: UIManager.cxx:163
BUILDMENU_LAYOUT::LEFT
@ LEFT
UIManager::buildMenuLayout
BUILDMENU_LAYOUT buildMenuLayout() const
Definition: UIManager.hxx:128
UIManager::isMouseHovered
bool isMouseHovered() const
Definition: UIManager.cxx:182
UIManager::m_menuStack
std::vector< GameMenu::Ptr > m_menuStack
Definition: UIManager.hxx:141
UIManager::findMenu
GameMenu::Ptr findMenu() const
Definition: UIManager.hxx:105
UIManager::m_persistentMenu
std::vector< GameMenu::Ptr > m_persistentMenu
Definition: UIManager.hxx:142
Singleton
Abstract Singleton implementation.
Definition: Singleton.hxx:8
UIManager::loadSettings
void loadSettings(json &uiLayout)
Definition: UIManager.cxx:84
Layout.hxx
GameMenu
Definition: UIManager.hxx:11
UIManager::clearTooltip
void clearTooltip()
Hides and resets the active tooltip.
Definition: UIManager.cxx:224
UIManager::toggleDebugMenu
void toggleDebugMenu()
Toggle Visibility of Debug Menu.
Definition: UIManager.hxx:65
GameMenu::~GameMenu
virtual ~GameMenu()=default
UIManager::m_showDebugMenu
bool m_showDebugMenu
visibility of the debug menu
Definition: UIManager.hxx:145
UIManager::UIManager
UIManager()=default
UIManager::m_buildMenuLayout
BUILDMENU_LAYOUT m_buildMenuLayout
Definition: UIManager.hxx:152
UIManager::loadFont
struct ImFont * loadFont(const std::string &name, uint32_t size)
Definition: UIManager.cxx:51
UIManager::addPersistentMenu
void addPersistentMenu()
Definition: UIManager.hxx:126
json
nlohmann::json json
Definition: Settings.hxx:12
string
std::string string
Definition: AudioConfig.hxx:14
GameMenu::draw
virtual void draw() const
Definition: UIManager.hxx:15