#pragma once #include #include "MinimalEngine.h" #include "Graphics/Graphics.h" #include "Physics/PhysicsSystem.h" #include "Component/Skybox.h" #include "LightEnvironment.h" namespace Seele { DECLARE_REF(Material) DECLARE_REF(Entity) class Scene { public: Scene(Gfx::PGraphics graphics); ~Scene(); void update(float deltaTime); entt::entity createEntity() { return registry.create(); } void destroyEntity(entt::entity identifier) { registry.destroy(identifier); } template Component& attachComponent(entt::entity entity, Args&&... args) { return registry.emplace(entity, std::forward(args)...); } template Component& accessComponent(entt::entity entity) { return registry.get(entity); } template const Component& accessComponent(entt::entity entity) const { return registry.get(entity); } template void view(Func func) requires std::is_invocable_v || std::is_invocable_v { registry.view().each(func); } PLightEnvironment getLightEnvironment() { return lightEnv; } Gfx::PGraphics getGraphics() const { return graphics; } entt::registry registry; private: PLightEnvironment lightEnv; PhysicsSystem physics; Gfx::PGraphics graphics; }; DEFINE_REF(Scene) } // namespace Seele