#pragma once #include #include #include class Listener; class MouseListener; class Input { friend Listener; friend MouseListener; public: explicit Input(GLFWwindow* window); static Input* instance; static std::map KeyIsDown; static std::map MouseButtonIsDown; private: GLFWwindow* window; std::set listeners; void keyPressed(int key); void keyReleased(int key); void mouseButtonPressed(int button); void mouseButtonReleased(int button); void mouseMoved(double newX, double newY); double oldX {}, oldY {}; }; class Listener { public: Listener(); virtual ~Listener(); }; class KeyListener : Listener { }; class MouseListener : public Listener { public: virtual void mouseMoved(float deltaX, float deltaY) {}; };