Clean up
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
#include "Config.h"
|
||||
#include "windows.h"
|
||||
#include "../Bindings/KeyboardBinding.h"
|
||||
#include "../Bindings/Ds4Binding.h"
|
||||
#include "../../Utilities/Operations.h"
|
||||
#include "../Bindings/XinputBinding.h"
|
||||
#include "../../Constants.h"
|
||||
|
||||
namespace TLAC::Input::KeyConfig
|
||||
{
|
||||
KeycodeMap Config::Keymap =
|
||||
{
|
||||
// NumPad Keys
|
||||
{ "NumPad0", VK_NUMPAD0 },
|
||||
{ "NumPad1", VK_NUMPAD1 },
|
||||
{ "NumPad2", VK_NUMPAD2 },
|
||||
{ "NumPad3", VK_NUMPAD3 },
|
||||
{ "NumPad4", VK_NUMPAD4 },
|
||||
{ "NumPad5", VK_NUMPAD5 },
|
||||
{ "NumPad6", VK_NUMPAD6 },
|
||||
{ "NumPad7", VK_NUMPAD7 },
|
||||
{ "NumPad8", VK_NUMPAD8 },
|
||||
{ "NumPad9", VK_NUMPAD9 },
|
||||
{ "Plus", VK_ADD },
|
||||
{ "Minus", VK_SUBTRACT },
|
||||
{ "Divide", VK_DIVIDE },
|
||||
{ "Multiply", VK_MULTIPLY },
|
||||
{ "Comma", VK_OEM_COMMA },
|
||||
{ "Period", VK_OEM_PERIOD },
|
||||
{ "Slash", VK_OEM_2 },
|
||||
// F-Keys
|
||||
{ "F1", VK_F1 },
|
||||
{ "F2", VK_F2 },
|
||||
{ "F3", VK_F3 },
|
||||
{ "F4", VK_F4 },
|
||||
{ "F5", VK_F5 },
|
||||
{ "F6", VK_F6 },
|
||||
{ "F7", VK_F7 },
|
||||
{ "F8", VK_F8 },
|
||||
{ "F9", VK_F9 },
|
||||
{ "F10", VK_F10 },
|
||||
{ "F11", VK_F11 },
|
||||
{ "F12", VK_F12 },
|
||||
{ "F13", VK_F13 },
|
||||
{ "F14", VK_F14 },
|
||||
{ "F15", VK_F15 },
|
||||
{ "F16", VK_F16 },
|
||||
{ "F17", VK_F17 },
|
||||
{ "F18", VK_F18 },
|
||||
{ "F19", VK_F19 },
|
||||
{ "F20", VK_F20 },
|
||||
{ "F21", VK_F21 },
|
||||
{ "F22", VK_F22 },
|
||||
{ "F23", VK_F23 },
|
||||
{ "F24", VK_F24 },
|
||||
// Shift Keys
|
||||
{ "LeftShift", VK_LSHIFT },
|
||||
{ "LShift", VK_LSHIFT },
|
||||
{ "RightShift", VK_RSHIFT },
|
||||
{ "RShift", VK_RSHIFT },
|
||||
// Control Keys
|
||||
{ "LeftControl", VK_LCONTROL },
|
||||
{ "LControl", VK_LCONTROL },
|
||||
{ "LCtrl", VK_LCONTROL },
|
||||
{ "RightControl", VK_RCONTROL },
|
||||
{ "RControl", VK_RCONTROL },
|
||||
{ "RCtrl", VK_RCONTROL },
|
||||
// Arrow Keys
|
||||
{ "Up", VK_UP },
|
||||
{ "Down", VK_DOWN },
|
||||
{ "Left", VK_LEFT },
|
||||
{ "Right", VK_RIGHT },
|
||||
// Special Keys
|
||||
{ "Enter", VK_RETURN },
|
||||
{ "Return", VK_RETURN },
|
||||
{ "Tab", VK_TAB },
|
||||
{ "Back", VK_BACK },
|
||||
{ "Backspace", VK_BACK },
|
||||
{ "Insert", VK_INSERT },
|
||||
{ "Ins", VK_INSERT },
|
||||
{ "Delete", VK_DELETE },
|
||||
{ "Del", VK_DELETE },
|
||||
{ "Home", VK_HOME },
|
||||
{ "End", VK_END },
|
||||
{ "PageUp", VK_PRIOR },
|
||||
{ "PageDown", VK_NEXT },
|
||||
{ "ESC", VK_ESCAPE },
|
||||
{ "Escape", VK_ESCAPE },
|
||||
{ "Comma", VK_OEM_COMMA },
|
||||
{ "Period", VK_OEM_PERIOD },
|
||||
{ "Slash", VK_OEM_2 },
|
||||
// Mouse buttons
|
||||
{ "MouseLeft", VK_LBUTTON },
|
||||
{ "MouseMiddle", VK_MBUTTON },
|
||||
{ "MouseRight", VK_RBUTTON },
|
||||
{ "MouseX1", VK_XBUTTON1 },
|
||||
{ "MouseX2", VK_XBUTTON2 },
|
||||
};
|
||||
|
||||
KeycodeMap Config::XinputMap =
|
||||
{
|
||||
//XINPUT
|
||||
{ "XINPUT_A", XINPUT_A},
|
||||
{ "XINPUT_B", XINPUT_B},
|
||||
{ "XINPUT_X", XINPUT_X},
|
||||
{ "XINPUT_Y", XINPUT_Y},
|
||||
{ "XINPUT_UP", XINPUT_UP},
|
||||
{ "XINPUT_DOWN", XINPUT_DOWN},
|
||||
{ "XINPUT_LEFT", XINPUT_LEFT},
|
||||
{ "XINPUT_RIGHT", XINPUT_RIGHT},
|
||||
{ "XINPUT_START", XINPUT_START},
|
||||
{ "XINPUT_BACK", XINPUT_BACK},
|
||||
{ "XINPUT_LS", XINPUT_LS},
|
||||
{ "XINPUT_RS", XINPUT_RS},
|
||||
{ "XINPUT_LB", XINPUT_LS},
|
||||
{ "XINPUT_RB", XINPUT_RS},
|
||||
{ "XINPUT_LT", XINPUT_LT},
|
||||
{ "XINPUT_RT", XINPUT_RT},
|
||||
{ "XINPUT_LSB", XINPUT_LSB},
|
||||
{ "XINPUT_RSB", XINPUT_RSB},
|
||||
{ "XINPUT_LLEFT", XINPUT_LLEFT},
|
||||
{ "XINPUT_LRIGHT", XINPUT_LRIGHT},
|
||||
{ "XINPUT_RLEFT", XINPUT_RLEFT},
|
||||
{ "XINPUT_RRIGHT", XINPUT_RRIGHT},
|
||||
};
|
||||
|
||||
Ds4ButtonMap Config::Ds4Map =
|
||||
{
|
||||
// Face Buttons
|
||||
{ "DS4_SQUARE", DS4_SQUARE },
|
||||
{ "Ds4_Square", DS4_SQUARE },
|
||||
|
||||
{ "DS4_CROSS", DS4_CROSS },
|
||||
{ "Ds4_Cross", DS4_CROSS },
|
||||
|
||||
{ "DS4_CIRCLE", DS4_CIRCLE },
|
||||
{ "Ds4_Circle", DS4_CIRCLE },
|
||||
|
||||
{ "DS4_TRIANGLE", DS4_TRIANGLE },
|
||||
{ "Ds4_Triangle", DS4_TRIANGLE },
|
||||
|
||||
// Standard Buttons
|
||||
{ "DS4_SHARE", DS4_SHARE },
|
||||
{ "Ds4_Share", DS4_SHARE },
|
||||
|
||||
{ "DS4_OPTIONS", DS4_OPTIONS },
|
||||
{ "Ds4_Options", DS4_OPTIONS },
|
||||
|
||||
{ "DS4_PS", DS4_PS },
|
||||
{ "Ds4_PS", DS4_PS },
|
||||
|
||||
{ "DS4_TOUCH", DS4_TOUCH },
|
||||
{ "Ds4_Touch", DS4_TOUCH },
|
||||
|
||||
{ "DS4_L1", DS4_L1 },
|
||||
{ "Ds4_L1", DS4_L1 },
|
||||
|
||||
{ "DS4_R1", DS4_R1 },
|
||||
{ "Ds4_R1", DS4_R1 },
|
||||
|
||||
// D-Pad Directions
|
||||
{ "DS4_DPAD_UP", DS4_DPAD_UP },
|
||||
{ "Ds4_DPad_Up", DS4_DPAD_UP },
|
||||
|
||||
{ "DS4_DPAD_RIGHT", DS4_DPAD_RIGHT },
|
||||
{ "Ds4_DPad_Right", DS4_DPAD_RIGHT },
|
||||
|
||||
{ "DS4_DPAD_DOWN", DS4_DPAD_DOWN },
|
||||
{ "Ds4_DPad_Down", DS4_DPAD_DOWN },
|
||||
|
||||
{ "DS4_DPAD_LEFT", DS4_DPAD_LEFT },
|
||||
{ "Ds4_DPad_Left", DS4_DPAD_LEFT },
|
||||
|
||||
// Trigger Buttons
|
||||
{ "DS4_L_TRIGGER", DS4_L_TRIGGER },
|
||||
{ "Ds4_L_Trigger", DS4_L_TRIGGER },
|
||||
|
||||
{ "DS4_R_TRIGGER", DS4_R_TRIGGER },
|
||||
{ "Ds4_R_Trigger", DS4_R_TRIGGER },
|
||||
|
||||
// Joystick Buttons
|
||||
{ "DS4_L3", DS4_L3 },
|
||||
{ "Ds4_L3", DS4_L3 },
|
||||
|
||||
{ "DS4_R3", DS4_R3 },
|
||||
{ "Ds4_R3", DS4_R3 },
|
||||
|
||||
// Left Joystick
|
||||
{ "DS4_L_STICK_UP", DS4_L_STICK_UP },
|
||||
{ "Ds4_L_Stick_Up", DS4_L_STICK_UP },
|
||||
|
||||
{ "DS4_L_STICK_RIGHT", DS4_L_STICK_RIGHT },
|
||||
{ "Ds4_L_Stick_Right", DS4_L_STICK_RIGHT },
|
||||
|
||||
{ "DS4_L_STICK_DOWN", DS4_L_STICK_DOWN },
|
||||
{ "Ds4_L_Stick_Down", DS4_L_STICK_DOWN },
|
||||
|
||||
{ "DS4_L_STICK_LEFT", DS4_L_STICK_LEFT },
|
||||
{ "Ds4_L_Stick_Left", DS4_L_STICK_LEFT },
|
||||
|
||||
// Right Joystick
|
||||
{ "DS4_R_STICK_UP", DS4_R_STICK_UP },
|
||||
{ "Ds4_R_Stick_Up", DS4_R_STICK_UP },
|
||||
|
||||
{ "DS4_R_STICK_RIGHT", DS4_R_STICK_RIGHT },
|
||||
{ "Ds4_R_Stick_Right", DS4_R_STICK_RIGHT },
|
||||
|
||||
{ "DS4_R_STICK_DOWN", DS4_R_STICK_DOWN },
|
||||
{ "Ds4_R_Stick_Down", DS4_R_STICK_DOWN },
|
||||
|
||||
{ "DS4_R_STICK_LEFT", DS4_R_STICK_LEFT },
|
||||
{ "Ds4_R_Stick_Left", DS4_R_STICK_LEFT },
|
||||
};
|
||||
|
||||
void Config::BindConfigKeys(std::unordered_map<std::string, std::string> &configMap, const char *configKeyName, Binding &bindObj, std::vector<std::string> defaultKeys)
|
||||
{
|
||||
std::vector<std::string> keys;
|
||||
|
||||
auto configPair = configMap.find(configKeyName);
|
||||
|
||||
// config variable was found in the ini
|
||||
if (configPair != configMap.end())
|
||||
{
|
||||
keys = Utilities::Split(configPair->second, ",");
|
||||
}
|
||||
else
|
||||
{
|
||||
keys = defaultKeys;
|
||||
}
|
||||
|
||||
for (std::string key : keys)
|
||||
{
|
||||
Utilities::Trim(key);
|
||||
|
||||
// Applies only for Single-Character keys
|
||||
if (key.length() == 1)
|
||||
{
|
||||
bindObj.AddBinding(new KeyboardBinding(key[0]));
|
||||
}
|
||||
else // for special key names
|
||||
{
|
||||
auto keycode = Config::Keymap.find(key.c_str());
|
||||
|
||||
// name is known in the special keys map
|
||||
if (keycode != Config::Keymap.end())
|
||||
{
|
||||
bindObj.AddBinding(new KeyboardBinding(keycode->second));
|
||||
}
|
||||
else
|
||||
{
|
||||
auto xinputBtn = Config::XinputMap.find(key.c_str());
|
||||
|
||||
if (xinputBtn != Config::XinputMap.end())
|
||||
{
|
||||
bindObj.AddBinding(new XinputBinding(xinputBtn->second));
|
||||
}
|
||||
else
|
||||
{
|
||||
// just gonna be lazy for now and put this inside an else statement
|
||||
auto ds4Button = Config::Ds4Map.find(key.c_str());
|
||||
|
||||
if (ds4Button != Config::Ds4Map.end())
|
||||
{
|
||||
bindObj.AddBinding(new Ds4Binding(ds4Button->second));
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("[TLAC] Config::BindConfigKeys(): Unable to parse key: '%s'\n", key.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include <unordered_map>
|
||||
#include "KeyString.h"
|
||||
#include "KeyStringHash.h"
|
||||
#include "../Bindings/Binding.h"
|
||||
#include "../DirectInput/Ds4/Ds4Button.h"
|
||||
|
||||
namespace TLAC::Input::KeyConfig
|
||||
{
|
||||
typedef std::unordered_map<KeyString, uint8_t, KeyStringHash> KeycodeMap;
|
||||
typedef std::unordered_map<KeyString, Ds4Button, KeyStringHash> Ds4ButtonMap;
|
||||
|
||||
class Config
|
||||
{
|
||||
public:
|
||||
static KeycodeMap Keymap;
|
||||
static Ds4ButtonMap Ds4Map;
|
||||
static KeycodeMap XinputMap;
|
||||
|
||||
static void BindConfigKeys(std::unordered_map<std::string, std::string> &configMap, const char *configKeyName, Binding &bindObj, std::vector<std::string> defaultKeys);
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
#include "KeyString.h"
|
||||
|
||||
namespace TLAC::Input::KeyConfig
|
||||
{
|
||||
KeyString::KeyString(const char* str) : value(str)
|
||||
{
|
||||
}
|
||||
|
||||
bool KeyString::operator==(const KeyString& rsv) const
|
||||
{
|
||||
return !_strcmpi(value.c_str(), rsv.value.c_str());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
|
||||
namespace TLAC::Input::KeyConfig
|
||||
{
|
||||
struct KeyString
|
||||
{
|
||||
std::string value;
|
||||
|
||||
KeyString(const char* str);
|
||||
bool operator==(const KeyString& rsv) const;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#include "KeyStringHash.h"
|
||||
#include <filesystem>
|
||||
|
||||
namespace TLAC::Input::KeyConfig
|
||||
{
|
||||
size_t KeyStringHash::operator()(const KeyString& key) const
|
||||
{
|
||||
std::string ret = key.value;
|
||||
std::transform(ret.begin(), ret.end(), ret.begin(),
|
||||
[](unsigned char c) { return std::tolower(c, std::locale()); });
|
||||
return std::hash<std::string>()(ret);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
#include "KeyString.h"
|
||||
|
||||
namespace TLAC::Input::KeyConfig
|
||||
{
|
||||
struct KeyStringHash
|
||||
{
|
||||
size_t operator()(const KeyString& key) const;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user