migrant input: controllers.json guarda ara el path
migrant input: define_buttons no agarra inputs del mando que no toca falta: Options ha de comprovar que el gamepad que te en la configuracio estiga o no estiga conectat
This commit is contained in:
@@ -357,46 +357,50 @@ void Input::saveGamepadConfigs() {
|
||||
}
|
||||
|
||||
void Input::applyGamepadConfig(std::shared_ptr<Gamepad> gamepad) {
|
||||
if (!gamepad) {
|
||||
if (!gamepad || gamepad->path.empty()) { // No podemos aplicar config sin una ruta
|
||||
return;
|
||||
}
|
||||
|
||||
// Buscar configuración por nombre del gamepad
|
||||
auto configIt = std::find_if(gamepad_configs_.begin(), gamepad_configs_.end(), [&gamepad](const GamepadConfig &config) {
|
||||
return config.name == gamepad->name;
|
||||
// --- Buscar configuración por RUTA (path) ---
|
||||
auto configIt = std::find_if(gamepad_configs_.begin(), gamepad_configs_.end(),
|
||||
[&gamepad](const GamepadConfig &config) {
|
||||
return config.path == gamepad->path;
|
||||
});
|
||||
|
||||
if (configIt != gamepad_configs_.end()) {
|
||||
// Aplicar la configuración encontrada al gamepad
|
||||
// Se encontró una configuración específica para este puerto/dispositivo. La aplicamos.
|
||||
std::cout << "Applying custom config for gamepad at path: " << gamepad->path << std::endl;
|
||||
for (const auto &[action, button] : configIt->bindings) {
|
||||
if (gamepad->bindings.find(action) != gamepad->bindings.end()) {
|
||||
gamepad->bindings[action].button = button;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Opcional: Podrías añadir un fallback para buscar por nombre si no se encuentra por ruta.
|
||||
}
|
||||
|
||||
void Input::saveGamepadConfigFromGamepad(std::shared_ptr<Gamepad> gamepad) {
|
||||
if (!gamepad) {
|
||||
if (!gamepad || gamepad->path.empty()) { // No podemos guardar una config sin una ruta
|
||||
return;
|
||||
}
|
||||
|
||||
// Buscar si ya existe una configuración con este nombre
|
||||
auto configIt = std::find_if(gamepad_configs_.begin(), gamepad_configs_.end(), [&gamepad](const GamepadConfig &config) {
|
||||
return config.name == gamepad->name;
|
||||
// --- CAMBIO CLAVE: Buscar si ya existe una configuración por RUTA (path) ---
|
||||
auto configIt = std::find_if(gamepad_configs_.begin(), gamepad_configs_.end(),
|
||||
[&gamepad](const GamepadConfig &config) {
|
||||
return config.path == gamepad->path;
|
||||
});
|
||||
|
||||
// Crear nueva configuración desde el gamepad
|
||||
GamepadConfig newConfig(gamepad->name);
|
||||
newConfig.bindings.clear(); // Limpiar bindings por defecto
|
||||
// Crear nueva configuración desde el gamepad, incluyendo nombre y ruta
|
||||
GamepadConfig newConfig(gamepad->name, gamepad->path); // <--- CAMBIO: Pasamos ambos
|
||||
newConfig.bindings.clear();
|
||||
|
||||
// Copiar todos los bindings del gamepad
|
||||
// Copiar todos los bindings actuales del gamepad
|
||||
for (const auto &[action, buttonState] : gamepad->bindings) {
|
||||
newConfig.bindings[action] = buttonState.button;
|
||||
}
|
||||
|
||||
if (configIt != gamepad_configs_.end()) {
|
||||
// Sobreescribir configuración existente
|
||||
// Sobreescribir configuración existente para esta ruta
|
||||
*configIt = newConfig;
|
||||
} else {
|
||||
// Añadir nueva configuración
|
||||
|
||||
Reference in New Issue
Block a user