#include "MetaCoreScene/MetaCoreScene.h" #include "MetaCoreFoundation/MetaCoreId.h" namespace MetaCore { MetaCoreGameObject& MetaCoreScene::CreateGameObject(const std::string& name, MetaCoreId parentId) { GameObjects_.push_back(MetaCoreGameObject{ MetaCoreIdGenerator::Generate(), parentId, name, MetaCoreTransformComponent{}, std::nullopt, std::nullopt, std::nullopt }); return GameObjects_.back(); } MetaCoreGameObject* MetaCoreScene::FindGameObject(MetaCoreId objectId) { for (MetaCoreGameObject& object : GameObjects_) { if (object.Id == objectId) { return &object; } } return nullptr; } const MetaCoreGameObject* MetaCoreScene::FindGameObject(MetaCoreId objectId) const { for (const MetaCoreGameObject& object : GameObjects_) { if (object.Id == objectId) { return &object; } } return nullptr; } std::vector& MetaCoreScene::GetGameObjects() { return GameObjects_; } const std::vector& MetaCoreScene::GetGameObjects() const { return GameObjects_; } std::vector MetaCoreScene::GetRootObjectIds() const { std::vector rootIds; for (const MetaCoreGameObject& object : GameObjects_) { if (object.ParentId == 0) { rootIds.push_back(object.Id); } } return rootIds; } std::vector MetaCoreScene::GetChildrenOf(MetaCoreId parentId) const { std::vector childIds; for (const MetaCoreGameObject& object : GameObjects_) { if (object.ParentId == parentId) { childIds.push_back(object.Id); } } return childIds; } MetaCoreScene MetaCoreCreateDefaultScene() { MetaCoreScene scene; MetaCoreGameObject& mainCamera = scene.CreateGameObject("Main Camera"); mainCamera.Camera = MetaCoreCameraComponent{}; mainCamera.Camera->IsPrimary = true; mainCamera.Transform.Position = glm::vec3(0.0F, 2.2F, 6.5F); mainCamera.Transform.RotationEulerDegrees = glm::vec3(-15.0F, 0.0F, 0.0F); MetaCoreGameObject& directionalLight = scene.CreateGameObject("Directional Light"); directionalLight.Light = MetaCoreLightComponent{}; directionalLight.Transform.RotationEulerDegrees = glm::vec3(-45.0F, 30.0F, 0.0F); MetaCoreGameObject& cube = scene.CreateGameObject("Cube"); cube.MeshRenderer = MetaCoreMeshRendererComponent{}; cube.Transform.Position = glm::vec3(0.0F, 0.5F, 0.0F); return scene; } } // namespace MetaCore