Rehti MMORPG  1.0.0
Rehti MMORPG is a free and open source MMORPG game.
RehtiGui.hpp
Go to the documentation of this file.
1 #pragma once
2 #include "../../assets/reader/src/AssetCache.hpp"
3 #include "../../network/src/api/Types.hpp"
4 #include "../bindings/imgui_impl_glfw.h"
5 #include "../bindings/imgui_impl_vulkan.h"
6 #include "GraphicsTypes.hpp"
7 
8 #include <functional>
9 #include <mutex>
10 #include <unordered_map>
11 #include <vector>
12 
13 // fwd decl
15 
16 enum UiTab
17 {
20  Skills
21 };
22 
26 class RehtiGui
27 {
28 
29 public:
30  RehtiGui(VkInstance instance, VkPhysicalDevice gpu, VkDevice logDevice, GLFWwindow* pWindow, VkQueue graphicsQueue, VkDescriptorPool descPool, uint32_t imageCount, VkRenderPass renderPass, std::shared_ptr<GraphicsObjectManager> pGfxManager);
31  ~RehtiGui();
32 
33  void uploadFonts(VkCommandBuffer cmdBuffer);
34  void uploadEnded();
35  void newFrame();
36 
41  void recordGuiData(VkCommandBuffer cmdBuff);
42 
46  void startRender();
47 
52  void addInventoryItemClickCallback(std::function<void(const int id)> callback);
53 
58  void addDropItemCallback(std::function<void(const int id)> callback);
59 
64  void addEquipmentItemClickCallback(std::function<void(const int id)> callback);
65 
70  void setInventory(std::vector<GameItem> inventory);
71 
76  std::vector<GameItem>& getEquipment();
77 
82  void setEquipment(std::vector<GameItem> equipment);
83 
88  void setSkills(std::vector<Skill> skills);
89 
94  void setHp(int hp);
95 
102  bool LoadTextureFromFile(const char* filename, const int id);
103 
110  bool LoadTextureFromImageData(const int id, ImageData& imgData);
111 
112 private:
116  void drawInventory();
117 
121  void drawEquipment();
122 
126  void drawSkills();
127 
132  void drawEquipmentSlot(int index);
133 
134  VkDevice logDeviceM;
135  VkDescriptorPool descPoolM;
136 
137  VkQueue graphicsQueueM;
138  VkSampler samplerM;
139 
140  std::shared_ptr<GraphicsObjectManager> pGraphicsObjectManagerM;
141 
143 
144  std::function<void(const int id)> inventoryItemClickCallbackM;
145  std::function<void(const int id)> dropItemCallbackM;
146  std::function<void(const int id)> equipmentItemClickCallbackM;
147 
148  std::vector<GameItem> inventoryM;
149  std::vector<GameItem> equipmentM;
150  std::vector<Skill> skillsM;
151 
152  int hpM;
153 
154  std::mutex invMutexM;
155  std::mutex equipmentMutexM;
156  std::mutex skillsMutexM;
157 
158  int windowWidthM = 300;
159  int windowHeightM = 500;
160  ImVec2 iconSizeM = ImVec2(windowWidthM * 0.8 / 4, windowWidthM * 0.8 / 4);
161 
163 
164  // map from id to descriptor set required for drawing.
165  // GraphicsObjectManager will clean up the resources created.
166  std::unordered_map<int, VkDescriptorSet> guiIconsM;
167 };
UiTab
Definition: RehtiGui.hpp:17
@ Inventory
Definition: RehtiGui.hpp:18
@ Skills
Definition: RehtiGui.hpp:20
@ Equipment
Definition: RehtiGui.hpp:19
Loads all of the assets into memory (objects, textures, etc.).
Definition: AssetCache.hpp:17
Graphics object manager manages different types of objects that have memory and can be drawn.
Definition: GraphicsObjectManager.hpp:18
Class that manages the GUI window.
Definition: RehtiGui.hpp:27
std::mutex invMutexM
Definition: RehtiGui.hpp:154
AssetCache & assetCacheM
Definition: RehtiGui.hpp:162
std::vector< GameItem > inventoryM
Definition: RehtiGui.hpp:148
int windowWidthM
Definition: RehtiGui.hpp:158
ImVec2 iconSizeM
Definition: RehtiGui.hpp:160
VkQueue graphicsQueueM
Definition: RehtiGui.hpp:137
bool LoadTextureFromImageData(const int id, ImageData &imgData)
Load texture from ImageData and save it to member map guiIconsM with key id.
Definition: RehtiGui.cpp:33
VkSampler samplerM
Definition: RehtiGui.hpp:138
void uploadEnded()
Definition: RehtiGui.cpp:141
void setHp(int hp)
Set hp of player.
Definition: RehtiGui.cpp:247
void drawEquipmentSlot(int index)
Helper function for a single equipment slot.
Definition: RehtiGui.cpp:306
VkDescriptorPool descPoolM
Definition: RehtiGui.hpp:135
void newFrame()
Definition: RehtiGui.cpp:146
std::unordered_map< int, VkDescriptorSet > guiIconsM
Definition: RehtiGui.hpp:166
void drawEquipment()
Draws equipment tab to GUI window.
Definition: RehtiGui.cpp:321
void drawInventory()
Draws inventory tab to GUI window.
Definition: RehtiGui.cpp:252
void recordGuiData(VkCommandBuffer cmdBuff)
Records ui primitives into the given command buffer.
Definition: RehtiGui.cpp:199
int windowHeightM
Definition: RehtiGui.hpp:159
void addDropItemCallback(std::function< void(const int id)> callback)
Adds callback function for dropping an item in inventory.
Definition: RehtiGui.cpp:214
std::mutex equipmentMutexM
Definition: RehtiGui.hpp:155
void setEquipment(std::vector< GameItem > equipment)
Set contents of player's equipment.
Definition: RehtiGui.cpp:235
int hpM
Definition: RehtiGui.hpp:152
UiTab openTabM
Definition: RehtiGui.hpp:142
void uploadFonts(VkCommandBuffer cmdBuffer)
Definition: RehtiGui.cpp:136
std::vector< GameItem > & getEquipment()
Get reference to the player's equipment vector.
Definition: RehtiGui.cpp:230
void setSkills(std::vector< Skill > skills)
Set skills of player.
Definition: RehtiGui.cpp:241
void addInventoryItemClickCallback(std::function< void(const int id)> callback)
Adds callback function for clicking an item in inventory.
Definition: RehtiGui.cpp:209
~RehtiGui()
Definition: RehtiGui.cpp:128
std::function< void(const int id)> inventoryItemClickCallbackM
Definition: RehtiGui.hpp:144
void addEquipmentItemClickCallback(std::function< void(const int id)> callback)
Adds callback function for clicking and item in equipment.
Definition: RehtiGui.cpp:219
std::mutex skillsMutexM
Definition: RehtiGui.hpp:156
std::function< void(const int id)> equipmentItemClickCallbackM
Definition: RehtiGui.hpp:146
std::shared_ptr< GraphicsObjectManager > pGraphicsObjectManagerM
Definition: RehtiGui.hpp:140
VkDevice logDeviceM
Definition: RehtiGui.hpp:134
void setInventory(std::vector< GameItem > inventory)
Set contents of player's inventory.
Definition: RehtiGui.cpp:224
std::function< void(const int id)> dropItemCallbackM
Definition: RehtiGui.hpp:145
std::vector< Skill > skillsM
Definition: RehtiGui.hpp:150
bool LoadTextureFromFile(const char *filename, const int id)
Load texture from file and save it to member map guiIconsM with key id.
Definition: RehtiGui.cpp:7
void startRender()
Starts rendering ui primitives. Must be called at the top of draw function.
Definition: RehtiGui.cpp:204
void drawSkills()
Draws skills tab to GUI window.
Definition: RehtiGui.cpp:358
std::vector< GameItem > equipmentM
Definition: RehtiGui.hpp:149
RehtiGui(VkInstance instance, VkPhysicalDevice gpu, VkDevice logDevice, GLFWwindow *pWindow, VkQueue graphicsQueue, VkDescriptorPool descPool, uint32_t imageCount, VkRenderPass renderPass, std::shared_ptr< GraphicsObjectManager > pGfxManager)
Definition: RehtiGui.cpp:47
Definition: BasicTypes.hpp:161