Ja es por canviar el jugador que maneja el teclat "en calent" desde el service menu

This commit is contained in:
2025-08-08 13:21:14 +02:00
parent de5e99c932
commit add9f8df7a
7 changed files with 133 additions and 60 deletions

View File

@@ -143,6 +143,10 @@ auto saveToFile() -> bool {
file << "\n\n## CONTROLLERS\n";
gamepad_manager.saveToFile(file);
// Opciones de teclado
file << "\n\n## KEYBOARD\n";
file << "keyboard.player=" << static_cast<int>(keyboard.player_id) << "\n";
// Cierra el fichero
file.close();
@@ -207,7 +211,9 @@ auto set(const std::string& var, const std::string& value) -> bool {
pending_changes.new_difficulty = settings.difficulty;
}},
{"game.autofire", [](const auto& val) { settings.autofire = stringToBool(val); }},
{"game.shutdown_enabled", [](const auto& val) { settings.shutdown_enabled = stringToBool(val); }}};
{"game.shutdown_enabled", [](const auto& val) { settings.shutdown_enabled = stringToBool(val); }},
// Teclado
{"keyboard.player", [](const auto& val) { keyboard.player_id = static_cast<Player::Id>(stoi(val)); }}};
// Maneja por separado la configuración general de los mandos
if (var.starts_with("controller.")) {
@@ -317,7 +323,7 @@ void GamepadManager::assignAndLinkGamepads() {
assignRemainingGamepads(physical_gamepads, assigned_instances);
// Pasada 3: Limpia los datos de los slots que se quedaron sin mando.
clearUnassignedGamepadSlots();
clearUnassignedGamepadSlots();
}
// --- PRIMERA PASADA: Intenta asignar mandos basándose en la ruta guardada ---
@@ -328,20 +334,19 @@ void GamepadManager::assignGamepadsByPath(
for (size_t i = 0; i < MAX_PLAYERS; ++i) {
const std::string& desired_path = desired_paths[i];
if (desired_path.empty()) {
continue; // No hay ruta guardada para este slot.
continue; // No hay ruta guardada para este slot.
}
// Buscamos un mando físico que coincida con la ruta y no esté ya asignado.
for (const auto& physical_gamepad : physical_gamepads) {
if (physical_gamepad->path == desired_path && !isGamepadAssigned(physical_gamepad, assigned_instances)) {
// Asignamos y actualizamos TODOS los datos.
gamepads_[i].instance = physical_gamepad;
gamepads_[i].name = physical_gamepad->name; // <--- LA LÍNEA QUE FALTABA
gamepads_[i].name = physical_gamepad->name; // <--- LA LÍNEA QUE FALTABA
// No es necesario actualizar la path aquí porque ya coincide.
assigned_instances.push_back(physical_gamepad);
break; // Mando encontrado para este jugador, pasamos al siguiente.
break; // Mando encontrado para este jugador, pasamos al siguiente.
}
}
}
@@ -399,4 +404,27 @@ auto GamepadManager::isGamepadAssigned(
}
return false; // No se encontró en la lista.
}
// Convierte un player id a texto segun Lang
auto playerIdToString(Player::Id player_id) -> std::string {
switch (player_id) {
case Player::Id::PLAYER1:
return Lang::getText("[SERVICE_MENU] PLAYER1");
case Player::Id::PLAYER2:
return Lang::getText("[SERVICE_MENU] PLAYER2");
default:
return "";
}
}
// Convierte un texto a player id segun Lang
auto stringToPlayerId(std::string name) -> Player::Id {
if (name == Lang::getText("[SERVICE_MENU] PLAYER1")) {
return Player::Id::PLAYER1;
} else if (name == Lang::getText("[SERVICE_MENU] PLAYER2")) {
return Player::Id::PLAYER2;
} else {
return Player::Id::NO_PLAYER;
}
}
} // namespace Options