fix: api updates

This commit is contained in:
2026-06-25 03:22:35 +02:00
parent 81ab2a8a4a
commit 3bc8ba02e1
3 changed files with 34 additions and 29 deletions
+4 -2
View File
@@ -15,10 +15,12 @@ class Scene final {
friend Scene& SceneManager::CreateScene(const std::string& name); friend Scene& SceneManager::CreateScene(const std::string& name);
public: public:
void Add(std::shared_ptr<GameObject> object); // void Add(std::shared_ptr<GameObject> object);
void Remove(const std::shared_ptr<GameObject>& object); void Remove(GameObject* object);
void RemoveAll(); void RemoveAll();
GameObject* CreateGameObject(std::string name);
void Load(); void Load();
void Update(); void Update();
+25 -18
View File
@@ -21,17 +21,36 @@ Scene::Scene(const std::string& name) : m_name(name) {
Scene::~Scene() = default; Scene::~Scene() = default;
void Scene::Add(std::shared_ptr<GameObject> object) { // void Scene::Add(std::shared_ptr<GameObject> object) {
// m_objects.emplace_back(std::move(object)); // // m_objects.emplace_back(std::move(object));
m_pendingAdditions.emplace_back(std::move(object)); // m_pendingAdditions.emplace_back(std::move(object));
// }
GameObject* Scene::CreateGameObject(std::string name)
{
auto obj = std::make_shared<GameObject>(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<GameObject>& object) { void Scene::Remove(GameObject* object) {
std::erase(m_objects, object); std::erase_if(m_objects, [object](const std::shared_ptr<GameObject>& obj) {
return obj.get() == object;
});
std::erase_if(m_pendingAdditions, [object](const std::shared_ptr<GameObject>& obj) {
return obj.get() == object;
});
} }
void Scene::RemoveAll() { void Scene::RemoveAll() {
m_objects.clear(); m_objects.clear();
m_pendingAdditions.clear();
} }
void Scene::Load() { void Scene::Load() {
@@ -80,18 +99,6 @@ void Scene::Render(const RenderContext& ctx) const {
object->Render(ctx); object->Render(ctx);
} }
} }
// int width, height;
// SDL_GetWindowSize(Renderer::GetInstance().GetSDLWindow(), &width, &height);
//
// Renderer::GetInstance().RenderLine(
// static_cast<float>(width / 2), 0,
// static_cast<float>(width / 2), static_cast<float>(height), SDL_Color(255, 0, 0, 255) // Red vertical line
// );
//
// Renderer::GetInstance().RenderLine(
// 0, static_cast<float>(height / 2), static_cast<float>(width), static_cast<float>(height / 2), SDL_Color(0, 255, 0, 255) // Green horizontal line
// );
} }
void Scene::RenderImgui() { void Scene::RenderImgui() {
@@ -145,6 +152,6 @@ void Scene::DestroyGameObjects() {
gameObject->Destroy(); gameObject->Destroy();
} }
} else { } else {
assert(true && "Scene is being cleared but not unloaded? Wierd"); assert(m_BeingUnloaded && "Scene is being cleared but not unloaded? Weird");
} }
} }
+5 -9
View File
@@ -99,7 +99,7 @@ void LightKeeper::customInit()
renderer.setSkyboxTexture(skyboxCubemap->GetCubeMapImageID()); renderer.setSkyboxTexture(skyboxCubemap->GetCubeMapImageID());
const auto planeObj = std::make_shared<GameObject>("GroundPlane"); const auto planeObj = scene.CreateGameObject("GroundPlane");
const auto planeMeshComp = planeObj->AddComponent<MeshRendererComponent>(); const auto planeMeshComp = planeObj->AddComponent<MeshRendererComponent>();
auto planeModel = ModelDoc::LoadModel( auto planeModel = ModelDoc::LoadModel(
@@ -136,10 +136,9 @@ void LightKeeper::customInit()
auto* floorRb = planeObj->AddComponent<Rigidbody>(); auto* floorRb = planeObj->AddComponent<Rigidbody>();
floorRb->SetType(RigidbodyType::Static); floorRb->SetType(RigidbodyType::Static);
scene.GetPhysics().RegisterGameObject(*planeObj); scene.GetPhysics().RegisterGameObject(*planeObj);
scene.Add(planeObj);
const auto CharObj = std::make_shared<GameObject>("Character"); const auto CharObj = scene.CreateGameObject("Character");
capybara = CharObj.get(); capybara = CharObj;
ModelDoc::LoadOptions characterModelOptions{}; ModelDoc::LoadOptions characterModelOptions{};
characterModelOptions.meshImportMode = ModelDoc::MeshImportMode::MergedPerNode; 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().SetWorldPosition(glm::vec3(0.f, 0.f, 0.f));
// CharObj->GetTransform().SetWorldScale(0.01f, 0.01f, 0.01f); // CharObj->GetTransform().SetWorldScale(0.01f, 0.01f, 0.01f);
scene.Add(CharObj);
// ModelDoc::LoadOptions options{}; // ModelDoc::LoadOptions options{};
// options.meshImportMode = ModelDoc::MeshImportMode::MergedPerNode; // options.meshImportMode = ModelDoc::MeshImportMode::MergedPerNode;
@@ -263,7 +261,7 @@ void LightKeeper::customInit()
{ {
const auto CharObj = std::make_shared<GameObject>("Character"); const auto CharObj = scene.CreateGameObject("Character");
ModelDoc::LoadOptions characterOptions{}; ModelDoc::LoadOptions characterOptions{};
characterOptions.meshImportMode = ModelDoc::MeshImportMode::MergedPerNode; characterOptions.meshImportMode = ModelDoc::MeshImportMode::MergedPerNode;
@@ -328,7 +326,6 @@ void LightKeeper::customInit()
CharObj->GetTransform().SetWorldPosition(glm::vec3(0.f)); CharObj->GetTransform().SetWorldPosition(glm::vec3(0.f));
CharObj->GetTransform().SetWorldPosition(glm::vec3(5, 0, 0)); CharObj->GetTransform().SetWorldPosition(glm::vec3(5, 0, 0));
scene.Add(CharObj);
} }
auto cubeModel = ModelDoc::LoadModel( auto cubeModel = ModelDoc::LoadModel(
@@ -456,7 +453,7 @@ void LightKeeper::customUpdate(float dt)
ImGui::Begin("Test"); ImGui::Begin("Test");
if (ImGui::Button("SPawn ball")) if (ImGui::Button("SPawn ball"))
{ {
auto sphere = std::make_shared<GameObject>("Sphere"); auto sphere = SceneManager::GetInstance().GetCurrentScene().CreateGameObject("Sphere");
sphere->AddComponent<SphereCollider>(1.5f); sphere->AddComponent<SphereCollider>(1.5f);
auto rb = sphere->AddComponent<Rigidbody>(); auto rb = sphere->AddComponent<Rigidbody>();
rb->SetMass(1000); rb->SetMass(1000);
@@ -469,7 +466,6 @@ void LightKeeper::customUpdate(float dt)
sphere->GetTransform().SetWorldScale(glm::vec3{0.015f}); sphere->GetTransform().SetWorldScale(glm::vec3{0.015f});
SceneManager::GetInstance().GetCurrentScene().Add(sphere);
SceneManager::GetInstance().GetCurrentScene().GetPhysics().RegisterGameObject(*sphere); SceneManager::GetInstance().GetCurrentScene().GetPhysics().RegisterGameObject(*sphere);
} }
ImGui::End(); ImGui::End();