canvi de pc
This commit is contained in:
@@ -231,7 +231,7 @@ void Game::updatePlayers() {
|
||||
}
|
||||
|
||||
// Organiza la lista de jugadores
|
||||
movePlayersToFront();
|
||||
sortPlayersByZOrder();
|
||||
}
|
||||
|
||||
// Dibuja a los jugadores
|
||||
@@ -858,7 +858,7 @@ void Game::handlePlayerCollision(std::shared_ptr<Player> &player, std::shared_pt
|
||||
screen_->shake();
|
||||
playSound("voice_no.wav");
|
||||
player->setPlayingState(Player::State::ROLLING);
|
||||
players_to_reorder_.push_back(player);
|
||||
sendPlayerToTheBack(player);
|
||||
if (allPlayersAreNotPlaying()) {
|
||||
Stage::power_can_be_added = false; // No se puede subir poder de fase si no hay nadie jugando
|
||||
}
|
||||
@@ -1418,6 +1418,7 @@ void Game::handlePlayerContinue(const std::shared_ptr<Player> &player) {
|
||||
} else if (player->isWaiting()) {
|
||||
player->setPlayingState(Player::State::ENTERING_SCREEN);
|
||||
}
|
||||
sendPlayerToTheFront(player);
|
||||
}
|
||||
|
||||
// Disminuye el contador de continuación si se presiona cualquier botón de disparo.
|
||||
@@ -1603,7 +1604,10 @@ void Game::initPlayers(int player_id) {
|
||||
getPlayer(1)->setPlayingState(demo_.enabled ? Player::State::PLAYING : Player::State::ENTERING_SCREEN);
|
||||
getPlayer(2)->setPlayingState(demo_.enabled ? Player::State::PLAYING : Player::State::ENTERING_SCREEN);
|
||||
} else {
|
||||
getPlayer(player_id)->setPlayingState(demo_.enabled ? Player::State::PLAYING : Player::State::ENTERING_SCREEN);
|
||||
// Activa el jugador elegido
|
||||
auto player = getPlayer(player_id);
|
||||
player->setPlayingState(demo_.enabled ? Player::State::PLAYING : Player::State::ENTERING_SCREEN);
|
||||
sendPlayerToTheFront(player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1808,20 +1812,32 @@ void Game::playSound(const std::string &name) const {
|
||||
}
|
||||
|
||||
// Organiza los jugadores para que los vivos se pinten sobre los muertos
|
||||
void Game::movePlayersToFront() {
|
||||
if (players_to_reorder_.empty()) {
|
||||
return;
|
||||
void Game::sortPlayersByZOrder() {
|
||||
// Procesar jugadores que van al fondo (se dibujan primero)
|
||||
if (!players_to_put_at_back_.empty()) {
|
||||
for (auto &player : players_to_put_at_back_) {
|
||||
auto it = std::find(players_.begin(), players_.end(), player);
|
||||
if (it != players_.end() && it != players_.begin()) {
|
||||
std::shared_ptr<Player> dying_player = *it;
|
||||
players_.erase(it);
|
||||
players_.insert(players_.begin(), dying_player);
|
||||
}
|
||||
}
|
||||
players_to_put_at_back_.clear();
|
||||
}
|
||||
|
||||
for (auto &player : players_to_reorder_) {
|
||||
auto it = std::find(players_.begin(), players_.end(), player);
|
||||
if (it != players_.end() && it != players_.begin()) {
|
||||
std::shared_ptr<Player> dying_player = *it;
|
||||
players_.erase(it);
|
||||
players_.insert(players_.begin(), dying_player);
|
||||
// Procesar jugadores que van al frente (se dibujan últimos)
|
||||
if (!players_to_put_at_front_.empty()) {
|
||||
for (auto &player : players_to_put_at_front_) {
|
||||
auto it = std::find(players_.begin(), players_.end(), player);
|
||||
if (it != players_.end() && it != players_.end() - 1) {
|
||||
std::shared_ptr<Player> front_player = *it;
|
||||
players_.erase(it);
|
||||
players_.push_back(front_player);
|
||||
}
|
||||
}
|
||||
players_to_put_at_front_.clear();
|
||||
}
|
||||
players_to_reorder_.clear();
|
||||
}
|
||||
|
||||
// Comprueba si está activo el menu de servicio para poner el juego en pausa
|
||||
@@ -1860,6 +1876,16 @@ void Game::putHitOnScreen(SDL_FPoint position) {
|
||||
hit_.disable();
|
||||
}
|
||||
|
||||
// Mueve el jugador para pintarlo al fondo de la lista de jugadores
|
||||
void Game::sendPlayerToTheBack(const std::shared_ptr<Player> &player) {
|
||||
players_to_put_at_back_.push_back(player);
|
||||
}
|
||||
|
||||
// Mueve el jugador para pintarlo el primero de la lista de jugadores
|
||||
void Game::sendPlayerToTheFront(const std::shared_ptr<Player> &player) {
|
||||
players_to_put_at_front_.push_back(player);
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
// Comprueba los eventos en el modo DEBUG
|
||||
void Game::checkDebugEvents(const SDL_Event &event) {
|
||||
|
||||
Reference in New Issue
Block a user