diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index 82d29a6ba..0c0655a97 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -203,7 +203,7 @@ void ClearSelected() selected.clear(); savedParents.clear(); } -void AddSelected(wiRenderer::Picked* picked) +void AddSelected(wiRenderer::Picked* picked, bool deselectIfAlreadySelected = false) { list::iterator it = selected.begin(); for (; it != selected.end(); ++it) @@ -213,11 +213,28 @@ void AddSelected(wiRenderer::Picked* picked) break; } } + if (it == selected.end()) { selected.push_back(picked); savedParents.insert(pair(picked->transform, picked->transform->parent)); } + else if (deselectIfAlreadySelected) + { + { + picked->transform->detach(); + std::map::iterator it = savedParents.find(picked->transform); + if (it != savedParents.end()) + { + picked->transform->attachTo(it->second); + } + } + + SAFE_DELETE(*it); + selected.erase(it); + savedParents.erase(picked->transform); + SAFE_DELETE(picked); + } } enum EDITORSTENCILREF @@ -1048,7 +1065,7 @@ void EditorComponent::Update(float dt) wiRenderer::Picked* picked = new wiRenderer::Picked(hovered); if (!selected.empty() && wiInputManager::GetInstance()->down(VK_LSHIFT)) { - AddSelected(picked); + AddSelected(picked, true); } else {