110 lines
No EOL
3.1 KiB
C++
110 lines
No EOL
3.1 KiB
C++
#include "inputpump.hpp"
|
|
|
|
#include <GLFW/glfw3.h>
|
|
#include <platform.hpp>
|
|
#include <map>
|
|
#include <input.hpp>
|
|
#include <log.hpp>
|
|
|
|
const std::map<int, Key> 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<float>(xpos), static_cast<float>(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<GLFWwindow*>(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();
|
|
} |