diff --git a/toolkit/editor/editor/tools/selectiontool.cc b/toolkit/editor/editor/tools/selectiontool.cc index e0f933ddd..d7d0fa2b0 100644 --- a/toolkit/editor/editor/tools/selectiontool.cc +++ b/toolkit/editor/editor/tools/selectiontool.cc @@ -97,6 +97,8 @@ SelectionTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& view bvh.Build(bboxes.Begin(), bboxes.Size()); Util::Array intersectionIndices = bvh.Intersect(ray); + Util::Array newSelection; + for (IndexT i = 0; i < intersectionIndices.Size(); i++) { uint32_t const idx = intersectionIndices[i]; @@ -106,9 +108,10 @@ SelectionTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& view float t; if (bbox.intersects(ray, t)) { - selection.Append(editorEntity.id); + newSelection.Append(editorEntity.id); } } + Edit::SetSelection(newSelection); } Game::DestroyFilter(filter); @@ -121,6 +124,16 @@ SelectionTool::Update(Math::vec2 const& viewPortPosition, Math::vec2 const& view void SelectionTool::RenderGizmo() { + for (size_t i = 0; i < selection.Size(); i++) + { + if (!Editor::state.editorWorld->IsValid(selection[i]) || !Editor::state.editorWorld->HasInstance(selection[i])) + { + selection.EraseIndex(i); + i--; + continue; + } + } + if (selection.IsEmpty()) return; diff --git a/toolkit/editor/editor/ui/windows/toolbar.cc b/toolkit/editor/editor/ui/windows/toolbar.cc index ca8e2c84b..8e157a927 100644 --- a/toolkit/editor/editor/ui/windows/toolbar.cc +++ b/toolkit/editor/editor/ui/windows/toolbar.cc @@ -87,7 +87,9 @@ Toolbar::Run() if (ImGui::Button("Create")) { if (selected != nullptr) + { Edit::CreateEntity(selected); + } } IMGUI_VERTICAL_SEPARATOR;