87 lines
2.5 KiB
C++
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
|