#pragma once #include #include struct GLFWwindow; namespace lt::renderer { /** The system for putting gore on your display * * Exclusively operates on components: * - RendererComponent * - PostEffectsComponent * - UserInterfaceComponent * * Requires read acces on components: * - TransformComponent */ class System { public: /** The configurations of this system. */ struct Properties { }; /** The requirements for this system to initialize. */ struct InitRequirements { GLFWwindow *glfw_window_handle; Ref registry; }; /** The requirements for this system to tick. */ struct TickRequirements { double delta_time; }; [[nodiscard]] System(InitRequirements requirements); System(System &&) = default; System(const System &) = delete; auto operator=(System &&) -> System & = default; auto operator=(const System &) -> System & = delete; ~System(); void tick(TickRequirements requirements); private: Ref m_registry; }; } // namespace lt::renderer