44 void RemovePanel(
const char* PanelID);
46 FORCEINLINE
FPanelData* GetPanelData(
const uint32_t PanelID)
48 for (
auto& PanelMap : Panels)
50 if (PanelMap.find(PanelID) != PanelMap.end())
52 return &PanelMap.at(PanelID);
59 FORCEINLINE
const FPanelData* GetPanelData(
const uint32_t PanelID)
const
61 return GetPanelData(PanelID);
64 FORCEINLINE
FPanelData* GetPanelData(
const char* PanelName)
66 const uint32_t PanelID = LHash::Generate<EHash::FNV>(PanelName);
67 for (
auto& PanelMap : Panels)
69 if (PanelMap.find(PanelID) != PanelMap.end())
71 return &PanelMap.at(PanelID);
78 std::unordered_map<uint32_t, FPanelData>& GetPanels(
const EPanelCategory Category)
80 return Panels[
static_cast<std::size_t
>(Category)];
83 const std::unordered_map<uint32_t, FPanelData>& GetPanels(
const EPanelCategory Category)
const
85 return Panels[
static_cast<std::size_t
>(Category)];
88 template<
typename TPanel>
91 static_assert(std::is_base_of_v<IPanel, TPanel>,
"Panel needs to implement the IPanel interface");
93 const uint32_t ID = LHash::Generate<EHash::FNV>(PanelData.ID);
94 auto& PanelMap = Panels[(std::size_t)Category];
95 if (PanelMap.find(ID) != PanelMap.end())
97 LK_CORE_ERROR_TAG(
"PanelManager",
"A panel with ID '{}' already exists", PanelData.ID);
98 LK_CORE_ASSERT(
false,
"A panel with ID '{}' already exists", PanelData.ID);
102 PanelMap[ID] = PanelData;
103 LK_CORE_DEBUG_TAG(
"PanelManager",
"Adding panel {} ({})", PanelData.Name, PanelData.ID);
105 return PanelData.Panel.As<TPanel>();
108 template<
typename TPanel,
typename... TArgs>
109 TObjectPtr<TPanel> AddPanel(
const EPanelCategory Category,
const char* StringID, EPanelInitState InitState, TArgs&&... Args)
111 const bool bIsOpenByDefault = (InitState == EPanelInitState::Open);
115 template<
typename TPanel,
typename... TArgs>
116 TObjectPtr<TPanel> AddPanel(
const EPanelCategory Category,
const char* StringID,
const char* DisplayName, EPanelInitState InitState, TArgs&&... Args)
118 const bool bIsOpenByDefault = (InitState == EPanelInitState::Open);
122 template<
typename TPanel>
125 static_assert(std::is_base_of_v<IPanel, TPanel>,
"Panel needs to implement the IPanel interface");
126 const uint32_t ID = LHash::Generate<EHash::FNV>(StringID);
127 for (
const auto& PanelMap : Panels)
129 if (PanelMap.find(ID) != PanelMap.end())
131 return PanelMap.at(ID).Panel.As<TPanel>();
135 LK_CORE_ERROR_TAG(
"PanelManager",
"Cannot find panel with id '{}'", StringID);
149 LK_CORE_ASSERT(PanelID);
150 LK_CORE_TRACE_TAG(
"PanelManager",
"Invoked OnSetPanelOpenHandler: ({}, {})", PanelID, (Open ?
"Opened" :
"Closed"));
151 if (
FPanelData* PanelData = GetPanelData(PanelID); PanelData !=
nullptr)
153 PanelData->bIsOpen = Open;
157 bool IsPanelOpenHandler(
const char* PanelID)
159 LK_CORE_ASSERT(PanelID);
160 LK_CORE_TRACE_TAG(
"PanelManager",
"Invoked IsPanelOpenHandler: {}", PanelID);
161 if (
FPanelData* PanelData = GetPanelData(PanelID); PanelData !=
nullptr)
163 return PanelData->bIsOpen;
170 std::array<std::unordered_map<uint32_t, FPanelData>, (std::size_t)EPanelCategory::COUNT> Panels;