Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BuildMenu.hxx
Go to the documentation of this file.
1 #ifndef BUILDMENU_HXX_
2 #define BUILDMENU_HXX_
3 
4 #include "imgui.h"
5 #include "UIManager.hxx"
6 
7 struct TileData;
8 
10 {
11  using Ptr = std::shared_ptr<BuildMenuButton>;
12  using Items = std::vector<Ptr>;
13 
14  bool m_open = false; // draw subbuttons
15  bool m_background = false; // draw background
16 
17  std::string m_texstr; // texture name
18  std::string m_id; // unique id
19  std::string m_action; // additional action
20  std::string m_tiletype; // which tiletype place on map
21 
22  SDL_Texture *m_tex; // sdl texture
23  ImVec2 m_uv0 = ImVec2{0, 0};
24  ImVec2 m_uv1 = ImVec2{1, 1}; // texture sub coords
25  ImSpan2i m_texSize; // texutre size
26  BuildMenuButton *m_parent = nullptr; // parent button, need for recursive logic
27 
28  ImVec4 m_destRect; // texture additional offsets
29  ImVec2 m_btnSize; // button frame rect
30 
31  Items m_buttons; // sub items
32 
33  // ctor simple button with sub items
34  BuildMenuButton(const std::string &tx, const std::string &category);
35 
36  // ctor button which can change tile type
37  BuildMenuButton(const std::string &tx, const std::string &category, const TileData &tile);
38 
39  // add new subbutton
40  Ptr addCategoryButton(const std::string &tx, const std::string &id, const TileData &tile)
41  {
42  return addButtonImpl(tx, id, tile);
43  }
44 
45  // add button which change tile type
46  Ptr addTileButton(const std::string &tx, const std::string &id, const TileData &tile) { return addButtonImpl(tx, id, tile); }
47 
48  // add button with special action, like water or demolish
49  Ptr addActionButton(const std::string &tx, const std::string &action, const std::string &tooltip);
50 
51  // create new button with params
52  Ptr addButtonImpl(const std::string &tx, const std::string &id, const TileData &tile);
53 
64  void scaleCenterImage(SDL_Rect &ret, int btnW, int btnH, int imgW, int imgH) const;
65 
66  const ImVec2 &getBtnSize() const { return m_btnSize; }
67  const std::string &getId() const { return m_id; }
68  const Items &getButtons() const { return m_buttons; }
69 
70  // hide items recursively
71  void hideItems();
72 };
73 
74 class BuildMenu final : public GameMenu
75 {
76 public:
77  BuildMenu();
78 
79  void draw() const override;
80 
81  // read config and crete build menu
82  void createSubMenus();
83 
84  // show/hide button with items, hide another buttons
85  void setItemVisible(BuildMenuButton::Ptr btn, bool visible);
86 
87  // on click button
88  void onClick(BuildMenuButton::Ptr btn);
89 
90  // click on button with action param
91  void onAction(const std::string &action, bool checked);
92 
93  // click on button with tile type
94  void onChangeTileType(const std::string &id, bool checked);
95 
96  // hide all buttons
97  void closeSubmenus() override;
98  void clearState();
99 
100  const std::string &getId() const { return m_id; }
101  const BuildMenuButton::Items &getButtons() const { return m_buttons; }
102  float getTooltipDelay() const { return m_tooltipDelay; }
103 
104 private:
106  std::string m_id = "Main";
107  ImVec2 m_btnSize;
108  float m_tooltipDelay = 3.f;
109 };
110 
111 #endif // BUILDMENU_HXX_
BuildMenu::closeSubmenus
void closeSubmenus() override
Definition: BuildMenu.cxx:440
BuildMenuButton::m_tex
SDL_Texture * m_tex
Definition: BuildMenu.hxx:22
BuildMenu::draw
void draw() const override
Definition: BuildMenu.cxx:193
BuildMenuButton::m_id
std::string m_id
Definition: BuildMenu.hxx:18
BuildMenuButton::m_texstr
std::string m_texstr
Definition: BuildMenu.hxx:17
BuildMenu::setItemVisible
void setItemVisible(BuildMenuButton::Ptr btn, bool visible)
Definition: BuildMenu.cxx:292
BuildMenu::getId
const std::string & getId() const
Definition: BuildMenu.hxx:100
BuildMenuButton::m_background
bool m_background
Definition: BuildMenu.hxx:15
BuildMenu::m_tooltipDelay
float m_tooltipDelay
Definition: BuildMenu.hxx:108
BuildMenuButton::addActionButton
Ptr addActionButton(const std::string &tx, const std::string &action, const std::string &tooltip)
Definition: BuildMenu.cxx:483
BuildMenu::onClick
void onClick(BuildMenuButton::Ptr btn)
Definition: BuildMenu.cxx:317
BuildMenu::BuildMenu
BuildMenu()
Definition: BuildMenu.cxx:17
BuildMenu::m_buttons
BuildMenuButton::Items m_buttons
Definition: BuildMenu.hxx:105
BuildMenu::createSubMenus
void createSubMenus()
Definition: BuildMenu.cxx:221
BuildMenu::onChangeTileType
void onChangeTileType(const std::string &id, bool checked)
Definition: BuildMenu.cxx:389
BuildMenuButton::Ptr
std::shared_ptr< BuildMenuButton > Ptr
Definition: BuildMenu.hxx:11
BuildMenuButton::m_parent
BuildMenuButton * m_parent
Definition: BuildMenu.hxx:26
BuildMenuButton::BuildMenuButton
BuildMenuButton(const std::string &tx, const std::string &category)
Definition: BuildMenu.cxx:457
BuildMenu::m_btnSize
ImVec2 m_btnSize
Definition: BuildMenu.hxx:107
BuildMenuButton::addTileButton
Ptr addTileButton(const std::string &tx, const std::string &id, const TileData &tile)
Definition: BuildMenu.hxx:46
BuildMenuButton::getId
const std::string & getId() const
Definition: BuildMenu.hxx:67
BuildMenu::onAction
void onAction(const std::string &action, bool checked)
Definition: BuildMenu.cxx:334
BuildMenuButton::Items
std::vector< Ptr > Items
Definition: BuildMenu.hxx:12
BuildMenu
Definition: BuildMenu.hxx:74
BuildMenuButton::getBtnSize
const ImVec2 & getBtnSize() const
Definition: BuildMenu.hxx:66
BuildMenuButton::m_uv0
ImVec2 m_uv0
Definition: BuildMenu.hxx:23
BuildMenu::clearState
void clearState()
Definition: BuildMenu.cxx:450
BuildMenuButton::m_uv1
ImVec2 m_uv1
Definition: BuildMenu.hxx:24
BuildMenuButton::m_action
std::string m_action
Definition: BuildMenu.hxx:19
BuildMenuButton::scaleCenterImage
void scaleCenterImage(SDL_Rect &ret, int btnW, int btnH, int imgW, int imgH) const
takes an SDL_Rect, default button width and height, and image width and height and scales the image t...
Definition: BuildMenu.cxx:503
BuildMenuButton::m_texSize
ImSpan2i m_texSize
Definition: BuildMenu.hxx:25
BuildMenuButton::m_open
bool m_open
Definition: BuildMenu.hxx:14
BuildMenuButton::getButtons
const Items & getButtons() const
Definition: BuildMenu.hxx:68
BuildMenuButton::m_destRect
ImVec4 m_destRect
Definition: BuildMenu.hxx:28
BuildMenuButton::m_btnSize
ImVec2 m_btnSize
Definition: BuildMenu.hxx:29
BuildMenuButton::m_tiletype
std::string m_tiletype
Definition: BuildMenu.hxx:20
GameMenu
Definition: UIManager.hxx:11
BuildMenuButton::hideItems
void hideItems()
Definition: BuildMenu.cxx:523
BuildMenu::m_id
std::string m_id
Definition: BuildMenu.hxx:106
BuildMenuButton
Definition: BuildMenu.hxx:9
UIManager.hxx
BuildMenuButton::addButtonImpl
Ptr addButtonImpl(const std::string &tx, const std::string &id, const TileData &tile)
Definition: BuildMenu.cxx:495
BuildMenu::getTooltipDelay
float getTooltipDelay() const
Definition: BuildMenu.hxx:102
string
std::string string
Definition: AudioConfig.hxx:14
BuildMenuButton::addCategoryButton
Ptr addCategoryButton(const std::string &tx, const std::string &id, const TileData &tile)
Definition: BuildMenu.hxx:40
TileData
Holds all releavted information to this specific tile.
Definition: tileData.hxx:135
BuildMenu::getButtons
const BuildMenuButton::Items & getButtons() const
Definition: BuildMenu.hxx:101
BuildMenuButton::m_buttons
Items m_buttons
Definition: BuildMenu.hxx:31