diff --git a/editor/src/panels/HierarchyPanel.cpp b/editor/src/panels/HierarchyPanel.cpp index 20a53fee..80218e93 100644 --- a/editor/src/panels/HierarchyPanel.cpp +++ b/editor/src/panels/HierarchyPanel.cpp @@ -1,6 +1,9 @@ #include "HierarchyPanel.h" #include "Core/IEditorContext.h" #include "Core/ISceneManager.h" +#include "Core/ISelectionManager.h" +#include "Core/EditorEvents.h" +#include "Core/EventBus.h" #include #include #include @@ -13,11 +16,24 @@ HierarchyPanel::HierarchyPanel() : Panel("Hierarchy") { } HierarchyPanel::~HierarchyPanel() { + if (m_context) { + m_context->GetEventBus().Unsubscribe(m_selectionHandlerId); + } } void HierarchyPanel::OnAttach() { auto& sceneManager = m_context->GetSceneManager(); sceneManager.CreateDemoScene(); + + m_selectionHandlerId = m_context->GetEventBus().Subscribe( + [this](const SelectionChangedEvent& event) { + OnSelectionChanged(event); + } + ); +} + +void HierarchyPanel::OnSelectionChanged(const SelectionChangedEvent& event) { + m_needsRefresh = true; } void HierarchyPanel::Render() { diff --git a/editor/src/panels/HierarchyPanel.h b/editor/src/panels/HierarchyPanel.h index 77592096..90460abb 100644 --- a/editor/src/panels/HierarchyPanel.h +++ b/editor/src/panels/HierarchyPanel.h @@ -2,7 +2,7 @@ #include "Panel.h" #include -#include "Managers/SceneManager.h" +#include "Core/ISceneManager.h" namespace XCEngine { namespace Editor { @@ -18,6 +18,7 @@ public: void Render() override; private: + void OnSelectionChanged(const struct SelectionChangedEvent& event); void RenderSearchBar(); void RenderEntity(::XCEngine::Components::GameObject* gameObject, const std::string& filter); void RenderContextMenu(::XCEngine::Components::GameObject* gameObject); @@ -33,6 +34,8 @@ private: char m_renameBuffer[256] = ""; bool m_renameJustStarted = false; SortMode m_sortMode = SortMode::Name; + uint64_t m_selectionHandlerId = 0; + bool m_needsRefresh = false; }; }