desacoplament de Player i Options
Player: canviat id de int a enum migrant input: eliminat Device, keyboard separat de la llista de mandos, llig i guarda configuracions de mandos falta: definir botons, asignar mandos a jugadors i guardar la asignació
This commit is contained in:
@@ -19,13 +19,13 @@
|
||||
|
||||
namespace Options {
|
||||
// --- Variables globales ---
|
||||
WindowOptions window; // Opciones de la ventana
|
||||
SettingsOptions settings; // Opciones del juego
|
||||
VideoOptions video; // Opciones de vídeo
|
||||
AudioOptions audio; // Opciones de audio
|
||||
std::vector<GamepadOptions> controllers; // Opciones de mando para cada jugador
|
||||
PendingChanges pending_changes; // Opciones que se aplican al cerrar
|
||||
// std::vector<GamepadConfig> gamepad_configs; // Lista con las configuraciones registradas para cada mando
|
||||
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
|
||||
|
||||
// Declaraciones
|
||||
auto set(const std::string& var, const std::string& value) -> bool;
|
||||
@@ -42,10 +42,10 @@ void init() {
|
||||
Difficulty::init();
|
||||
|
||||
// Opciones de control
|
||||
controllers.clear();
|
||||
controllers.emplace_back(GamepadOptions(1));
|
||||
controllers.emplace_back(GamepadOptions(2));
|
||||
setKeyboardToPlayer(1);
|
||||
gamepads.clear();
|
||||
gamepads.emplace_back(std::make_shared<Gamepad>(Player::Id::PLAYER1));
|
||||
gamepads.emplace_back(std::make_shared<Gamepad>(Player::Id::PLAYER2));
|
||||
setKeyboardToPlayer(Player::Id::PLAYER1);
|
||||
|
||||
// Opciones de cambios pendientes
|
||||
pending_changes.new_language = settings.language;
|
||||
@@ -154,15 +154,15 @@ auto saveToFile() -> bool {
|
||||
// Opciones de mandos
|
||||
file << "\n\n## CONTROLLERS\n";
|
||||
|
||||
int controller_index = 0;
|
||||
for (const auto& controller : controllers) {
|
||||
file << "\n";
|
||||
file << "controller." << controller_index << ".name=" << controller.name << "\n";
|
||||
file << "controller." << controller_index << ".player=" << controller.player_id << "\n";
|
||||
|
||||
// Incrementa el índice
|
||||
++controller_index;
|
||||
}
|
||||
// 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;
|
||||
// }
|
||||
|
||||
// Cierra el fichero
|
||||
file.close();
|
||||
@@ -173,19 +173,19 @@ 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 = controllers.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);
|
||||
//
|
||||
// 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);
|
||||
// }
|
||||
}
|
||||
|
||||
auto set(const std::string& var, const std::string& value) -> bool {
|
||||
@@ -254,35 +254,23 @@ auto set(const std::string& var, const std::string& value) -> bool {
|
||||
}
|
||||
|
||||
// Asigna el teclado al jugador
|
||||
void setKeyboardToPlayer(int player_id) {
|
||||
for (auto& controller : controllers) {
|
||||
if (controller.player_id == player_id) {
|
||||
// controller.type = Input::Device::ANY;
|
||||
} else {
|
||||
// controller.type = Input::Device::CONTROLLER;
|
||||
}
|
||||
}
|
||||
void setKeyboardToPlayer(Player::Id player_id) {
|
||||
keyboard.player_id = player_id;
|
||||
}
|
||||
|
||||
// Intercambia el teclado de jugador
|
||||
void swapKeyboard() {
|
||||
// std::swap(controllers.at(0).type, controllers.at(1).type);
|
||||
keyboard.player_id = keyboard.player_id == Player::Id::PLAYER1 ? Player::Id::PLAYER2 : Player::Id::PLAYER1;
|
||||
}
|
||||
|
||||
// Intercambia los jugadores asignados a los dos primeros mandos
|
||||
void swapControllers() {
|
||||
std::swap(controllers.at(0).player_id, controllers.at(1).player_id);
|
||||
// std::swap(controllers.at(0).type, controllers.at(1).type);
|
||||
std::swap(gamepads.at(0)->player_id, gamepads.at(1)->player_id);
|
||||
}
|
||||
|
||||
// Averigua quien está usando el teclado
|
||||
auto getPlayerWhoUsesKeyboard() -> int {
|
||||
// for (const auto& controller : controllers) {
|
||||
// if (controller.type == Input::Device::ANY) {
|
||||
// return controller.player_id;
|
||||
// }
|
||||
//}
|
||||
return 0;
|
||||
auto getPlayerWhoUsesKeyboard() -> Player::Id {
|
||||
return keyboard.player_id;
|
||||
}
|
||||
|
||||
// Aplica los cambios pendientes copiando los valores a sus variables
|
||||
|
||||
Reference in New Issue
Block a user