diff --git a/ui/src/panels/HierarchyPanel.cpp b/ui/src/panels/HierarchyPanel.cpp index 5cb2b05d..9cd41c74 100644 --- a/ui/src/panels/HierarchyPanel.cpp +++ b/ui/src/panels/HierarchyPanel.cpp @@ -28,11 +28,6 @@ void HierarchyPanel::Render() { std::string filter = m_searchBuffer; - if (ImGui::BeginPopupContextWindow("HierarchyContextMenu", ImGuiPopupFlags_MouseButtonRight | ImGuiPopupFlags_NoOpenOverItems)) { - RenderCreateMenu(INVALID_ENTITY); - ImGui::EndPopup(); - } - ImGui::BeginChild("EntityList"); for (EntityID id : SceneManager::Get().GetRootEntities()) { @@ -45,6 +40,25 @@ void HierarchyPanel::Render() { } } + if (ImGui::BeginPopupContextWindow("HierarchyContextMenu", ImGuiPopupFlags_MouseButtonRight | ImGuiPopupFlags_NoOpenOverItems)) { + RenderCreateMenu(INVALID_ENTITY); + ImGui::EndPopup(); + } + + ImGui::InvisibleButton("##DragTarget", ImVec2(-1, -1)); + if (ImGui::BeginDragDropTarget()) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("ENTITY_ID")) { + EntityID sourceId = *(const EntityID*)payload->Data; + if (sourceId != INVALID_ENTITY) { + const Entity* sourceEntity = SceneManager::Get().GetEntity(sourceId); + if (sourceEntity && sourceEntity->parent != INVALID_ENTITY) { + SceneManager::Get().MoveEntity(sourceId, INVALID_ENTITY); + } + } + } + ImGui::EndDragDropTarget(); + } + ImGui::EndChild(); ImGui::End();