#pragma once #include #include namespace lt::renderer { namespace vk { class Context; class Renderer; class Pass; class ValidationObserver; } // namespace vk class System: public app::ISystem { public: struct CreateInfo { Ref registry; ecs::Entity surface_entity; Ref system_stats; }; System(CreateInfo info); ~System() override; System(System &&) = default; System(const System &) = delete; auto operator=(System &&) -> System & = default; auto operator=(const System &) -> System & = delete; void on_register() override; void on_unregister() override; void tick(app::TickInfo tick) override; [[nodiscard]] auto get_stats() const -> const app::SystemStats & { return *m_stats; } [[nodiscard]] auto get_last_tick_result() const -> const app::TickResult & override { return m_last_tick_result; } private: class vk::ValidationObserver *m_validation_observer; Ref m_registry; Ref m_stats; Scope m_context; Ref m_pass; Scope m_renderer; app::TickResult m_last_tick_result {}; uint32_t m_frame_idx {}; }; } // namespace lt::renderer