fix: api updates
This commit is contained in:
@@ -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
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user