182 lines
6.9 KiB
C++
182 lines
6.9 KiB
C++
#include "Input/KeyboardInputHandler.h"
|
|
|
|
KeyboardInputHandler::KeyboardInputHandler(EventBroker* eventBroker, InputProxy* inputProxy) : InputHandler(eventBroker, inputProxy)
|
|
{
|
|
EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &KeyboardInputHandler::OnKeyDown);
|
|
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &KeyboardInputHandler::OnKeyUp);
|
|
|
|
m_OriginKeyCodes["Space"] = GLFW_KEY_SPACE;
|
|
m_OriginKeyCodes["Apostrophe"] = GLFW_KEY_APOSTROPHE;
|
|
m_OriginKeyCodes["Comma"] = GLFW_KEY_COMMA;
|
|
m_OriginKeyCodes["Minus"] = GLFW_KEY_MINUS;
|
|
m_OriginKeyCodes["Period"] = GLFW_KEY_PERIOD;
|
|
m_OriginKeyCodes["Slash"] = GLFW_KEY_SLASH;
|
|
m_OriginKeyCodes["0"] = GLFW_KEY_0;
|
|
m_OriginKeyCodes["1"] = GLFW_KEY_1;
|
|
m_OriginKeyCodes["2"] = GLFW_KEY_2;
|
|
m_OriginKeyCodes["3"] = GLFW_KEY_3;
|
|
m_OriginKeyCodes["4"] = GLFW_KEY_4;
|
|
m_OriginKeyCodes["5"] = GLFW_KEY_5;
|
|
m_OriginKeyCodes["6"] = GLFW_KEY_6;
|
|
m_OriginKeyCodes["7"] = GLFW_KEY_7;
|
|
m_OriginKeyCodes["8"] = GLFW_KEY_8;
|
|
m_OriginKeyCodes["9"] = GLFW_KEY_9;
|
|
m_OriginKeyCodes["Semicolon"] = GLFW_KEY_SEMICOLON;
|
|
m_OriginKeyCodes["Equal"] = GLFW_KEY_EQUAL;
|
|
m_OriginKeyCodes["A"] = GLFW_KEY_A;
|
|
m_OriginKeyCodes["B"] = GLFW_KEY_B;
|
|
m_OriginKeyCodes["C"] = GLFW_KEY_C;
|
|
m_OriginKeyCodes["D"] = GLFW_KEY_D;
|
|
m_OriginKeyCodes["E"] = GLFW_KEY_E;
|
|
m_OriginKeyCodes["F"] = GLFW_KEY_F;
|
|
m_OriginKeyCodes["G"] = GLFW_KEY_G;
|
|
m_OriginKeyCodes["H"] = GLFW_KEY_H;
|
|
m_OriginKeyCodes["I"] = GLFW_KEY_I;
|
|
m_OriginKeyCodes["J"] = GLFW_KEY_J;
|
|
m_OriginKeyCodes["K"] = GLFW_KEY_K;
|
|
m_OriginKeyCodes["L"] = GLFW_KEY_L;
|
|
m_OriginKeyCodes["M"] = GLFW_KEY_M;
|
|
m_OriginKeyCodes["N"] = GLFW_KEY_N;
|
|
m_OriginKeyCodes["O"] = GLFW_KEY_O;
|
|
m_OriginKeyCodes["P"] = GLFW_KEY_P;
|
|
m_OriginKeyCodes["Q"] = GLFW_KEY_Q;
|
|
m_OriginKeyCodes["R"] = GLFW_KEY_R;
|
|
m_OriginKeyCodes["S"] = GLFW_KEY_S;
|
|
m_OriginKeyCodes["T"] = GLFW_KEY_T;
|
|
m_OriginKeyCodes["U"] = GLFW_KEY_U;
|
|
m_OriginKeyCodes["V"] = GLFW_KEY_V;
|
|
m_OriginKeyCodes["W"] = GLFW_KEY_W;
|
|
m_OriginKeyCodes["X"] = GLFW_KEY_X;
|
|
m_OriginKeyCodes["Y"] = GLFW_KEY_Y;
|
|
m_OriginKeyCodes["Z"] = GLFW_KEY_Z;
|
|
m_OriginKeyCodes["LeftBracket"] = GLFW_KEY_LEFT_BRACKET;
|
|
m_OriginKeyCodes["Backslash"] = GLFW_KEY_BACKSLASH;
|
|
m_OriginKeyCodes["RightBracket"] = GLFW_KEY_RIGHT_BRACKET;
|
|
m_OriginKeyCodes["Accent"] = GLFW_KEY_GRAVE_ACCENT;
|
|
m_OriginKeyCodes["W1"] = GLFW_KEY_WORLD_1;
|
|
m_OriginKeyCodes["W2"] = GLFW_KEY_WORLD_2;
|
|
m_OriginKeyCodes["Escape"] = GLFW_KEY_ESCAPE;
|
|
m_OriginKeyCodes["Enter"] = GLFW_KEY_ENTER;
|
|
m_OriginKeyCodes["Tab"] = GLFW_KEY_TAB;
|
|
m_OriginKeyCodes["Backspace"] = GLFW_KEY_BACKSPACE;
|
|
m_OriginKeyCodes["Insert"] = GLFW_KEY_INSERT;
|
|
m_OriginKeyCodes["Delete"] = GLFW_KEY_DELETE;
|
|
m_OriginKeyCodes["Right"] = GLFW_KEY_RIGHT;
|
|
m_OriginKeyCodes["Left"] = GLFW_KEY_LEFT;
|
|
m_OriginKeyCodes["Down"] = GLFW_KEY_DOWN;
|
|
m_OriginKeyCodes["Up"] = GLFW_KEY_UP;
|
|
m_OriginKeyCodes["PgUp"] = GLFW_KEY_PAGE_UP;
|
|
m_OriginKeyCodes["PgDn"] = GLFW_KEY_PAGE_DOWN;
|
|
m_OriginKeyCodes["Home"] = GLFW_KEY_HOME;
|
|
m_OriginKeyCodes["End"] = GLFW_KEY_END;
|
|
m_OriginKeyCodes["CapsLock"] = GLFW_KEY_CAPS_LOCK;
|
|
m_OriginKeyCodes["ScrollLock"] = GLFW_KEY_SCROLL_LOCK;
|
|
m_OriginKeyCodes["NumLock"] = GLFW_KEY_NUM_LOCK;
|
|
m_OriginKeyCodes["PrintScreen"] = GLFW_KEY_PRINT_SCREEN;
|
|
m_OriginKeyCodes["Pause"] = GLFW_KEY_PAUSE;
|
|
m_OriginKeyCodes["F1"] = GLFW_KEY_F1;
|
|
m_OriginKeyCodes["F2"] = GLFW_KEY_F2;
|
|
m_OriginKeyCodes["F3"] = GLFW_KEY_F3;
|
|
m_OriginKeyCodes["F4"] = GLFW_KEY_F4;
|
|
m_OriginKeyCodes["F5"] = GLFW_KEY_F5;
|
|
m_OriginKeyCodes["F6"] = GLFW_KEY_F6;
|
|
m_OriginKeyCodes["F7"] = GLFW_KEY_F7;
|
|
m_OriginKeyCodes["F8"] = GLFW_KEY_F8;
|
|
m_OriginKeyCodes["F9"] = GLFW_KEY_F9;
|
|
m_OriginKeyCodes["F10"] = GLFW_KEY_F10;
|
|
m_OriginKeyCodes["F11"] = GLFW_KEY_F11;
|
|
m_OriginKeyCodes["F12"] = GLFW_KEY_F12;
|
|
m_OriginKeyCodes["F13"] = GLFW_KEY_F13;
|
|
m_OriginKeyCodes["F14"] = GLFW_KEY_F14;
|
|
m_OriginKeyCodes["F15"] = GLFW_KEY_F15;
|
|
m_OriginKeyCodes["F16"] = GLFW_KEY_F16;
|
|
m_OriginKeyCodes["F17"] = GLFW_KEY_F17;
|
|
m_OriginKeyCodes["F18"] = GLFW_KEY_F18;
|
|
m_OriginKeyCodes["F19"] = GLFW_KEY_F19;
|
|
m_OriginKeyCodes["F20"] = GLFW_KEY_F20;
|
|
m_OriginKeyCodes["F21"] = GLFW_KEY_F21;
|
|
m_OriginKeyCodes["F22"] = GLFW_KEY_F22;
|
|
m_OriginKeyCodes["F23"] = GLFW_KEY_F23;
|
|
m_OriginKeyCodes["F24"] = GLFW_KEY_F24;
|
|
m_OriginKeyCodes["F25"] = GLFW_KEY_F25;
|
|
m_OriginKeyCodes["KP0"] = GLFW_KEY_KP_0;
|
|
m_OriginKeyCodes["KP1"] = GLFW_KEY_KP_1;
|
|
m_OriginKeyCodes["KP2"] = GLFW_KEY_KP_2;
|
|
m_OriginKeyCodes["KP3"] = GLFW_KEY_KP_3;
|
|
m_OriginKeyCodes["KP4"] = GLFW_KEY_KP_4;
|
|
m_OriginKeyCodes["KP5"] = GLFW_KEY_KP_5;
|
|
m_OriginKeyCodes["KP6"] = GLFW_KEY_KP_6;
|
|
m_OriginKeyCodes["KP7"] = GLFW_KEY_KP_7;
|
|
m_OriginKeyCodes["KP8"] = GLFW_KEY_KP_8;
|
|
m_OriginKeyCodes["KP9"] = GLFW_KEY_KP_9;
|
|
m_OriginKeyCodes["KPDecimal"] = GLFW_KEY_KP_DECIMAL;
|
|
m_OriginKeyCodes["KPDivide"] = GLFW_KEY_KP_DIVIDE;
|
|
m_OriginKeyCodes["KPMultiply"] = GLFW_KEY_KP_MULTIPLY;
|
|
m_OriginKeyCodes["KPSubtract"] = GLFW_KEY_KP_SUBTRACT;
|
|
m_OriginKeyCodes["KPAdd"] = GLFW_KEY_KP_ADD;
|
|
m_OriginKeyCodes["KPEnter"] = GLFW_KEY_KP_ENTER;
|
|
m_OriginKeyCodes["KPEqual"] = GLFW_KEY_KP_EQUAL;
|
|
m_OriginKeyCodes["LeftShift"] = GLFW_KEY_LEFT_SHIFT;
|
|
m_OriginKeyCodes["LeftControl"] = GLFW_KEY_LEFT_CONTROL;
|
|
m_OriginKeyCodes["LeftAlt"] = GLFW_KEY_LEFT_ALT;
|
|
m_OriginKeyCodes["LeftSuper"] = GLFW_KEY_LEFT_SUPER;
|
|
m_OriginKeyCodes["RightShift"] = GLFW_KEY_RIGHT_SHIFT;
|
|
m_OriginKeyCodes["RightControl"] = GLFW_KEY_RIGHT_CONTROL;
|
|
m_OriginKeyCodes["RightAlt"] = GLFW_KEY_RIGHT_ALT;
|
|
m_OriginKeyCodes["RightSuper"] = GLFW_KEY_RIGHT_SUPER;
|
|
m_OriginKeyCodes["Menu"] = GLFW_KEY_MENU;
|
|
}
|
|
|
|
bool KeyboardInputHandler::BindOrigin(std::string origin, std::string command, float value)
|
|
{
|
|
auto originIt = m_OriginKeyCodes.find(origin);
|
|
if (originIt == m_OriginKeyCodes.end()) {
|
|
return false;
|
|
}
|
|
|
|
int keyCode = originIt->second;
|
|
m_KeyBindings[keyCode] = std::make_tuple(command, value);
|
|
return true;
|
|
}
|
|
|
|
bool KeyboardInputHandler::OnKeyDown(const Events::KeyDown& e)
|
|
{
|
|
auto it = m_KeyBindings.find(e.KeyCode);
|
|
if (it == m_KeyBindings.end()) {
|
|
return false;
|
|
}
|
|
|
|
std::string command;
|
|
float value;
|
|
std::tie(command, value) = it->second;
|
|
m_CommandValues[command] += value;
|
|
|
|
return true;
|
|
}
|
|
|
|
bool KeyboardInputHandler::OnKeyUp(const Events::KeyUp& e)
|
|
{
|
|
auto it = m_KeyBindings.find(e.KeyCode);
|
|
if (it == m_KeyBindings.end()) {
|
|
return false;
|
|
}
|
|
|
|
std::string command;
|
|
float value;
|
|
std::tie(command, value) = it->second;
|
|
m_CommandValues[command] -= value;
|
|
|
|
return true;
|
|
}
|
|
|
|
float KeyboardInputHandler::GetCommandValue(std::string command)
|
|
{
|
|
auto it = m_CommandValues.find(command);
|
|
if (it != m_CommandValues.end()) {
|
|
return m_CommandValues[command];
|
|
} else {
|
|
return 0.f;
|
|
}
|
|
}
|
|
|