From 5034adca8ed7575141a0bd88f9b44eb5e6deee19 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Thu, 5 Sep 2024 21:48:41 -0400 Subject: [PATCH] Now exporting entities to TB on build --- Editor/src/Windows/EditorInterface.cpp | 115 ++++++++++++++++++------- 1 file changed, 82 insertions(+), 33 deletions(-) diff --git a/Editor/src/Windows/EditorInterface.cpp b/Editor/src/Windows/EditorInterface.cpp index f083179d..0f4aedd6 100644 --- a/Editor/src/Windows/EditorInterface.cpp +++ b/Editor/src/Windows/EditorInterface.cpp @@ -544,12 +544,10 @@ namespace Nuake { else { this->SceneSnapshot = Engine::GetCurrentScene()->Copy(); - std::string statusMessage = ICON_FA_HAMMER + std::string(" Building .Net solution..."); SetStatusMessage(statusMessage); - auto job = [this]() { this->errors = ScriptingEngineNet::Get().BuildProjectAssembly(Engine::GetProject()); @@ -699,6 +697,7 @@ namespace Nuake { } else { + Engine::GetProject()->ExportEntitiesToTrenchbroom(); SetStatusMessage("Build succesful!"); } }); @@ -1996,44 +1995,54 @@ namespace Nuake { if (ImGui::BeginPopup("create_entity_popup")) { + Entity entity; + Ref scene = Engine::GetCurrentScene(); if (ImGui::MenuItem("Empty")) { - Engine::GetCurrentScene()->CreateEntity("Empty"); + entity = scene->CreateEntity("Empty"); } if(ImGui::BeginMenu("3D")) { if (ImGui::MenuItem("Camera")) { - Engine::GetCurrentScene()->CreateEntity("Camera").AddComponent(); + entity = scene->CreateEntity("Camera"); + entity.AddComponent(); } if (ImGui::MenuItem("Model")) { - Engine::GetCurrentScene()->CreateEntity("Model").AddComponent(); + entity = scene->CreateEntity("Model"); + entity.AddComponent(); } if (ImGui::MenuItem("Skinned Model")) { - Engine::GetCurrentScene()->CreateEntity("Skinned Model").AddComponent(); + entity = scene->CreateEntity("Skinned Model"); + entity.AddComponent(); } if (ImGui::MenuItem("Sprite")) { - Engine::GetCurrentScene()->CreateEntity("Sprite").AddComponent(); + entity = scene->CreateEntity("Sprite"); + entity.AddComponent(); } if (ImGui::MenuItem("Particle Emitter")) { - Engine::GetCurrentScene()->CreateEntity("Particle Emitter").AddComponent(); + entity = scene->CreateEntity("Particle Emitter"); + entity.AddComponent(); } if (ImGui::MenuItem("Light")) { - Engine::GetCurrentScene()->CreateEntity("Light").AddComponent(); + entity = scene->CreateEntity("Light"); + entity.AddComponent(); } if (ImGui::MenuItem("Quake Map")) { - Engine::GetCurrentScene()->CreateEntity("Quake Map").AddComponent(); + entity = scene->CreateEntity("Quake Map"); + entity.AddComponent(); } if (ImGui::MenuItem("NavMesh Volume")) { - Engine::GetCurrentScene()->CreateEntity("NavMesh Volume").AddComponent(); + entity = scene->CreateEntity("NavMesh Volume"); + entity.AddComponent(); } ImGui::EndMenu(); } @@ -2042,11 +2051,13 @@ namespace Nuake { { if (ImGui::MenuItem("Character Controller")) { - Engine::GetCurrentScene()->CreateEntity("Character Controller").AddComponent(); + entity = scene->CreateEntity("Character Controller"); + entity.AddComponent(); } if (ImGui::MenuItem("Rigid Body")) { - Engine::GetCurrentScene()->CreateEntity("Rigid Body").AddComponent(); + entity = scene->CreateEntity("Rigid Body"); + entity.AddComponent(); } ImGui::EndMenu(); } @@ -2055,23 +2066,28 @@ namespace Nuake { { if (ImGui::MenuItem("Box Collider")) { - Engine::GetCurrentScene()->CreateEntity("Box Collider").AddComponent(); + entity = scene->CreateEntity("Box Collider"); + entity.AddComponent(); } if (ImGui::MenuItem("Sphere Collider")) { - Engine::GetCurrentScene()->CreateEntity("Sphere Collider").AddComponent(); + entity = scene->CreateEntity("Sphere Collider"); + entity.AddComponent(); } if (ImGui::MenuItem("Capsule Collider")) { - Engine::GetCurrentScene()->CreateEntity("Capsule Collider").AddComponent(); + entity = scene->CreateEntity("Capsule Collider"); + entity.AddComponent(); } if (ImGui::MenuItem("Cylinder Collider")) { - Engine::GetCurrentScene()->CreateEntity("Cylinder Collider").AddComponent(); + entity = scene->CreateEntity("Cylinder Collider"); + entity.AddComponent(); } if (ImGui::MenuItem("Mesh Collider")) { - Engine::GetCurrentScene()->CreateEntity("Mesh Collider").AddComponent(); + entity = scene->CreateEntity("Mesh Collider"); + entity.AddComponent(); } ImGui::EndMenu(); } @@ -2080,7 +2096,8 @@ namespace Nuake { { if (ImGui::MenuItem("Audio Emitter")) { - Engine::GetCurrentScene()->CreateEntity("Audio Emitter").AddComponent(); + entity = scene->CreateEntity("Audio Emitter"); + entity.AddComponent(); } ImGui::EndMenu(); } @@ -2089,11 +2106,28 @@ namespace Nuake { { if (ImGui::MenuItem("Script")) { - Engine::GetCurrentScene()->CreateEntity("Script").AddComponent(); + entity = scene->CreateEntity("Script"); + entity.AddComponent(); } ImGui::EndMenu(); } + if (entity.IsValid()) + { + if (Selection.Type == EditorSelectionType::Entity && Selection.Entity.IsValid()) + { + Selection.Entity.AddChild(entity); + } + else + { + auto& camera = Engine::GetCurrentScene()->m_EditorCamera; + Vector3 newEntityPos = camera->Translation + camera->Direction; + entity.GetComponent().SetLocalPosition(newEntityPos); + } + + Selection = EditorSelection(entity); + } + ImGui::EndPopup(); } @@ -2809,7 +2843,6 @@ namespace Nuake { if (ImGui::MenuItem("Save scene", "CTR+SHIFT+L+S")) { Engine::GetCurrentScene()->Save(); - Selection = EditorSelection(); SetStatusMessage("Scene saved succesfully."); } if (ImGui::MenuItem("Save scene as...", "CTRL+SHIFT+S")) @@ -2898,34 +2931,51 @@ namespace Nuake { { if (ImGui::BeginMenu("Create new")) { + Entity entity; if (ImGui::MenuItem("Empty")) { - auto ent = Engine::GetCurrentScene()->CreateEntity("Empty entity"); + entity = Engine::GetCurrentScene()->CreateEntity("Empty entity"); } if (ImGui::MenuItem("Light")) { - auto ent = Engine::GetCurrentScene()->CreateEntity("Light"); - ent.AddComponent(); + entity = Engine::GetCurrentScene()->CreateEntity("Light"); + entity.AddComponent(); } if (ImGui::MenuItem("Camera")) { - auto ent = Engine::GetCurrentScene()->CreateEntity("Camera"); - ent.AddComponent(); + entity = Engine::GetCurrentScene()->CreateEntity("Camera"); + entity.AddComponent(); } if (ImGui::MenuItem("Rigidbody")) { - auto ent = Engine::GetCurrentScene()->CreateEntity("Rigidbody"); - ent.AddComponent(); + entity = Engine::GetCurrentScene()->CreateEntity("Rigidbody"); + entity.AddComponent(); } if (ImGui::MenuItem("Trenchbroom map")) { - auto ent = Engine::GetCurrentScene()->CreateEntity("Trenchbroom map"); - ent.AddComponent(); + entity = Engine::GetCurrentScene()->CreateEntity("Trenchbroom map"); + entity.AddComponent(); } if (ImGui::MenuItem("Model")) { - auto ent = Engine::GetCurrentScene()->CreateEntity("Model"); - ent.AddComponent(); + entity = Engine::GetCurrentScene()->CreateEntity("Model"); + entity.AddComponent(); + } + + if (entity.IsValid()) + { + if (Selection.Type == EditorSelectionType::Entity && Selection.Entity.IsValid()) + { + Selection.Entity.AddChild(entity); + } + else + { + auto camera = Engine::GetCurrentScene()->m_EditorCamera; + Vector3 newEntityPos = camera->Translation + camera->Direction; + entity.GetComponent().SetLocalPosition(newEntityPos); + } + + Selection = EditorSelection(entity); } ImGui::EndMenu(); } @@ -2994,7 +3044,6 @@ namespace Nuake { Engine::GetProject()->Save(); Engine::GetCurrentScene()->Save(); - Selection = EditorSelection(); } else if(ImGui::IsKeyPressed(ImGuiKey_O)) {