#include "inputpump.hpp" #include #include #include #include #include const std::map translatekey = { { GLFW_KEY_A, Key::A }, { GLFW_KEY_B, Key::B }, { GLFW_KEY_C, Key::C }, { GLFW_KEY_D, Key::D }, { GLFW_KEY_E, Key::E }, { GLFW_KEY_F, Key::F }, { GLFW_KEY_G, Key::G }, { GLFW_KEY_H, Key::H }, { GLFW_KEY_I, Key::I }, { GLFW_KEY_J, Key::J }, { GLFW_KEY_K, Key::K }, { GLFW_KEY_L, Key::L }, { GLFW_KEY_M, Key::M }, { GLFW_KEY_N, Key::N }, { GLFW_KEY_O, Key::O }, { GLFW_KEY_P, Key::P }, { GLFW_KEY_Q, Key::Q }, { GLFW_KEY_R, Key::R }, { GLFW_KEY_S, Key::S }, { GLFW_KEY_T, Key::T }, { GLFW_KEY_U, Key::U }, { GLFW_KEY_V, Key::V }, { GLFW_KEY_W, Key::W }, { GLFW_KEY_X, Key::X }, { GLFW_KEY_Y, Key::Y }, { GLFW_KEY_Z, Key::Z }, { GLFW_KEY_TAB, Key::Tab }, { GLFW_KEY_UP, Key::UpArrow }, { GLFW_KEY_LEFT, Key::LeftArrow }, { GLFW_KEY_RIGHT, Key::RightArrow }, { GLFW_KEY_DOWN, Key::DownArrow }, { GLFW_KEY_BACKSPACE, Key::Backspace }, { GLFW_KEY_ENTER, Key::Enter }, { GLFW_KEY_LEFT_CONTROL, Key::LeftControl }, { GLFW_KEY_RIGHT_CONTROL, Key::RightControl }, { GLFW_KEY_LEFT_SHIFT, Key::LeftShift }, { GLFW_KEY_RIGHT_SHIFT, Key::RightShift }, { GLFW_KEY_LEFT_ALT, Key::LeftAlt }, { GLFW_KEY_RIGHT_ALT, Key::RightAlt }, { GLFW_KEY_LEFT_SUPER, Key::LeftSuper }, { GLFW_KEY_RIGHT_SUPER, Key::RightSuper } }; static void cursor_pos_callback(GLFWwindow*, double xpos, double ypos) { Input::FeedMousePosition(static_cast(xpos), static_cast(ypos)); } void mouse_button_callback(GLFWwindow*, int button, int action, int) { switch(button) { case GLFW_MOUSE_BUTTON_LEFT: Input::FeedMouseState(MouseButton::Left, action); break; case GLFW_MOUSE_BUTTON_RIGHT: Input::FeedMouseState(MouseButton::Right, action); break; default: break; } } void scroll_callback(GLFWwindow*, double, double yoffset) { Input::FeedScroll(yoffset); } void key_callback(GLFWwindow*, int key, int, int action, int) { if(!translatekey.count(key)) return; Input::FeedKeyState(translatekey.at(key), action); } void char_callback(GLFWwindow*, unsigned int c) { Input::FeedChar(c); } void InputPump::Initialize() { Log::Print("Setting up input callbacks..."); GLFWwindow* window = static_cast(Platform::GetUserData()); glfwSetCursorPosCallback(window, cursor_pos_callback); glfwSetMouseButtonCallback(window, mouse_button_callback); glfwSetScrollCallback(window, scroll_callback); glfwSetKeyCallback(window, key_callback); glfwSetCharCallback(window, char_callback); glfwSetInputMode(window, GLFW_STICKY_KEYS, 1); //glfwSetInputMode(window, GLFW_STICKY_MOUSE_BUTTONS, 1); } void InputPump::PollEvents() { glfwPollEvents(); }