From 3bc8ba02e125996a8a689be6e7b3049e13a73253 Mon Sep 17 00:00:00 2001 From: Bram Verhulst Date: Thu, 25 Jun 2026 03:22:35 +0200 Subject: [PATCH] fix: api updates --- destrum/include/destrum/Scene/Scene.h | 6 ++-- destrum/src/Scene/Scene.cpp | 43 ++++++++++++++++----------- lightkeeper/src/Lightkeeper.cpp | 14 ++++----- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/destrum/include/destrum/Scene/Scene.h b/destrum/include/destrum/Scene/Scene.h index 25403cb..d548165 100644 --- a/destrum/include/destrum/Scene/Scene.h +++ b/destrum/include/destrum/Scene/Scene.h @@ -15,10 +15,12 @@ class Scene final { friend Scene& SceneManager::CreateScene(const std::string& name); public: - void Add(std::shared_ptr object); - void Remove(const std::shared_ptr& object); + // void Add(std::shared_ptr object); + void Remove(GameObject* object); void RemoveAll(); + GameObject* CreateGameObject(std::string name); + void Load(); void Update(); diff --git a/destrum/src/Scene/Scene.cpp b/destrum/src/Scene/Scene.cpp index 4f87ba3..cf206db 100644 --- a/destrum/src/Scene/Scene.cpp +++ b/destrum/src/Scene/Scene.cpp @@ -21,17 +21,36 @@ Scene::Scene(const std::string& name) : m_name(name) { Scene::~Scene() = default; -void Scene::Add(std::shared_ptr object) { - // m_objects.emplace_back(std::move(object)); - m_pendingAdditions.emplace_back(std::move(object)); +// void Scene::Add(std::shared_ptr object) { +// // m_objects.emplace_back(std::move(object)); +// m_pendingAdditions.emplace_back(std::move(object)); +// } + +GameObject* Scene::CreateGameObject(std::string name) +{ + auto obj = std::make_shared(std::move(name)); + + GameObject* rawPtr = obj.get(); + + // obj->SetScene(this); + m_pendingAdditions.emplace_back(std::move(obj)); + + return rawPtr; } -void Scene::Remove(const std::shared_ptr& object) { - std::erase(m_objects, object); +void Scene::Remove(GameObject* object) { + std::erase_if(m_objects, [object](const std::shared_ptr& obj) { + return obj.get() == object; + }); + + std::erase_if(m_pendingAdditions, [object](const std::shared_ptr& obj) { + return obj.get() == object; + }); } void Scene::RemoveAll() { m_objects.clear(); + m_pendingAdditions.clear(); } void Scene::Load() { @@ -80,18 +99,6 @@ void Scene::Render(const RenderContext& ctx) const { object->Render(ctx); } } - - // int width, height; - // SDL_GetWindowSize(Renderer::GetInstance().GetSDLWindow(), &width, &height); - // - // Renderer::GetInstance().RenderLine( - // static_cast(width / 2), 0, - // static_cast(width / 2), static_cast(height), SDL_Color(255, 0, 0, 255) // Red vertical line - // ); - // - // Renderer::GetInstance().RenderLine( - // 0, static_cast(height / 2), static_cast(width), static_cast(height / 2), SDL_Color(0, 255, 0, 255) // Green horizontal line - // ); } void Scene::RenderImgui() { @@ -145,6 +152,6 @@ void Scene::DestroyGameObjects() { gameObject->Destroy(); } } else { - assert(true && "Scene is being cleared but not unloaded? Wierd"); + assert(m_BeingUnloaded && "Scene is being cleared but not unloaded? Weird"); } } diff --git a/lightkeeper/src/Lightkeeper.cpp b/lightkeeper/src/Lightkeeper.cpp index aec3901..5844f8e 100644 --- a/lightkeeper/src/Lightkeeper.cpp +++ b/lightkeeper/src/Lightkeeper.cpp @@ -99,7 +99,7 @@ void LightKeeper::customInit() renderer.setSkyboxTexture(skyboxCubemap->GetCubeMapImageID()); - const auto planeObj = std::make_shared("GroundPlane"); + const auto planeObj = scene.CreateGameObject("GroundPlane"); const auto planeMeshComp = planeObj->AddComponent(); auto planeModel = ModelDoc::LoadModel( @@ -136,10 +136,9 @@ void LightKeeper::customInit() auto* floorRb = planeObj->AddComponent(); floorRb->SetType(RigidbodyType::Static); scene.GetPhysics().RegisterGameObject(*planeObj); - scene.Add(planeObj); - const auto CharObj = std::make_shared("Character"); - capybara = CharObj.get(); + const auto CharObj = scene.CreateGameObject("Character"); + capybara = CharObj; ModelDoc::LoadOptions characterModelOptions{}; characterModelOptions.meshImportMode = ModelDoc::MeshImportMode::MergedPerNode; @@ -206,7 +205,6 @@ void LightKeeper::customInit() CharObj->GetTransform().SetWorldPosition(glm::vec3(0.f, 0.f, 0.f)); // CharObj->GetTransform().SetWorldScale(0.01f, 0.01f, 0.01f); - scene.Add(CharObj); // ModelDoc::LoadOptions options{}; // options.meshImportMode = ModelDoc::MeshImportMode::MergedPerNode; @@ -263,7 +261,7 @@ void LightKeeper::customInit() { - const auto CharObj = std::make_shared("Character"); + const auto CharObj = scene.CreateGameObject("Character"); ModelDoc::LoadOptions characterOptions{}; characterOptions.meshImportMode = ModelDoc::MeshImportMode::MergedPerNode; @@ -328,7 +326,6 @@ void LightKeeper::customInit() CharObj->GetTransform().SetWorldPosition(glm::vec3(0.f)); CharObj->GetTransform().SetWorldPosition(glm::vec3(5, 0, 0)); - scene.Add(CharObj); } auto cubeModel = ModelDoc::LoadModel( @@ -456,7 +453,7 @@ void LightKeeper::customUpdate(float dt) ImGui::Begin("Test"); if (ImGui::Button("SPawn ball")) { - auto sphere = std::make_shared("Sphere"); + auto sphere = SceneManager::GetInstance().GetCurrentScene().CreateGameObject("Sphere"); sphere->AddComponent(1.5f); auto rb = sphere->AddComponent(); rb->SetMass(1000); @@ -469,7 +466,6 @@ void LightKeeper::customUpdate(float dt) sphere->GetTransform().SetWorldScale(glm::vec3{0.015f}); - SceneManager::GetInstance().GetCurrentScene().Add(sphere); SceneManager::GetInstance().GetCurrentScene().GetPhysics().RegisterGameObject(*sphere); } ImGui::End();