MetaCore/Source/MetaCoreScene/Private/MetaCoreScene.cpp
2026-03-20 10:39:34 +08:00

87 lines
2.5 KiB
C++

#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<MetaCoreGameObject>& MetaCoreScene::GetGameObjects() {
return GameObjects_;
}
const std::vector<MetaCoreGameObject>& MetaCoreScene::GetGameObjects() const {
return GameObjects_;
}
std::vector<MetaCoreId> MetaCoreScene::GetRootObjectIds() const {
std::vector<MetaCoreId> rootIds;
for (const MetaCoreGameObject& object : GameObjects_) {
if (object.ParentId == 0) {
rootIds.push_back(object.Id);
}
}
return rootIds;
}
std::vector<MetaCoreId> MetaCoreScene::GetChildrenOf(MetaCoreId parentId) const {
std::vector<MetaCoreId> 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