Pasaeta de linters

This commit is contained in:
2025-08-06 13:05:04 +02:00
parent 8ed2dbcd4f
commit 1224af2a9b
40 changed files with 623 additions and 592 deletions

View File

@@ -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