#include #include #include #include #include namespace Light { Scene::Scene(): m_registry() { } Scene::~Scene() { } void Scene::OnCreate() { /* native scripts */ { m_registry.view().each([](NativeScriptComponent &nsc) { if (nsc.instance == nullptr) { nsc.instance = nsc.CreateInstance(); nsc.instance->OnCreate(); } }); } } void Scene::OnUpdate(float deltaTime) { /* native scripts */ { m_registry.view().each([=](NativeScriptComponent &nsc) { nsc.instance->OnUpdate(deltaTime); }); } } void Scene::OnRender(const Ref &targetFrameBuffer /* = nullptr */) { Camera *sceneCamera = nullptr; TransformComponent *sceneCameraTransform; /* scene camera */ { m_registry.group(entt::get) .each([&](TransformComponent &transformComp, CameraComponent &cameraComp) { if (cameraComp.isPrimary) { sceneCamera = &cameraComp.camera; sceneCameraTransform = &transformComp; } }); } /* draw quads */ { if (sceneCamera) { Renderer::BeginScene(sceneCamera, *sceneCameraTransform, targetFrameBuffer); m_registry.group(entt::get) .each([](TransformComponent &transformComp, SpriteRendererComponent &spriteRendererComp) { Renderer::DrawQuad( transformComp, spriteRendererComp.tint, spriteRendererComp.texture ); }); Renderer::EndScene(); } } } Entity Scene::CreateEntity(const std::string &name, const TransformComponent &transform) { return CreateEntityWithUUID(name, UUID(), transform); } Entity Scene::GetEntityByTag(const std::string &tag) { // TagComponent tagComp(tag); // entt::entity entity = entt::to_entity(m_registry, tagComp); Entity entity; m_registry.view().each([&](TagComponent &tagComp) { // if (tagComp.tag == tag) // entity = Entity(entt::to_entity(m_registry, tagComp), this); }); if (entity.IsValid()) return entity; else { ASSERT("Scene::GetEntityByTag: failed to find entity by tag: {}", tag); return Entity(); } } Entity Scene::CreateEntityWithUUID( const std::string &name, UUID uuid, const TransformComponent &transform ) { Entity entity { m_registry.create(), this }; entity.AddComponent(name); entity.AddComponent(transform); entity.AddComponent(uuid); return entity; } } // namespace Light