Pasaeta de linters
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
#include "options.h"
|
||||
|
||||
#include <SDL3/SDL.h> // Para SDL_ScaleMode, SDL_GamepadButton, SDL_LogCategory, SDL_LogInfo, SDL_LogError, SDL_LogWarn
|
||||
#include <stddef.h> // Para size_t
|
||||
|
||||
#include <algorithm> // Para clamp, max
|
||||
#include <cstddef> // Para size_t
|
||||
#include <fstream> // Para basic_ostream, operator<<, basic_ostream::operator<<, basic_ofstream, basic_istream, basic_ifstream, ifstream, ofstream
|
||||
#include <functional> // Para function
|
||||
#include <map> // Para map, operator==, _Rb_tree_const_iterator
|
||||
@@ -274,7 +274,7 @@ void checkPendingChanges() {
|
||||
}
|
||||
|
||||
// Buscar y asignar un mando disponible por nombre
|
||||
bool assignGamepadByName(const std::string& gamepad_name_to_find, Player::Id player_id) {
|
||||
auto assignGamepadByName(const std::string& gamepad_name_to_find, Player::Id player_id) -> bool {
|
||||
auto found_gamepad = Input::get()->findAvailableGamepadByName(gamepad_name_to_find);
|
||||
|
||||
if (found_gamepad) {
|
||||
@@ -284,7 +284,7 @@ bool assignGamepadByName(const std::string& gamepad_name_to_find, Player::Id pla
|
||||
}
|
||||
|
||||
// Obtener información de un gamepad específico
|
||||
std::string getGamepadInfo(Player::Id player_id) {
|
||||
auto getGamepadInfo(Player::Id player_id) -> std::string {
|
||||
try {
|
||||
const auto& gamepad = gamepad_manager.getGamepad(player_id);
|
||||
return "Player " + std::to_string(static_cast<int>(player_id)) +
|
||||
@@ -300,73 +300,77 @@ void GamepadManager::assignAndLinkGamepads() {
|
||||
auto physical_gamepads = Input::get()->getGamepads();
|
||||
|
||||
// 2. Reiniciamos las asignaciones actuales y guardamos los datos deseados de la config.
|
||||
std::array<std::string, MAX_PLAYERS> desired_paths; // <--- CAMBIO: Guardamos las rutas deseadas.
|
||||
std::array<std::string, MAX_PLAYERS> desired_paths;
|
||||
for (size_t i = 0; i < MAX_PLAYERS; ++i) {
|
||||
desired_paths[i] = gamepads[i].path; // <--- CAMBIO: Obtenemos la ruta.
|
||||
gamepads[i].instance = nullptr; // Limpiamos la instancia
|
||||
desired_paths[i] = gamepads_[i].path;
|
||||
gamepads_[i].instance = nullptr;
|
||||
}
|
||||
|
||||
// 3. Vector para rastrear los mandos físicos que ya hemos asignado.
|
||||
std::vector<std::shared_ptr<Input::Gamepad>> assigned_instances;
|
||||
|
||||
// --- PRIMERA PASADA: Buscar coincidencias exactas por RUTA (path) ---
|
||||
// Este es el método más fiable para identificar un mando de forma única.
|
||||
// --- Ejecutamos las pasadas de asignación ---
|
||||
assignGamepadsByPath(desired_paths, physical_gamepads, assigned_instances);
|
||||
assignRemainingGamepads(physical_gamepads, assigned_instances);
|
||||
}
|
||||
|
||||
// --- PRIMERA PASADA: Intenta asignar mandos basándose en la ruta guardada ---
|
||||
void GamepadManager::assignGamepadsByPath(
|
||||
const std::array<std::string, MAX_PLAYERS>& desired_paths,
|
||||
const std::vector<std::shared_ptr<Input::Gamepad>>& physical_gamepads,
|
||||
std::vector<std::shared_ptr<Input::Gamepad>>& assigned_instances) {
|
||||
for (size_t i = 0; i < MAX_PLAYERS; ++i) {
|
||||
const std::string& desired_path = desired_paths[i]; // <--- CAMBIO: Usamos la ruta.
|
||||
const std::string& desired_path = desired_paths[i];
|
||||
if (desired_path.empty()) {
|
||||
continue; // Si no hay una ruta guardada para este slot, lo saltamos.
|
||||
continue; // No hay ruta guardada para este slot.
|
||||
}
|
||||
|
||||
// Buscamos un mando físico que coincida con la ruta deseada.
|
||||
// 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) { // <--- CAMBIO: Comparamos por ruta.
|
||||
// ¡Coincidencia por ruta! Es casi seguro que es el mando correcto.
|
||||
// La comprobación de 'already_assigned' es una seguridad extra.
|
||||
bool already_assigned = false;
|
||||
for (const auto& assigned : assigned_instances) {
|
||||
if (assigned == physical_gamepad) {
|
||||
already_assigned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!already_assigned) {
|
||||
gamepads[i].instance = physical_gamepad; // Enlazamos la instancia
|
||||
// No actualizamos el nombre ni la ruta aquí, ya que coinciden con la config.
|
||||
assigned_instances.push_back(physical_gamepad); // Lo marcamos como asignado
|
||||
break; // Mando encontrado para este jugador, pasamos al siguiente.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- SEGUNDA PASADA: Asignar los mandos restantes a los jugadores sin mando ---
|
||||
// Esto se ejecuta para slots vacíos o si un mando guardado no se encontró (p. ej. se desconectó).
|
||||
for (size_t i = 0; i < MAX_PLAYERS; ++i) {
|
||||
if (gamepads[i].instance == nullptr) { // Si este jugador aún no tiene mando...
|
||||
|
||||
// ...buscamos un mando físico que todavía esté libre.
|
||||
for (const auto& physical_gamepad : physical_gamepads) {
|
||||
bool already_assigned = false;
|
||||
for (const auto& assigned : assigned_instances) {
|
||||
if (assigned == physical_gamepad) {
|
||||
already_assigned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!already_assigned) {
|
||||
gamepads[i].instance = physical_gamepad; // Se lo asignamos
|
||||
|
||||
// MUY IMPORTANTE: Actualizamos la configuración para reflejar la realidad.
|
||||
gamepads[i].name = physical_gamepad->name; // Actualizamos el nombre
|
||||
gamepads[i].path = physical_gamepad->path; // <--- AÑADIDO: Y también la ruta!
|
||||
|
||||
assigned_instances.push_back(physical_gamepad); // Lo marcamos como asignado
|
||||
break; // Mando encontrado, pasamos al siguiente jugador.
|
||||
}
|
||||
if (physical_gamepad->path == desired_path && !isGamepadAssigned(physical_gamepad, assigned_instances)) {
|
||||
gamepads_[i].instance = physical_gamepad;
|
||||
assigned_instances.push_back(physical_gamepad);
|
||||
break; // Mando encontrado para este jugador, pasamos al siguiente.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- SEGUNDA PASADA: Asigna los mandos físicos restantes a los jugadores libres ---
|
||||
void GamepadManager::assignRemainingGamepads(
|
||||
const std::vector<std::shared_ptr<Input::Gamepad>>& physical_gamepads,
|
||||
std::vector<std::shared_ptr<Input::Gamepad>>& assigned_instances) {
|
||||
for (size_t i = 0; i < MAX_PLAYERS; ++i) {
|
||||
if (gamepads_[i].instance != nullptr) {
|
||||
continue; // Este jugador ya tiene un mando.
|
||||
}
|
||||
|
||||
// Buscamos un mando físico que todavía esté libre.
|
||||
for (const auto& physical_gamepad : physical_gamepads) {
|
||||
if (!isGamepadAssigned(physical_gamepad, assigned_instances)) {
|
||||
gamepads_[i].instance = physical_gamepad;
|
||||
|
||||
// MUY IMPORTANTE: Actualizamos la configuración para reflejar la realidad.
|
||||
gamepads_[i].name = physical_gamepad->name;
|
||||
gamepads_[i].path = physical_gamepad->path;
|
||||
|
||||
assigned_instances.push_back(physical_gamepad);
|
||||
break; // Mando encontrado, pasamos al siguiente jugador.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Función auxiliar para comprobar si un mando físico ya está en la lista de asignados.
|
||||
// Devuelve 'true' si ya ha sido asignado, 'false' en caso contrario.
|
||||
auto GamepadManager::isGamepadAssigned(
|
||||
const std::shared_ptr<Input::Gamepad>& physical_gamepad,
|
||||
const std::vector<std::shared_ptr<Input::Gamepad>>& assigned_instances) -> bool {
|
||||
for (const auto& assigned : assigned_instances) {
|
||||
if (assigned == physical_gamepad) {
|
||||
return true; // Encontrado, por lo tanto, ya está asignado.
|
||||
}
|
||||
}
|
||||
return false; // No se encontró en la lista.
|
||||
}
|
||||
} // namespace Options
|
||||
Reference in New Issue
Block a user