GamepadManager::swapPlayers() ja notifica als jugadors

This commit is contained in:
2025-08-10 09:35:12 +02:00
parent 3f34f80661
commit 8eb8e07e0a
4 changed files with 76 additions and 55 deletions

View File

@@ -156,6 +156,21 @@ class GamepadManager {
std::swap(gamepads_[0].instance, gamepads_[1].instance); std::swap(gamepads_[0].instance, gamepads_[1].instance);
std::swap(gamepads_[0].name, gamepads_[1].name); std::swap(gamepads_[0].name, gamepads_[1].name);
std::swap(gamepads_[0].path, gamepads_[1].path); 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 { void saveToFile(std::ofstream& file) const {
@@ -209,6 +224,14 @@ class GamepadManager {
return false; return false;
} }
void addPlayer(std::shared_ptr<Player> 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. // Asigna los mandos físicos basándose en la configuración actual de nombres.
void assignAndLinkGamepads(); void assignAndLinkGamepads();
@@ -223,7 +246,8 @@ class GamepadManager {
private: private:
static constexpr std::string_view UNASSIGNED_TEXT = "---"; static constexpr std::string_view UNASSIGNED_TEXT = "---";
static constexpr size_t MAX_PLAYERS = 2; static constexpr size_t MAX_PLAYERS = 2;
std::array<Gamepad, MAX_PLAYERS> gamepads_; std::array<Gamepad, MAX_PLAYERS> gamepads_; // Punteros a las estructuras de mandos de Options
std::vector<std::shared_ptr<Player>> players; // Punteros a los jugadores
// Convierte Player::Id a índice del array // Convierte Player::Id a índice del array
[[nodiscard]] static auto playerIdToIndex(Player::Id player_id) -> size_t { [[nodiscard]] static auto playerIdToIndex(Player::Id player_id) -> size_t {

View File

@@ -75,6 +75,7 @@ Credits::~Credits() {
// Desregistra los jugadores de Options // Desregistra los jugadores de Options
Options::keyboard.clearPlayers(); Options::keyboard.clearPlayers();
Options::gamepad_manager.clearPlayers();
} }
// Bucle principal // Bucle principal
@@ -378,8 +379,10 @@ void Credits::initPlayers() {
players_.back()->setPlayingState(Player::State::CREDITS); players_.back()->setPlayingState(Player::State::CREDITS);
// Registra los jugadores en Options // Registra los jugadores en Options
Options::keyboard.addPlayer(players_.at(0)); for (auto player : players_) {
Options::keyboard.addPlayer(players_.at(1)); Options::keyboard.addPlayer(player);
Options::gamepad_manager.addPlayer(player);
}
} }
// Actualiza los rectangulos negros // Actualiza los rectangulos negros

View File

@@ -124,12 +124,12 @@ Game::~Game() {
// Desregistra los jugadores de Options // Desregistra los jugadores de Options
Options::keyboard.clearPlayers(); Options::keyboard.clearPlayers();
Options::gamepad_manager.clearPlayers();
} }
// Asigna texturas y animaciones // Asigna texturas y animaciones
void Game::setResources() { void Game::setResources() {
// Texturas - Game_text // Texturas - Game_text
{
game_text_textures_.clear(); 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_1000_points"));
game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_2500_points")); game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_2500_points"));
@@ -138,10 +138,8 @@ void Game::setResources() {
game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_one_hit")); 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_stop"));
game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_100000_points")); game_text_textures_.emplace_back(Resource::get()->getTexture("game_text_100000_points"));
}
// Texturas - Items // Texturas - Items
{
item_textures_.clear(); item_textures_.clear();
item_textures_.emplace_back(Resource::get()->getTexture("item_points1_disk.png")); 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_points2_gavina.png"));
@@ -150,34 +148,26 @@ void Game::setResources() {
item_textures_.emplace_back(Resource::get()->getTexture("item_coffee.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_debian.png"));
item_textures_.emplace_back(Resource::get()->getTexture("item_coffee_machine.png")); item_textures_.emplace_back(Resource::get()->getTexture("item_coffee_machine.png"));
}
player_textures_.clear(); player_textures_.clear();
// Texturas - Player1 // Texturas - Player1
{ std::vector<std::shared_ptr<Texture>> player1_textures;
std::vector<std::shared_ptr<Texture>> player_texture; player1_textures.emplace_back(Resource::get()->getTexture("player1.gif"));
player_texture.emplace_back(Resource::get()->getTexture("player1.gif")); player1_textures.emplace_back(Resource::get()->getTexture("player1_power.png"));
player_texture.emplace_back(Resource::get()->getTexture("player1_power.png")); player_textures_.push_back(player1_textures);
player_textures_.push_back(player_texture);
}
// Texturas - Player2 // Texturas - Player2
{ std::vector<std::shared_ptr<Texture>> player2_textures;
std::vector<std::shared_ptr<Texture>> player_texture; player2_textures.emplace_back(Resource::get()->getTexture("player2.gif"));
player_texture.emplace_back(Resource::get()->getTexture("player2.gif")); player2_textures.emplace_back(Resource::get()->getTexture("player2_power.png"));
player_texture.emplace_back(Resource::get()->getTexture("player2_power.png")); player_textures_.push_back(player2_textures);
player_textures_.push_back(player_texture);
}
// Animaciones -- Jugador // Animaciones -- Jugador
{
player_animations_.clear(); player_animations_.clear();
player_animations_.emplace_back(Resource::get()->getAnimation("player.ani")); player_animations_.emplace_back(Resource::get()->getAnimation("player.ani"));
player_animations_.emplace_back(Resource::get()->getAnimation("player_power.ani")); player_animations_.emplace_back(Resource::get()->getAnimation("player_power.ani"));
}
// Animaciones -- Items // Animaciones -- Items
{
item_animations_.clear(); item_animations_.clear();
item_animations_.emplace_back(Resource::get()->getAnimation("item_points1_disk.ani")); 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_points2_gavina.ani"));
@@ -187,7 +177,6 @@ void Game::setResources() {
item_animations_.emplace_back(Resource::get()->getAnimation("item_debian.ani")); item_animations_.emplace_back(Resource::get()->getAnimation("item_debian.ani"));
item_animations_.emplace_back(Resource::get()->getAnimation("item_coffee_machine.ani")); item_animations_.emplace_back(Resource::get()->getAnimation("item_coffee_machine.ani"));
} }
}
// Actualiza el valor de hiScore en caso necesario // Actualiza el valor de hiScore en caso necesario
void Game::updateHiScore() { void Game::updateHiScore() {
@@ -1642,8 +1631,10 @@ void Game::initPlayers(Player::Id player_id) {
} }
// Registra los jugadores en Options // Registra los jugadores en Options
Options::keyboard.addPlayer(players_.at(0)); for (auto player : players_) {
Options::keyboard.addPlayer(players_.at(1)); Options::keyboard.addPlayer(player);
Options::gamepad_manager.addPlayer(player);
}
} }
// Hace sonar la música // Hace sonar la música

View File

@@ -75,6 +75,7 @@ Title::~Title() {
// Desregistra los jugadores de Options // Desregistra los jugadores de Options
Options::keyboard.clearPlayers(); Options::keyboard.clearPlayers();
Options::gamepad_manager.clearPlayers();
} }
// Actualiza las variables del objeto // Actualiza las variables del objeto
@@ -532,8 +533,10 @@ void Title::initPlayers() {
players_.back()->setPlayingState(Player::State::TITLE_HIDDEN); players_.back()->setPlayingState(Player::State::TITLE_HIDDEN);
// Registra los jugadores en Options // Registra los jugadores en Options
Options::keyboard.addPlayer(players_.at(0)); for (auto player : players_) {
Options::keyboard.addPlayer(players_.at(1)); Options::keyboard.addPlayer(player);
Options::gamepad_manager.addPlayer(player);
}
} }
// Actualza los jugadores // Actualza los jugadores