diff --git a/Editor/src/PropertyPanels/Inspector.cpp b/Editor/src/PropertyPanels/Inspector.cpp index 126c4dd..f2d5f1e 100644 --- a/Editor/src/PropertyPanels/Inspector.cpp +++ b/Editor/src/PropertyPanels/Inspector.cpp @@ -3,11 +3,14 @@ void Inspector::Draw() { - -} + if (selected.isValid()) { + AddComponentDropDown(); + ShowComponents(); + } +} -void Inspector::AddComponentDropDown(YoggieEngine::Entity& selected) +void Inspector::AddComponentDropDown() { static char* names[] = { "Script Component", "Camera Component", "Light Component" }; if (ImGui::Button("Add Component")) @@ -28,7 +31,7 @@ void Inspector::AddComponentDropDown(YoggieEngine::Entity& selected) } -void Inspector::ShowComponents(YoggieEngine::Entity& selected) +void Inspector::ShowComponents() { auto component = selected.GetComponent(); ImGui::InputText("Name:", (char*)component.name.c_str(), component.name.size() * sizeof(char), ImGuiInputTextFlags_ReadOnly); diff --git a/Editor/src/PropertyPanels/Inspector.h b/Editor/src/PropertyPanels/Inspector.h index e61657e..0a2647f 100644 --- a/Editor/src/PropertyPanels/Inspector.h +++ b/Editor/src/PropertyPanels/Inspector.h @@ -8,13 +8,15 @@ inline void ComponentView(const std::string& componentName, voidFunction func); class Inspector : public EditorWindow { public: - Inspector() : EditorWindow("Inspector") {} + Inspector( YoggieEngine::Entity& selected ) : EditorWindow("Inspector"), selected(selected){} void Draw()override; +private: - void AddComponentDropDown(YoggieEngine::Entity& selected); + void AddComponentDropDown(); + void ShowComponents(); - void ShowComponents(YoggieEngine::Entity& selected); + YoggieEngine::Entity& selected; }; diff --git a/Editor/src/PropertyPanels/SceneExplorer.cpp b/Editor/src/PropertyPanels/SceneExplorer.cpp index a2fc08b..bb6a5eb 100644 --- a/Editor/src/PropertyPanels/SceneExplorer.cpp +++ b/Editor/src/PropertyPanels/SceneExplorer.cpp @@ -6,8 +6,8 @@ void SceneExplorer::Draw() YoggieEngine::Entity entity = YoggieEngine::Entity(enttNumber, &scene); auto id = entity.GetComponent(); - if (ImGui::Selectable(id.name.c_str(), enttNumber == selected)) { - selected = enttNumber; + if (ImGui::Selectable(id.name.c_str(), entity == selected)) { + selected = YoggieEngine::Entity(enttNumber, &scene); } }); } \ No newline at end of file diff --git a/Editor/src/PropertyPanels/SceneExplorer.h b/Editor/src/PropertyPanels/SceneExplorer.h index 5defc18..c628208 100644 --- a/Editor/src/PropertyPanels/SceneExplorer.h +++ b/Editor/src/PropertyPanels/SceneExplorer.h @@ -5,7 +5,7 @@ class SceneExplorer : public EditorWindow { public: - SceneExplorer(entt::entity& selected, YoggieEngine::Scene& scene) + SceneExplorer(YoggieEngine::Entity& selected, YoggieEngine::Scene& scene) : EditorWindow("SceneExplorer"), scene(scene), selected(selected) {} @@ -13,7 +13,7 @@ public: private: - entt::entity selected; + YoggieEngine::Entity& selected; YoggieEngine::Scene& scene; diff --git a/Editor/src/app.cpp b/Editor/src/app.cpp index 0a59ff9..313b9ca 100644 --- a/Editor/src/app.cpp +++ b/Editor/src/app.cpp @@ -1,13 +1,10 @@ #include "../../YoggieEngine/src/EntryPoint.h" #include - #include #include #include - #include "AssetManagement/SceneSerializer.h" #include "AssetManagement/AssetManager.h" - #include "Views/Viewport.h" #include "PropertyPanels/SceneExplorer.h" #include "AssetManagement/AssetFinder.h" @@ -20,10 +17,9 @@ using namespace YoggieEngine; - class Editor : public Application { public: - Editor() : Application("Editor"), Selected((entt::entity)-1){} + Editor() : Application("Editor"){} void Run() override { @@ -40,11 +36,13 @@ public: Viewport sceneview = Viewport(scene); RuntimeControls rc = RuntimeControls(); SceneExplorer explorer(Selected, scene); - Inspector inspector = Inspector(); + Inspector inspector = Inspector(Selected); Settings settings = Settings(); // AssetFinder assetsView = AssetFinder(); Console console = Console(); + Selected = YoggieEngine::Entity((entt::entity) -1, &scene); + double previous = glfwGetTime(); double lag = 0.0; while (!appWindow.WindowShouldClose()) @@ -129,14 +127,6 @@ public: } - - if (scene.getReg().valid(Selected)) { - Entity SelectedEntity = Entity(Selected, &scene); - inspector.AddComponentDropDown(SelectedEntity); - inspector.ShowComponents(SelectedEntity); - } - - projectInfo.Update(); sceneview.Update(); rc.Update(); @@ -163,7 +153,6 @@ public: // OR // Load an empty project. mINI::INIStructure ini; - if (std::filesystem::exists("build\\Debug\\Editor.ini")) { @@ -189,7 +178,7 @@ public: private: bool SimulatePhysics = true; - entt::entity Selected; + YoggieEngine::Entity Selected; Project project; Scene scene; diff --git a/YoggieEngine/src/Scene/Entity.h b/YoggieEngine/src/Scene/Entity.h index 6ddfe04..04b7497 100644 --- a/YoggieEngine/src/Scene/Entity.h +++ b/YoggieEngine/src/Scene/Entity.h @@ -1,7 +1,8 @@ #pragma once -typedef uint64_t ENTITY_UUID; +#include "Scene.h" + namespace YoggieEngine { - class Scene; + class Entity { public: Entity() = default; @@ -25,8 +26,15 @@ namespace YoggieEngine { } // NOTE: Not Scene context aware!! - bool operator== (Entity& other) { - return m_entity == other.m_entity; + inline bool operator== (Entity& other) { + return m_entity == other.m_entity;// && other.m_scene == m_scene; + } + + inline bool isValid() { + if (m_scene == nullptr) + return false; + + return m_scene->m_registry.valid(m_entity); } private: