#include "LuaUtility.h" #include #include #include static std::unordered_map keyMap; LuaUtility::LuaUtility() { keyMap = GetKeyMap(); } bool LuaUtility::IsKeyPressed(std::string keyName) { if (keyName.length() > 1) { std::transform(keyName.begin(), keyName.end(), keyName.begin(), [](unsigned char c) {return std::tolower(c); }); auto keycode = GetKeyMap()[keyName]; return (GetAsyncKeyState(GetKeyMap()[keyName]) & 0x8000) != 0; } else { std::transform(keyName.begin(), keyName.end(), keyName.begin(), [](unsigned char c) {return std::toupper(c); }); return (GetAsyncKeyState(keyName.c_str()[0]) & 0x8000) != 0; } return false; } bool LuaUtility::IsKeyPressed(std::string keyName, std::string keyName2) { std::vector keys; std::string current = keyName; for (int i = 0; i < 2; i++) { if (current.length() > 1) { std::transform(current.begin(), current.end(), current.begin(), [](unsigned char c) {return std::tolower(c); }); keys.push_back(GetKeyMap()[current]); } else { std::transform(current.begin(), current.end(), current.begin(), [](unsigned char c) {return std::toupper(c); }); keys.push_back(current.c_str()[0]); } current = keyName2; } return ((GetAsyncKeyState(keys[0]) & 0x8000) && GetAsyncKeyState(keys[1]) & 0x8000) != 0; } bool LuaUtility::IsKeyPressed(std::string keyName, std::string keyName2, std::string keyName3) { std::vector keys; std::string current = keyName; for (int i = 0; i < 3; i++) { if (current.length() > 1) { std::transform(current.begin(), current.end(), current.begin(), [](unsigned char c) {return std::tolower(c); }); keys.push_back(GetKeyMap()[current]); } else { std::transform(current.begin(), current.end(), current.begin(), [](unsigned char c) {return std::toupper(c); }); keys.push_back(current.c_str()[0]); } if (i == 0) current = keyName2; else current = keyName3; } return ((GetAsyncKeyState(keys[0]) & 0x8000) && GetAsyncKeyState(keys[1] & 0x8000) && GetAsyncKeyState(keys[2]) & 0x8000) != 0; } bool LuaUtility::ContainsKey(std::string keyName) { if (keyMap.size() == 0) keyMap = GetKeyMap(); std::transform(keyName.begin(), keyName.end(), keyName.begin(), [](unsigned char c) {return std::tolower(c); }); return keyMap.find(keyName) != keyMap.end(); } std::unordered_map LuaUtility::GetKeyMap() { if (!keyMap.size()) { keyMap.insert(std::pair("backspace", VK_BACK)); keyMap.insert(std::pair("tab", VK_TAB)); keyMap.insert(std::pair("clear", VK_CLEAR)); keyMap.insert(std::pair("return", VK_RETURN)); keyMap.insert(std::pair("enter", VK_RETURN)); keyMap.insert(std::pair("shift", VK_SHIFT)); keyMap.insert(std::pair("ctrl", VK_CONTROL)); keyMap.insert(std::pair("alt", VK_MENU)); keyMap.insert(std::pair("pause", VK_PAUSE)); keyMap.insert(std::pair("capslock", VK_CAPITAL)); keyMap.insert(std::pair("escape", VK_ESCAPE)); keyMap.insert(std::pair("space", VK_SPACE)); keyMap.insert(std::pair("pageup", VK_PRIOR)); keyMap.insert(std::pair("pagedown", VK_NEXT)); keyMap.insert(std::pair("end", VK_END)); keyMap.insert(std::pair("home", VK_HOME)); keyMap.insert(std::pair("left", VK_LEFT)); keyMap.insert(std::pair("up", VK_UP)); keyMap.insert(std::pair("right", VK_RIGHT)); keyMap.insert(std::pair("down", VK_DOWN)); keyMap.insert(std::pair("printscr", VK_SNAPSHOT)); keyMap.insert(std::pair("insert", VK_INSERT)); keyMap.insert(std::pair("delete", VK_DELETE)); keyMap.insert(std::pair("f1", VK_F1)); keyMap.insert(std::pair("f2", VK_F2)); keyMap.insert(std::pair("f3", VK_F3)); keyMap.insert(std::pair("f4", VK_F4)); keyMap.insert(std::pair("f5", VK_F5)); keyMap.insert(std::pair("f6", VK_F6)); keyMap.insert(std::pair("f7", VK_F7)); keyMap.insert(std::pair("f8", VK_F8)); keyMap.insert(std::pair("f9", VK_F9)); keyMap.insert(std::pair("f10", VK_F10)); keyMap.insert(std::pair("f11", VK_F11)); keyMap.insert(std::pair("f12", VK_F12)); keyMap.insert(std::pair("numpad0", VK_NUMPAD0)); keyMap.insert(std::pair("numpad1", VK_NUMPAD1)); keyMap.insert(std::pair("numpad2", VK_NUMPAD2)); keyMap.insert(std::pair("numpad3", VK_NUMPAD3)); keyMap.insert(std::pair("numpad4", VK_NUMPAD4)); keyMap.insert(std::pair("numpad5", VK_NUMPAD5)); keyMap.insert(std::pair("numpad6", VK_NUMPAD6)); keyMap.insert(std::pair("numpad7", VK_NUMPAD7)); keyMap.insert(std::pair("numpad8", VK_NUMPAD8)); keyMap.insert(std::pair("numpad9", VK_NUMPAD9)); keyMap.insert(std::pair("multiply", VK_MULTIPLY)); keyMap.insert(std::pair("add", VK_ADD)); keyMap.insert(std::pair("subtract", VK_SUBTRACT)); keyMap.insert(std::pair("decimal", VK_DECIMAL)); keyMap.insert(std::pair("divide", VK_DIVIDE)); keyMap.insert(std::pair("numlock", VK_NUMLOCK)); keyMap.insert(std::pair("0", 0x30)); keyMap.insert(std::pair("1", 0x31)); keyMap.insert(std::pair("2", 0x32)); keyMap.insert(std::pair("3", 0x33)); keyMap.insert(std::pair("4", 0x34)); keyMap.insert(std::pair("5", 0x35)); keyMap.insert(std::pair("6", 0x36)); keyMap.insert(std::pair("7", 0x37)); keyMap.insert(std::pair("8", 0x38)); keyMap.insert(std::pair("9", 0x39)); keyMap.insert(std::pair("scrollock", VK_SCROLL)); keyMap.insert(std::pair("lshift", VK_LSHIFT)); keyMap.insert(std::pair("rshift", VK_RSHIFT)); keyMap.insert(std::pair("lctrl", VK_LCONTROL)); keyMap.insert(std::pair("rctrl", VK_RCONTROL)); keyMap.insert(std::pair("lalt", VK_LMENU)); keyMap.insert(std::pair("ralt", VK_RMENU)); } return keyMap; }