From ab21ffc61ddff81772c9b633f46674ba0865e737 Mon Sep 17 00:00:00 2001 From: Turanszki Janos Date: Fri, 23 Jul 2021 00:36:38 +0200 Subject: [PATCH] editor: obj importer will create root entity, translator update --- Editor/Editor.cpp | 24 ++++++++++++++---------- Editor/ModelImporter_OBJ.cpp | 5 +++++ Editor/Translator.h | 4 ++-- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index 039c8b84e..70d15f428 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -1437,13 +1437,11 @@ void EditorComponent::Update(float dt) for (size_t i = 0; i < scene.transforms.GetCount(); ++i) { Entity entity = scene.transforms.GetEntity(i); - if (scene.hierarchy.Contains(entity)) { // Parented objects won't be attached, but only the parents instead. Otherwise it would cause "double translation" continue; } - wiScene::PickResult picked; picked.entity = entity; AddSelected(picked); @@ -1456,7 +1454,7 @@ void EditorComponent::Update(float dt) if (!translator.selected.empty() && wiInput::Down(wiInput::KEYBOARD_BUTTON_LSHIFT)) { // Union selection: - std::list saved = translator.selected; + std::vector saved = translator.selected; translator.selected.clear(); for (const wiScene::PickResult& picked : saved) { @@ -2393,17 +2391,23 @@ void EditorComponent::AddSelected(Entity entity) } void EditorComponent::AddSelected(const PickResult& picked) { - for (auto it = translator.selected.begin(); it != translator.selected.end(); ++it) + bool removal = false; + for (size_t i = 0; i < translator.selected.size(); ++i) { - if ((*it) == picked) + if(translator.selected[i] == picked) { // If already selected, it will be deselected now: - translator.selected.erase(it); - return; + translator.selected[i] = translator.selected.back(); + translator.selected.pop_back(); + removal = true; + break; } } - translator.selected.push_back(picked); + if (!removal) + { + translator.selected.push_back(picked); + } } bool EditorComponent::IsSelected(Entity entity) const { @@ -2504,7 +2508,7 @@ void EditorComponent::ConsumeHistoryOperation(bool undo) { // Read selections states from archive: - std::list selectedBEFORE; + std::vector selectedBEFORE; size_t selectionCountBEFORE; archive >> selectionCountBEFORE; for (size_t i = 0; i < selectionCountBEFORE; ++i) @@ -2519,7 +2523,7 @@ void EditorComponent::ConsumeHistoryOperation(bool undo) selectedBEFORE.push_back(sel); } - std::list selectedAFTER; + std::vector selectedAFTER; size_t selectionCountAFTER; archive >> selectionCountAFTER; for (size_t i = 0; i < selectionCountAFTER; ++i) diff --git a/Editor/ModelImporter_OBJ.cpp b/Editor/ModelImporter_OBJ.cpp index ec2548766..6bc03726b 100644 --- a/Editor/ModelImporter_OBJ.cpp +++ b/Editor/ModelImporter_OBJ.cpp @@ -103,6 +103,10 @@ void ImportModel_OBJ(const std::string& fileName, Scene& scene) if (success) { + Entity rootEntity = CreateEntity(); + scene.transforms.Create(rootEntity); + scene.names.Create(rootEntity) = name; + // Load material library: std::vector materialLibrary = {}; for (auto& obj_material : obj_materials) @@ -157,6 +161,7 @@ void ImportModel_OBJ(const std::string& fileName, Scene& scene) for (auto& shape : obj_shapes) { Entity objectEntity = scene.Entity_CreateObject(shape.name); + scene.Component_Attach(objectEntity, rootEntity); Entity meshEntity = scene.Entity_CreateMesh(shape.name + "_mesh"); ObjectComponent& object = *scene.objects.GetComponent(objectEntity); MeshComponent& mesh = *scene.meshes.GetComponent(meshEntity); diff --git a/Editor/Translator.h b/Editor/Translator.h index 97ed29da8..0fdbf25fd 100644 --- a/Editor/Translator.h +++ b/Editor/Translator.h @@ -2,7 +2,7 @@ #include "CommonInclude.h" #include "wiCanvas.h" -#include +#include class Translator { @@ -24,7 +24,7 @@ public: void PostTranslate(); wiScene::TransformComponent transform; - std::list selected; + std::vector selected; bool enabled = false;