migrant input: commit abans que gemini destroçe algo
This commit is contained in:
@@ -19,13 +19,13 @@
|
||||
|
||||
namespace Options {
|
||||
// --- Variables globales ---
|
||||
Window window; // Opciones de la ventana
|
||||
Settings settings; // Opciones del juego
|
||||
Video video; // Opciones de vídeo
|
||||
Audio audio; // Opciones de audio
|
||||
std::vector<std::shared_ptr<Gamepad>> gamepads; // Opciones de mando para cada jugador
|
||||
Keyboard keyboard; // Opciones para el teclado
|
||||
PendingChanges pending_changes; // Opciones que se aplican al cerrar
|
||||
Window window; // Opciones de la ventana
|
||||
Settings settings; // Opciones del juego
|
||||
Video video; // Opciones de vídeo
|
||||
Audio audio; // Opciones de audio
|
||||
GamepadManager gamepads; // Opciones de mando para cada jugador
|
||||
Keyboard keyboard; // Opciones para el teclado
|
||||
PendingChanges pending_changes; // Opciones que se aplican al cerrar
|
||||
|
||||
// Declaraciones
|
||||
auto set(const std::string& var, const std::string& value) -> bool;
|
||||
@@ -42,9 +42,9 @@ void init() {
|
||||
Difficulty::init();
|
||||
|
||||
// Opciones de control
|
||||
gamepads.clear();
|
||||
gamepads.emplace_back(std::make_shared<Gamepad>(Player::Id::PLAYER1));
|
||||
gamepads.emplace_back(std::make_shared<Gamepad>(Player::Id::PLAYER2));
|
||||
gamepads.init();
|
||||
assignGamepadByName("", Player::Id::PLAYER1);
|
||||
//assignGamepadByName("", Player::Id::PLAYER2);
|
||||
setKeyboardToPlayer(Player::Id::PLAYER1);
|
||||
|
||||
// Opciones de cambios pendientes
|
||||
@@ -153,16 +153,7 @@ auto saveToFile() -> bool {
|
||||
|
||||
// Opciones de mandos
|
||||
file << "\n\n## CONTROLLERS\n";
|
||||
|
||||
// int controller_index = 0;
|
||||
// for (const auto& controller : gamepads) {
|
||||
// file << "\n";
|
||||
// file << "controller." << controller_index << ".name=" << controller->name << "\n";
|
||||
// file << "controller." << controller_index << ".player=" << controller->player_id << "\n";
|
||||
//
|
||||
// // Incrementa el índice
|
||||
// ++controller_index;
|
||||
// }
|
||||
gamepads.saveToFile(file);
|
||||
|
||||
// Cierra el fichero
|
||||
file.close();
|
||||
@@ -172,20 +163,21 @@ auto saveToFile() -> bool {
|
||||
|
||||
// Función auxiliar para analizar la configuración del mando y reducir duplicación
|
||||
void parseAndSetController(const std::string& var, const std::string& value) {
|
||||
// Lógica básica de análisis (puede hacerse más robusta)
|
||||
// size_t first_dot = var.find('.');
|
||||
// size_t second_dot = var.find('.', 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);
|
||||
//
|
||||
// auto& controller = gamepads.at(controller_index);
|
||||
//
|
||||
// if (setting_key == "name") {
|
||||
// controller.name = value;
|
||||
// } else if (setting_key == "player") {
|
||||
// controller.player_id = std::clamp(std::stoi(value), 1, 2);
|
||||
// }
|
||||
size_t first_dot = var.find('.');
|
||||
size_t second_dot = var.find('.', first_dot + 1);
|
||||
|
||||
if (first_dot == std::string::npos || second_dot == std::string::npos) {
|
||||
return; // Formato inválido
|
||||
}
|
||||
|
||||
try {
|
||||
int controller_index = std::stoi(var.substr(first_dot + 1, second_dot - first_dot - 1));
|
||||
std::string setting_key = var.substr(second_dot + 1);
|
||||
|
||||
gamepads.setControllerProperty(controller_index, setting_key, value);
|
||||
} catch (const std::exception&) {
|
||||
// Error en parsing
|
||||
}
|
||||
}
|
||||
|
||||
auto set(const std::string& var, const std::string& value) -> bool {
|
||||
@@ -265,7 +257,7 @@ void swapKeyboard() {
|
||||
|
||||
// Intercambia los jugadores asignados a los dos primeros mandos
|
||||
void swapControllers() {
|
||||
std::swap(gamepads.at(0)->player_id, gamepads.at(1)->player_id);
|
||||
gamepads.swapPlayers();
|
||||
}
|
||||
|
||||
// Averigua quien está usando el teclado
|
||||
@@ -286,4 +278,26 @@ void checkPendingChanges() {
|
||||
pending_changes.has_pending_changes = settings.language != pending_changes.new_language ||
|
||||
settings.difficulty != pending_changes.new_difficulty;
|
||||
}
|
||||
|
||||
// Buscar y asignar un mando disponible por nombre
|
||||
bool assignGamepadByName(const std::string& gamepad_name, Player::Id player_id) {
|
||||
auto available_gamepad = Input::get()->findAvailableGamepadByName(gamepad_name);
|
||||
|
||||
if (available_gamepad) {
|
||||
const std::string& actual_gamepad_name = available_gamepad->name;
|
||||
return gamepads.assignGamepadToPlayer(player_id, available_gamepad, actual_gamepad_name);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Obtener información de un gamepad específico
|
||||
std::string getGamepadInfo(Player::Id player_id) {
|
||||
try {
|
||||
const auto& gamepad = gamepads.getGamepad(player_id);
|
||||
return "Player " + std::to_string(static_cast<int>(player_id)) +
|
||||
": " + (gamepad.name.empty() ? "No gamepad" : gamepad.name);
|
||||
} catch (const std::exception&) {
|
||||
return "Invalid player";
|
||||
}
|
||||
}
|
||||
} // namespace Options
|
||||
Reference in New Issue
Block a user