coral_input.h 845 B

1234567891011121314151617181920212223242526272829303132
  1. #ifndef CORAL_INPUT_H
  2. #define CORAL_INPUT_H
  3. #include <map>
  4. #include <vector>
  5. #include <functional>
  6. // https://stackoverflow.com/questions/55573238/how-do-i-do-a-proper-input-class-in-glfw-for-a-game-engine
  7. class GLFWwindow;
  8. namespace coral_3d
  9. {
  10. class coral_input final
  11. {
  12. public:
  13. using Callback = std::pair<bool,std::function<void()>>;
  14. coral_input();
  15. ~coral_input();
  16. void add_callback(int key, const Callback& callback);
  17. static void initialize(GLFWwindow* ptr_window);
  18. private:
  19. void update_key_state(int key, int state);
  20. static void callback(GLFWwindow* ptr_window, int key, int scancode, int action, int mods);
  21. static std::vector<coral_input*> instances_;
  22. std::map<int, std::vector<Callback>> callbacks_;
  23. };
  24. } // coral_3d
  25. #endif // CORAL_INPUT_H