16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-18 00:49:19 +02:00
Files
maszyna/entitysystem/scenes/GameScene.cpp
2026-05-24 21:48:05 +02:00

99 lines
2.9 KiB
C++

//
// Created by Daniu
//
#include "GameScene.h"
#include "entitysystem/components/BasicComponents.h"
#include "entitysystem/components/RenderComponents.h"
#include "entitysystem/systems/MovementSystem.h"
#include "entitysystem/systems/ParticlesSystem.h"
#include "entitysystem/systems/MeshRenderSystem.h"
#include "entitysystem/systems/LODSystem.h"
#include "entitysystem/systems/SoundSystem.h"
#include "entitysystem/systems/LightSystem.h"
#include "entitysystem/systems/HierarchySystem.h"
#include "entitysystem/systems/LineSystem.h"
#include "entitysystem/systems/VehicleSyncSystem.h"
#include "entitysystem/systems/BillboardSystem.h"
#include "utilities/Logs.h"
GameScene::GameScene() = default;
GameScene::~GameScene() = default;
void GameScene::OnLoad()
{
m_systems.AddSystem<VehicleSyncSystem>(); // must be first — updates Transform from live vehicle
m_systems.AddSystem<MovementSystem>();
m_systems.AddSystem<HierarchySystem>();
m_systems.AddSystem<LightSystem>();
m_systems.AddSystem<ParticlesSystem>();
m_systems.AddSystem<SoundSystem>();
m_systems.AddSystem<LODSystem>();
m_systems.AddSystem<MeshRenderSystem>();
m_systems.AddSystem<LineSystem>();
m_systems.AddSystem<BillboardSystem>();
#ifdef _DEBUG
CreateTestEntities();
#endif
}
void GameScene::OnUpdate(float dt)
{
}
void GameScene::OnUnload()
{
World().Clear();
}
void GameScene::CreateTestEntities()
{
auto& world = World();
// smoke emitter at world origin for visual testing of ParticlesSystem
{
auto entity = world.CreateEntity();
auto& id = world.AddComponent<ECSComponent::Identification>(entity);
id.Name = "TestSmokeEmitter";
auto& transform = world.AddComponent<ECSComponent::Transform>(entity);
transform.Position = glm::dvec3(0.0, 2.0, 0.0);
auto& emitter = world.AddComponent<ECSComponent::ParticleEmitter>(entity);
emitter.emitterLocation = glm::vec3(0.0f, 2.0f, 0.0f);
emitter.isActive = true;
emitter.spawnRate = 15.0f;
emitter.particleLifetime = 3.0f;
emitter.gravity = glm::vec3(0.0f, 0.3f, 0.0f);
emitter.airResistance = 0.2f;
emitter.colorFade = glm::vec4(0.0f, 0.0f, 0.0f, -0.4f);
WriteLog("[ECS] Created test entity: TestSmokeEmitter");
}
// moving entity to test MovementSystem + LOD culling
{
auto entity = world.CreateEntity();
auto& id = world.AddComponent<ECSComponent::Identification>(entity);
id.Name = "TestMovingBox";
auto& transform = world.AddComponent<ECSComponent::Transform>(entity);
transform.Position = glm::dvec3(10.0, 0.5, 0.0);
auto& velocity = world.AddComponent<ECSComponent::Velocity>(entity);
velocity.Value = glm::vec3(-1.0f, 0.0f, 0.0f);
auto& lod = world.AddComponent<ECSComponent::LODController>(entity);
lod.RangeMin = 0.0;
lod.RangeMax = 200.0;
auto& mesh = world.AddComponent<ECSComponent::MeshRenderer>(entity);
mesh.visible = true;
WriteLog("[ECS] Created test entity: TestMovingBox");
}
}