#pragma once #include #include #include #include #include namespace lt::input { class System: public app::ISystem { public: System(Ref registry); void tick(app::TickInfo tick) override; void on_register() override; void on_unregister() override; [[nodiscard]] auto get_last_tick_result() const -> const app::TickResult & override { return m_last_tick_result; } private: void handle_event(const surface::SurfaceComponent::Event &event); void on_surface_lost_focus(); void on_key_press(const lt::surface::KeyPressedEvent &event); void on_key_release(const lt::surface::KeyReleasedEvent &event); void on_pointer_move(const lt::surface::MouseMovedEvent &event); void on_button_press(const lt::surface::ButtonPressedEvent &event); void on_button_release(const lt::surface::ButtonReleasedEvent &event); Ref m_registry; std::array m_keys {}; std::array m_buttons {}; math::vec2 m_pointer_position; app::TickResult m_last_tick_result {}; }; } // namespace lt::input