migrant input: corregit GamepadManager.swapPlayers()

This commit is contained in:
2025-08-04 12:42:55 +02:00
parent 450edbd8b0
commit 64ee4727ce
4 changed files with 38 additions and 34 deletions

View File

@@ -23,7 +23,7 @@ Window window; // Opciones de la ventana
Settings settings; // Opciones del juego Settings settings; // Opciones del juego
Video video; // Opciones de vídeo Video video; // Opciones de vídeo
Audio audio; // Opciones de audio Audio audio; // Opciones de audio
GamepadManager gamepads; // Opciones de mando para cada jugador GamepadManager gamepad_manager; // Opciones de mando para cada jugador
Keyboard keyboard; // Opciones para el teclado Keyboard keyboard; // Opciones para el teclado
PendingChanges pending_changes; // Opciones que se aplican al cerrar PendingChanges pending_changes; // Opciones que se aplican al cerrar
@@ -42,7 +42,7 @@ void init() {
Difficulty::init(); Difficulty::init();
// Opciones de control // Opciones de control
gamepads.init(); gamepad_manager.init();
setKeyboardToPlayer(Player::Id::PLAYER1); setKeyboardToPlayer(Player::Id::PLAYER1);
// Opciones de cambios pendientes // Opciones de cambios pendientes
@@ -75,7 +75,7 @@ auto loadFromFile() -> bool {
} }
// 3. Llamamos al asignador inteligente. // 3. Llamamos al asignador inteligente.
gamepads.assignAndLinkGamepads(); gamepad_manager.assignAndLinkGamepads();
// 4. Si el fichero no existía, lo creamos ahora con la configuración por defecto. // 4. Si el fichero no existía, lo creamos ahora con la configuración por defecto.
if (!file.good()) { if (!file.good()) {
@@ -148,7 +148,7 @@ auto saveToFile() -> bool {
// Opciones de mandos // Opciones de mandos
file << "\n\n## CONTROLLERS\n"; file << "\n\n## CONTROLLERS\n";
gamepads.saveToFile(file); gamepad_manager.saveToFile(file);
// Cierra el fichero // Cierra el fichero
file.close(); file.close();
@@ -169,7 +169,7 @@ void parseAndSetController(const std::string& var, const std::string& value) {
int controller_index = std::stoi(var.substr(first_dot + 1, second_dot - first_dot - 1)); int controller_index = std::stoi(var.substr(first_dot + 1, second_dot - first_dot - 1));
std::string setting_key = var.substr(second_dot + 1); std::string setting_key = var.substr(second_dot + 1);
gamepads.setControllerProperty(controller_index, setting_key, value); gamepad_manager.setControllerProperty(controller_index, setting_key, value);
} catch (const std::exception&) { } catch (const std::exception&) {
// Error en parsing // Error en parsing
} }
@@ -252,7 +252,7 @@ void swapKeyboard() {
// Intercambia los jugadores asignados a los dos primeros mandos // Intercambia los jugadores asignados a los dos primeros mandos
void swapControllers() { void swapControllers() {
gamepads.swapPlayers(); gamepad_manager.swapPlayers();
} }
// Averigua quien está usando el teclado // Averigua quien está usando el teclado
@@ -279,7 +279,7 @@ bool assignGamepadByName(const std::string& gamepad_name_to_find, Player::Id pla
auto found_gamepad = Input::get()->findAvailableGamepadByName(gamepad_name_to_find); auto found_gamepad = Input::get()->findAvailableGamepadByName(gamepad_name_to_find);
if (found_gamepad) { if (found_gamepad) {
return gamepads.assignGamepadToPlayer(player_id, found_gamepad, found_gamepad->name); return gamepad_manager.assignGamepadToPlayer(player_id, found_gamepad, found_gamepad->name);
} }
return false; return false;
} }
@@ -287,7 +287,7 @@ bool assignGamepadByName(const std::string& gamepad_name_to_find, Player::Id pla
// Obtener información de un gamepad específico // Obtener información de un gamepad específico
std::string getGamepadInfo(Player::Id player_id) { std::string getGamepadInfo(Player::Id player_id) {
try { try {
const auto& gamepad = gamepads.getGamepad(player_id); const auto& gamepad = gamepad_manager.getGamepad(player_id);
return "Player " + std::to_string(static_cast<int>(player_id)) + return "Player " + std::to_string(static_cast<int>(player_id)) +
": " + (gamepad.name.empty() ? "No gamepad" : gamepad.name); ": " + (gamepad.name.empty() ? "No gamepad" : gamepad.name);
} catch (const std::exception&) { } catch (const std::exception&) {

View File

@@ -161,7 +161,8 @@ class GamepadManager {
} }
void swapPlayers() { void swapPlayers() {
std::swap(gamepads[0].player_id, gamepads[1].player_id); std::swap(gamepads[0].instance, gamepads[1].instance);
std::swap(gamepads[0].name, gamepads[1].name);
} }
// Para serialización/deserialización // Para serialización/deserialización
@@ -233,7 +234,7 @@ extern Window window; // Opciones de la ventana
extern Settings settings; // Opciones del juego extern Settings settings; // Opciones del juego
extern Video video; // Opciones de vídeo extern Video video; // Opciones de vídeo
extern Audio audio; // Opciones de audio extern Audio audio; // Opciones de audio
extern GamepadManager gamepads; // Manager de mandos para cada jugador extern GamepadManager gamepad_manager; // Manager de mandos para cada jugador
extern Keyboard keyboard; // Opciones para el teclado extern Keyboard keyboard; // Opciones para el teclado
extern PendingChanges pending_changes; // Opciones que se aplican al cerrar extern PendingChanges pending_changes; // Opciones que se aplican al cerrar

View File

@@ -1218,9 +1218,12 @@ auto Game::getPlayer(Player::Id id) -> std::shared_ptr<Player> {
// Obtiene un controlador a partir del "id" del jugador // Obtiene un controlador a partir del "id" del jugador
auto Game::getController(Player::Id player_id) -> int { auto Game::getController(Player::Id player_id) -> int {
switch (player_id) { switch (player_id) {
case Player::Id::PLAYER1: return 0; case Player::Id::PLAYER1:
case Player::Id::PLAYER2: return 1; return 0;
default: return -1; case Player::Id::PLAYER2:
return 1;
default:
return -1;
} }
} }
@@ -1597,7 +1600,7 @@ void Game::initPlayers(Player::Id player_id) {
auto player1 = std::make_unique<Player>(config_player1); auto player1 = std::make_unique<Player>(config_player1);
player1->setScoreBoardPanel(Scoreboard::Id::LEFT); player1->setScoreBoardPanel(Scoreboard::Id::LEFT);
player1->setName(Lang::getText("[SCOREBOARD] 1")); player1->setName(Lang::getText("[SCOREBOARD] 1"));
player1->setGamepad(Options::gamepads.getGamepad(Player::Id::PLAYER1).instance); player1->setGamepad(Options::gamepad_manager.getGamepad(Player::Id::PLAYER1).instance);
player1->setUsesKeyboard(Player::Id::PLAYER1 == Options::keyboard.player_id); player1->setUsesKeyboard(Player::Id::PLAYER1 == Options::keyboard.player_id);
player1->setPlayingState(Player::State::WAITING); player1->setPlayingState(Player::State::WAITING);
players_.push_back(std::move(player1)); players_.push_back(std::move(player1));
@@ -1617,7 +1620,7 @@ void Game::initPlayers(Player::Id player_id) {
auto player2 = std::make_unique<Player>(config_player2); auto player2 = std::make_unique<Player>(config_player2);
player2->setScoreBoardPanel(Scoreboard::Id::RIGHT); player2->setScoreBoardPanel(Scoreboard::Id::RIGHT);
player2->setName(Lang::getText("[SCOREBOARD] 2")); player2->setName(Lang::getText("[SCOREBOARD] 2"));
player2->setGamepad(Options::gamepads.getGamepad(Player::Id::PLAYER2).instance); player2->setGamepad(Options::gamepad_manager.getGamepad(Player::Id::PLAYER2).instance);
player2->setUsesKeyboard(Player::Id::PLAYER2 == Options::keyboard.player_id); player2->setUsesKeyboard(Player::Id::PLAYER2 == Options::keyboard.player_id);
player2->setPlayingState(Player::State::WAITING); player2->setPlayingState(Player::State::WAITING);
players_.push_back(std::move(player2)); players_.push_back(std::move(player2));

View File

@@ -213,12 +213,12 @@ void Title::printColorValue(const Color& color) {
void Title::handleControlKeys(SDL_Keycode key) { void Title::handleControlKeys(SDL_Keycode key) {
switch (key) { switch (key) {
case SDLK_1: case SDLK_1:
define_buttons_->enable(&Options::gamepads.getGamepad(Player::Id::PLAYER1)); define_buttons_->enable(&Options::gamepad_manager.getGamepad(Player::Id::PLAYER1));
resetCounter(); resetCounter();
break; break;
case SDLK_2: case SDLK_2:
define_buttons_->enable(&Options::gamepads.getGamepad(Player::Id::PLAYER2)); define_buttons_->enable(&Options::gamepad_manager.getGamepad(Player::Id::PLAYER2));
resetCounter(); resetCounter();
break; break;
@@ -262,7 +262,7 @@ auto Title::shouldSkipInputCheck() const -> bool {
} }
void Title::processControllerInputs() { void Title::processControllerInputs() {
for (const auto& controller : Options::gamepads) { for (const auto& controller : Options::gamepad_manager) {
if (isStartButtonPressed(&controller)) { if (isStartButtonPressed(&controller)) {
handleStartButtonPress(&controller); handleStartButtonPress(&controller);
} }