#pragma once #include #include #include #include #include namespace lt::surface { class System: public app::ISystem { public: [[nodiscard]] System(memory::Ref registry); ~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; __attribute__((no_sanitize_memory)) void create_surface_component( ecs::EntityId entity, SurfaceComponent::CreateInfo info ); void tick(app::TickInfo tick) override; [[nodiscard]] auto get_last_tick_result() const -> const app::TickResult & override { return m_last_tick_result; } private: __attribute__((no_sanitize_memory)) void on_surface_destruct( ecs::Registry ®istry, ecs::EntityId entity ); void handle_requests(struct SurfaceComponent &surface); void handle_events(struct SurfaceComponent &surface); __attribute__((no_sanitize_memory)) void modify_title( struct SurfaceComponent &surface, const struct ModifyTitleRequest &request ); __attribute__((no_sanitize_memory)) void modify_resolution( struct SurfaceComponent &surface, const struct ModifyResolutionRequest &request ); __attribute__((no_sanitize_memory)) void modify_position( struct SurfaceComponent &surface, const struct ModifyPositionRequest &request ); __attribute__((no_sanitize_memory)) void modify_visiblity( struct SurfaceComponent &surface, const struct ModifyVisibilityRequest &request ); memory::Ref m_registry; app::TickResult m_last_tick_result; }; } // namespace lt::surface