diff --git a/enginecustom/imgui.ini b/enginecustom/imgui.ini index 6de8ef6..5e0bf6b 100644 --- a/enginecustom/imgui.ini +++ b/enginecustom/imgui.ini @@ -1,6 +1,6 @@ [Window][DockSpace] Pos=0,0 -Size=1536,793 +Size=32,32 Collapsed=0 [Window][Debug##Default] @@ -22,15 +22,15 @@ DockId=0x00000009,0 [Window][Objects] Pos=0,19 -Size=251,774 +Size=15,22 Collapsed=0 -DockId=0x0000000B,1 +DockId=0x0000000B,0 [Window][Terrain] Pos=0,19 -Size=251,774 +Size=15,22 Collapsed=0 -DockId=0x0000000B,0 +DockId=0x0000000B,1 [Window][Log Window] Pos=0,630 @@ -57,7 +57,7 @@ Collapsed=0 DockId=0x00000002,0 [Docking][Data] -DockSpace ID=0xCCBD8CF7 Window=0x3DA2F1DE Pos=0,19 Size=1536,774 Split=X +DockSpace ID=0xCCBD8CF7 Window=0x3DA2F1DE Pos=0,19 Size=32,22 Split=X DockNode ID=0x00000001 Parent=0xCCBD8CF7 SizeRef=1350,842 Split=X DockNode ID=0x00000005 Parent=0x00000001 SizeRef=1265,842 Split=Y DockNode ID=0x00000003 Parent=0x00000005 SizeRef=1584,609 Split=X diff --git a/enginecustom/src/inc/system/imguiManager.h b/enginecustom/src/inc/system/imguiManager.h index 50a254b..f7671de 100644 --- a/enginecustom/src/inc/system/imguiManager.h +++ b/enginecustom/src/inc/system/imguiManager.h @@ -39,6 +39,12 @@ struct ComponentEntry { std::function addFunc; }; +struct CachedEntity +{ + std::string name; + ecs::EntityID id; +}; + class imguiManager { public: @@ -175,6 +181,10 @@ private: // --------------------------------------------- // // ----------------- Functions ----------------- // // --------------------------------------------- // + /** + * Update the cached entity list if there is a new, delete or rename entity + */ + void UpdateCachedEntitiesIfNeeded(); // --------------------------------------------- // // ----------------- Variables ----------------- // @@ -232,6 +242,8 @@ private: std::string version_driver_; ecs::EntityID m_selected_entity_id = 0; // ID of the currently selected entity + std::vector cachedEntities_; + bool entityListDirty = true; int BUILD_VERSION_VER = -1; }; diff --git a/enginecustom/src/src/system/imguiManager.cpp b/enginecustom/src/src/system/imguiManager.cpp index c3b95fb..27a7646 100644 --- a/enginecustom/src/src/system/imguiManager.cpp +++ b/enginecustom/src/src/system/imguiManager.cpp @@ -603,25 +603,17 @@ void imguiManager::WidgetObjectWindow() TEXT_V("Number of cubes: %d", entity_manager_->GetEntityCount()) SEP - auto entities = entity_manager_->GetAllEntities(); + UpdateCachedEntitiesIfNeeded(); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing,ImVec2(4,2)); - for (auto& entity : entities) + for (auto& cachedEntitie : cachedEntities_) { - auto identity = entity->GetComponent(); - if (identity) + bool isSelected = (cachedEntitie.id == m_selected_entity_id); + if (SEL(cachedEntitie.name.c_str(), isSelected)) { - std::string name = identity->GetName(); - if (name.empty()) name = "Entity #" + std::to_string(identity->GetId()); - // avoid same label by adding the ID at the end - name += "##" + std::to_string(identity->GetId()); - bool isSelected = (entity->GetID() == m_selected_entity_id); - if (SEL(name.c_str(), isSelected)) - { - m_selected_entity_id = entity->GetID(); - show_inspector_window_ = true; - } + m_selected_entity_id = cachedEntitie.id; + show_inspector_window_ = true; } } @@ -1223,3 +1215,18 @@ void imguiManager::WidgetRenderStats() END } +void imguiManager::UpdateCachedEntitiesIfNeeded() { + if (!entityListDirty) return; + cachedEntities_.clear(); + auto entities = entity_manager_->GetAllEntities(); + for (auto& entity : entities) { + auto identity = entity->GetComponent(); + if (identity) { + std::string name = identity->GetName(); + if (name.empty()) + name = "Entity " + std::to_string(identity->GetId()); + cachedEntities_.push_back({ name, identity->GetId() }); + } + } + entityListDirty = false; +} \ No newline at end of file diff --git a/x64/Debug/config.txt b/x64/Debug/config.txt index 2ebee15..aba56db 100644 --- a/x64/Debug/config.txt +++ b/x64/Debug/config.txt @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b46f4a4e6dbada13398ff80f6056ead533d97b6485ba905f470333eb247ea4ee +oid sha256:7051b358fa10ce0cd9c08bfd24944aba26a208186d06d321b01bafe9613b1849 size 9 diff --git a/x64/Release/config.txt b/x64/Release/config.txt index 2ebee15..aba56db 100644 --- a/x64/Release/config.txt +++ b/x64/Release/config.txt @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b46f4a4e6dbada13398ff80f6056ead533d97b6485ba905f470333eb247ea4ee +oid sha256:7051b358fa10ce0cd9c08bfd24944aba26a208186d06d321b01bafe9613b1849 size 9