diff --git a/source/options.h b/source/options.h index 2628556..8d67d57 100644 --- a/source/options.h +++ b/source/options.h @@ -156,6 +156,21 @@ class GamepadManager { std::swap(gamepads_[0].instance, gamepads_[1].instance); std::swap(gamepads_[0].name, gamepads_[1].name); std::swap(gamepads_[0].path, gamepads_[1].path); + + for (auto player: players) + { + switch (player->getId()) + { + case Player::Id::PLAYER1: + player->setGamepad(gamepads_[0].instance); + break; + case Player::Id::PLAYER2: + player->setGamepad(gamepads_[1].instance); + break; + default: + break; + } + } } void saveToFile(std::ofstream& file) const { @@ -209,6 +224,14 @@ class GamepadManager { return false; } + void addPlayer(std::shared_ptr player) { players.push_back(player); } // Añade un jugador a la lista + void clearPlayers() { players.clear(); } // Limpia la lista de jugadores + + // Asigna el mando a un jugador + void assignTo(Input::Gamepad gamepad, Player::Id player_id) { + + } + // Asigna los mandos físicos basándose en la configuración actual de nombres. void assignAndLinkGamepads(); @@ -223,7 +246,8 @@ class GamepadManager { private: static constexpr std::string_view UNASSIGNED_TEXT = "---"; static constexpr size_t MAX_PLAYERS = 2; - std::array gamepads_; + std::array gamepads_; // Punteros a las estructuras de mandos de Options + std::vector> players; // Punteros a los jugadores // Convierte Player::Id a índice del array [[nodiscard]] static auto playerIdToIndex(Player::Id player_id) -> size_t { diff --git a/source/sections/credits.cpp b/source/sections/credits.cpp index 47046f4..1fb9117 100644 --- a/source/sections/credits.cpp +++ b/source/sections/credits.cpp @@ -75,6 +75,7 @@ Credits::~Credits() { // Desregistra los jugadores de Options Options::keyboard.clearPlayers(); + Options::gamepad_manager.clearPlayers(); } // Bucle principal @@ -378,8 +379,10 @@ void Credits::initPlayers() { players_.back()->setPlayingState(Player::State::CREDITS); // Registra los jugadores en Options - Options::keyboard.addPlayer(players_.at(0)); - Options::keyboard.addPlayer(players_.at(1)); + for (auto player : players_) { + Options::keyboard.addPlayer(player); + Options::gamepad_manager.addPlayer(player); + } } // Actualiza los rectangulos negros diff --git a/source/sections/game.cpp b/source/sections/game.cpp index 78a5863..5ae53e8 100644 --- a/source/sections/game.cpp +++ b/source/sections/game.cpp @@ -122,71 +122,60 @@ Game::~Game() { Scoreboard::destroy(); SDL_DestroyTexture(canvas_); - // Desregistra los jugadores de Options + // Desregistra los jugadores de Options Options::keyboard.clearPlayers(); + Options::gamepad_manager.clearPlayers(); } // Asigna texturas y animaciones void Game::setResources() { // Texturas - Game_text - { - game_text_textures_.clear(); - game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_1000_points")); - game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_2500_points")); - game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_5000_points")); - game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_powerup")); - game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_one_hit")); - game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_stop")); - game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_100000_points")); - } + game_text_textures_.clear(); + game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_1000_points")); + game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_2500_points")); + game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_5000_points")); + game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_powerup")); + game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_one_hit")); + game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_stop")); + game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_100000_points")); // Texturas - Items - { - item_textures_.clear(); - item_textures_.emplace_back(Resource::get()->getTexture("item_points1_disk.png")); - item_textures_.emplace_back(Resource::get()->getTexture("item_points2_gavina.png")); - item_textures_.emplace_back(Resource::get()->getTexture("item_points3_pacmar.png")); - item_textures_.emplace_back(Resource::get()->getTexture("item_clock.png")); - item_textures_.emplace_back(Resource::get()->getTexture("item_coffee.png")); - item_textures_.emplace_back(Resource::get()->getTexture("item_debian.png")); - item_textures_.emplace_back(Resource::get()->getTexture("item_coffee_machine.png")); - } + item_textures_.clear(); + item_textures_.emplace_back(Resource::get()->getTexture("item_points1_disk.png")); + item_textures_.emplace_back(Resource::get()->getTexture("item_points2_gavina.png")); + item_textures_.emplace_back(Resource::get()->getTexture("item_points3_pacmar.png")); + item_textures_.emplace_back(Resource::get()->getTexture("item_clock.png")); + item_textures_.emplace_back(Resource::get()->getTexture("item_coffee.png")); + item_textures_.emplace_back(Resource::get()->getTexture("item_debian.png")); + item_textures_.emplace_back(Resource::get()->getTexture("item_coffee_machine.png")); player_textures_.clear(); // Texturas - Player1 - { - std::vector> player_texture; - player_texture.emplace_back(Resource::get()->getTexture("player1.gif")); - player_texture.emplace_back(Resource::get()->getTexture("player1_power.png")); - player_textures_.push_back(player_texture); - } + std::vector> player1_textures; + player1_textures.emplace_back(Resource::get()->getTexture("player1.gif")); + player1_textures.emplace_back(Resource::get()->getTexture("player1_power.png")); + player_textures_.push_back(player1_textures); // Texturas - Player2 - { - std::vector> player_texture; - player_texture.emplace_back(Resource::get()->getTexture("player2.gif")); - player_texture.emplace_back(Resource::get()->getTexture("player2_power.png")); - player_textures_.push_back(player_texture); - } + std::vector> player2_textures; + player2_textures.emplace_back(Resource::get()->getTexture("player2.gif")); + player2_textures.emplace_back(Resource::get()->getTexture("player2_power.png")); + player_textures_.push_back(player2_textures); // Animaciones -- Jugador - { - player_animations_.clear(); - player_animations_.emplace_back(Resource::get()->getAnimation("player.ani")); - player_animations_.emplace_back(Resource::get()->getAnimation("player_power.ani")); - } + player_animations_.clear(); + player_animations_.emplace_back(Resource::get()->getAnimation("player.ani")); + player_animations_.emplace_back(Resource::get()->getAnimation("player_power.ani")); // Animaciones -- Items - { - item_animations_.clear(); - item_animations_.emplace_back(Resource::get()->getAnimation("item_points1_disk.ani")); - item_animations_.emplace_back(Resource::get()->getAnimation("item_points2_gavina.ani")); - item_animations_.emplace_back(Resource::get()->getAnimation("item_points3_pacmar.ani")); - item_animations_.emplace_back(Resource::get()->getAnimation("item_clock.ani")); - item_animations_.emplace_back(Resource::get()->getAnimation("item_coffee.ani")); - item_animations_.emplace_back(Resource::get()->getAnimation("item_debian.ani")); - item_animations_.emplace_back(Resource::get()->getAnimation("item_coffee_machine.ani")); - } + item_animations_.clear(); + item_animations_.emplace_back(Resource::get()->getAnimation("item_points1_disk.ani")); + item_animations_.emplace_back(Resource::get()->getAnimation("item_points2_gavina.ani")); + item_animations_.emplace_back(Resource::get()->getAnimation("item_points3_pacmar.ani")); + item_animations_.emplace_back(Resource::get()->getAnimation("item_clock.ani")); + item_animations_.emplace_back(Resource::get()->getAnimation("item_coffee.ani")); + item_animations_.emplace_back(Resource::get()->getAnimation("item_debian.ani")); + item_animations_.emplace_back(Resource::get()->getAnimation("item_coffee_machine.ani")); } // Actualiza el valor de hiScore en caso necesario @@ -1642,8 +1631,10 @@ void Game::initPlayers(Player::Id player_id) { } // Registra los jugadores en Options - Options::keyboard.addPlayer(players_.at(0)); - Options::keyboard.addPlayer(players_.at(1)); + for (auto player : players_) { + Options::keyboard.addPlayer(player); + Options::gamepad_manager.addPlayer(player); + } } // Hace sonar la música diff --git a/source/sections/title.cpp b/source/sections/title.cpp index 18ac138..66fa1ee 100644 --- a/source/sections/title.cpp +++ b/source/sections/title.cpp @@ -75,6 +75,7 @@ Title::~Title() { // Desregistra los jugadores de Options Options::keyboard.clearPlayers(); + Options::gamepad_manager.clearPlayers(); } // Actualiza las variables del objeto @@ -532,8 +533,10 @@ void Title::initPlayers() { players_.back()->setPlayingState(Player::State::TITLE_HIDDEN); // Registra los jugadores en Options - Options::keyboard.addPlayer(players_.at(0)); - Options::keyboard.addPlayer(players_.at(1)); + for (auto player : players_) { + Options::keyboard.addPlayer(player); + Options::gamepad_manager.addPlayer(player); + } } // Actualza los jugadores