mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2025-12-12 17:58:53 +01:00
Updated controls.conf to allow multiple keys/buttons for each input
This commit is contained in:
parent
4af4d8fa2b
commit
7564e317af
@ -29,7 +29,6 @@ UserInput::UserInput(Configuration &c)
|
|||||||
{
|
{
|
||||||
for(unsigned int i = 0; i < KeyCodeMax; ++i)
|
for(unsigned int i = 0; i < KeyCodeMax; ++i)
|
||||||
{
|
{
|
||||||
keyHandlers_[i] = NULL;
|
|
||||||
currentKeyState_[i] = false;
|
currentKeyState_[i] = false;
|
||||||
lastKeyState_[i] = false;
|
lastKeyState_[i] = false;
|
||||||
}
|
}
|
||||||
@ -114,21 +113,33 @@ bool UserInput::MapKey(std::string keyDescription, KeyCode_E key, bool required)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
description = Utils::replace(description, " ", "");
|
||||||
|
description = Utils::replace(description, ".", "");
|
||||||
|
|
||||||
scanCode = SDL_GetScancodeFromName(description.c_str());
|
std::istringstream ss(description);
|
||||||
|
std::string token;
|
||||||
|
|
||||||
|
bool success = true;
|
||||||
|
|
||||||
|
while (std::getline(ss, token, ','))
|
||||||
|
{
|
||||||
|
scanCode = SDL_GetScancodeFromName(token.c_str());
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
if (scanCode != SDL_SCANCODE_UNKNOWN)
|
if (scanCode != SDL_SCANCODE_UNKNOWN)
|
||||||
{
|
{
|
||||||
Logger::write(Logger::ZONE_INFO, "Input", "Binding key " + configKey);
|
Logger::write(Logger::ZONE_INFO, "Input", "Binding key " + configKey);
|
||||||
keyHandlers_[key] = new KeyboardHandler(scanCode);
|
keyHandlers_.push_back(std::pair<InputHandler *, KeyCode_E>(new KeyboardHandler(scanCode), key));
|
||||||
return true;
|
found = true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
description = Utils::toLower(description);
|
|
||||||
|
|
||||||
if(description.find("mouse") == 0)
|
|
||||||
{
|
{
|
||||||
std::string mousedesc = Utils::replace(Utils::toLower(description), "mouse", "");
|
token = Utils::toLower(token);
|
||||||
|
|
||||||
|
if (token.find("mouse") == 0)
|
||||||
|
{
|
||||||
|
std::string mousedesc = Utils::replace(Utils::toLower(token), "mouse", "");
|
||||||
if (mousedesc.find("button") == 0)
|
if (mousedesc.find("button") == 0)
|
||||||
{
|
{
|
||||||
int button = 0;
|
int button = 0;
|
||||||
@ -140,14 +151,14 @@ bool UserInput::MapKey(std::string keyDescription, KeyCode_E key, bool required)
|
|||||||
else if (mousedesc == "x1") button = SDL_BUTTON_X1;
|
else if (mousedesc == "x1") button = SDL_BUTTON_X1;
|
||||||
else if (mousedesc == "x2") button = SDL_BUTTON_X2;
|
else if (mousedesc == "x2") button = SDL_BUTTON_X2;
|
||||||
|
|
||||||
keyHandlers_[key] = new MouseButtonHandler(button);
|
keyHandlers_.push_back(std::pair<InputHandler *, KeyCode_E>(new MouseButtonHandler(button), key));
|
||||||
Logger::write(Logger::ZONE_INFO, "Input", "Binding mouse button " + ss.str());
|
Logger::write(Logger::ZONE_INFO, "Input", "Binding mouse button " + ss.str());
|
||||||
return true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(description.find("joy") == 0)
|
else if (token.find("joy") == 0)
|
||||||
{
|
{
|
||||||
std::string joydesc = Utils::replace(Utils::toLower(description), "joy", "");
|
std::string joydesc = Utils::replace(Utils::toLower(token), "joy", "");
|
||||||
std::stringstream ssjoy;
|
std::stringstream ssjoy;
|
||||||
ssjoy << joydesc.at(0);
|
ssjoy << joydesc.at(0);
|
||||||
int joynum;
|
int joynum;
|
||||||
@ -161,9 +172,9 @@ bool UserInput::MapKey(std::string keyDescription, KeyCode_E key, bool required)
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << Utils::replace(joydesc, "button", "");
|
ss << Utils::replace(joydesc, "button", "");
|
||||||
ss >> button;
|
ss >> button;
|
||||||
keyHandlers_[key] = new JoyButtonHandler(joynum, button);
|
keyHandlers_.push_back(std::pair<InputHandler *, KeyCode_E>(new JoyButtonHandler(joynum, button), key));
|
||||||
Logger::write(Logger::ZONE_INFO, "Input", "Binding joypad button " + ss.str());
|
Logger::write(Logger::ZONE_INFO, "Input", "Binding joypad button " + ss.str());
|
||||||
return true;
|
found = true;
|
||||||
}
|
}
|
||||||
else if (joydesc.find("hat") == 0)
|
else if (joydesc.find("hat") == 0)
|
||||||
{
|
{
|
||||||
@ -186,9 +197,9 @@ bool UserInput::MapKey(std::string keyDescription, KeyCode_E key, bool required)
|
|||||||
else if (joydesc == "right") hat = SDL_HAT_RIGHT;
|
else if (joydesc == "right") hat = SDL_HAT_RIGHT;
|
||||||
else if (joydesc == "rightdown") hat = SDL_HAT_RIGHTDOWN;
|
else if (joydesc == "rightdown") hat = SDL_HAT_RIGHTDOWN;
|
||||||
|
|
||||||
keyHandlers_[key] = new JoyHatHandler(joynum, hatnum, hat);
|
keyHandlers_.push_back(std::pair<InputHandler *, KeyCode_E>(new JoyHatHandler(joynum, hatnum, hat), key));
|
||||||
Logger::write(Logger::ZONE_INFO, "Input", "Binding joypad hat " + joydesc);
|
Logger::write(Logger::ZONE_INFO, "Input", "Binding joypad hat " + joydesc);
|
||||||
return true;
|
found = true;
|
||||||
}
|
}
|
||||||
else if (joydesc.find("axis") == 0)
|
else if (joydesc.find("axis") == 0)
|
||||||
{
|
{
|
||||||
@ -224,23 +235,31 @@ bool UserInput::MapKey(std::string keyDescription, KeyCode_E key, bool required)
|
|||||||
ss << joydesc;
|
ss << joydesc;
|
||||||
ss >> axis;
|
ss >> axis;
|
||||||
Logger::write(Logger::ZONE_INFO, "Input", "Binding joypad axis " + ss.str());
|
Logger::write(Logger::ZONE_INFO, "Input", "Binding joypad axis " + ss.str());
|
||||||
keyHandlers_[key] = new JoyAxisHandler(joynum, axis, min, max);
|
keyHandlers_.push_back(std::pair<InputHandler *, KeyCode_E>(new JoyAxisHandler(joynum, axis, min, max), key));
|
||||||
return true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Logger::write(Logger::ZONE_ERROR, "Input", "Unsupported property value for " + configKey + "(" + description + "). See Documentation/Keycodes.txt for valid inputs");
|
|
||||||
return false;
|
if (!found)
|
||||||
|
{
|
||||||
|
Logger::write(Logger::ZONE_ERROR, "Input", "Unsupported property value for " + configKey + "(" + token + "). See Documentation/Keycodes.txt for valid inputs");
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UserInput::resetStates()
|
void UserInput::resetStates()
|
||||||
{
|
{
|
||||||
for(unsigned int i = 0; i < KeyCodeMax; ++i)
|
for (unsigned int i = 0; i < keyHandlers_.size(); ++i)
|
||||||
{
|
{
|
||||||
if(keyHandlers_[i])
|
if (keyHandlers_[i].first)
|
||||||
{
|
{
|
||||||
keyHandlers_[i]->reset();
|
keyHandlers_[i].first->reset();
|
||||||
}
|
}
|
||||||
currentKeyState_[i] = false;
|
currentKeyState_[keyHandlers_[i].second] = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,15 +268,16 @@ bool UserInput::update(SDL_Event &e)
|
|||||||
bool updated = false;
|
bool updated = false;
|
||||||
|
|
||||||
memcpy(lastKeyState_, currentKeyState_, sizeof(lastKeyState_));
|
memcpy(lastKeyState_, currentKeyState_, sizeof(lastKeyState_));
|
||||||
|
memset(currentKeyState_, 0, sizeof(currentKeyState_));
|
||||||
|
|
||||||
for(unsigned int i = 0; i < KeyCodeMax; ++i)
|
for(unsigned int i = 0; i < KeyCodeMax; ++i)
|
||||||
{
|
{
|
||||||
InputHandler *h = keyHandlers_[i];
|
InputHandler *h = keyHandlers_[i].first;
|
||||||
if(h)
|
if(h)
|
||||||
{
|
{
|
||||||
if(h->update(e)) updated = true;
|
if(h->update(e)) updated = true;
|
||||||
|
|
||||||
currentKeyState_[i] = h->pressed();
|
currentKeyState_[keyHandlers_[i].second] |= h->pressed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -64,7 +64,7 @@ private:
|
|||||||
bool MapKey(std::string keyDescription, KeyCode_E key, bool required);
|
bool MapKey(std::string keyDescription, KeyCode_E key, bool required);
|
||||||
Configuration &config_;
|
Configuration &config_;
|
||||||
std::vector<SDL_Joystick *> joysticks_;
|
std::vector<SDL_Joystick *> joysticks_;
|
||||||
InputHandler *keyHandlers_[KeyCodeMax];
|
std::vector<std::pair<InputHandler *, KeyCode_E>> keyHandlers_;
|
||||||
bool lastKeyState_[KeyCodeMax];
|
bool lastKeyState_[KeyCodeMax];
|
||||||
bool currentKeyState_[KeyCodeMax];
|
bool currentKeyState_[KeyCodeMax];
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user