#ifndef __MLX_INPUTS__ #define __MLX_INPUTS__ #include #include #include namespace mlx { class Inputs { public: struct Hook { func::function hook; void* param = nullptr; }; public: Inputs() = default; void FetchInputs(); inline void RegisterWindow(std::shared_ptr window) { m_windows[window->GetID()] = window; } std::int32_t GetX() const noexcept; std::int32_t GetY() const noexcept; std::int32_t GetXRel() const noexcept; std::int32_t GetYRel() const noexcept; inline bool IsMouseMoving() const noexcept { return GetXRel() || GetYRel(); } MLX_FORCEINLINE bool IsRunning() const noexcept { return m_run; } MLX_FORCEINLINE constexpr void Finish() noexcept { m_run = false; } MLX_FORCEINLINE constexpr void Run() noexcept { m_run = true; } inline void OnEvent(std::uint32_t id, int event, int (*funct_ptr)(int, void*), void* param) noexcept { m_events_hooks[id][event].hook = funct_ptr; m_events_hooks[id][event].param = param; } ~Inputs() = default; private: std::unordered_map> m_windows; std::unordered_map> m_events_hooks; bool m_run = false; }; } #endif