Player: afegides animacions per al estat WAITING
Player: si tires a jugar desde el estat WAITING passes al ENTERING_SCREEN i despres sempre tens inmunitat, fins i tot la primera volta (al començar el joc) falta: arregñar el z-order per al estat WAITING
This commit is contained in:
@@ -237,9 +237,7 @@ void Game::updatePlayers() {
|
||||
// Dibuja a los jugadores
|
||||
void Game::renderPlayers() {
|
||||
for (auto &player : players_) {
|
||||
if (!player->isWaiting()) {
|
||||
player->render();
|
||||
}
|
||||
player->render();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,9 +361,9 @@ void Game::updateGameStateCompleted() {
|
||||
for (auto &player : players_) {
|
||||
if (player->isPlaying()) {
|
||||
player->addScore(1000000);
|
||||
player->setPlayingState(PlayerState::CELEBRATING);
|
||||
player->setPlayingState(Player::State::CELEBRATING);
|
||||
} else {
|
||||
player->setPlayingState(PlayerState::GAME_OVER);
|
||||
player->setPlayingState(Player::State::GAME_OVER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -376,14 +374,14 @@ void Game::updateGameStateCompleted() {
|
||||
if (game_completed_counter_ == END_CELEBRATIONS) {
|
||||
for (auto &player : players_) {
|
||||
if (player->isCelebrating()) {
|
||||
player->setPlayingState(player->isEligibleForHighScore() ? PlayerState::ENTERING_NAME_GAME_COMPLETED : PlayerState::LEAVING_SCREEN);
|
||||
player->setPlayingState(player->isEligibleForHighScore() ? Player::State::ENTERING_NAME_GAME_COMPLETED : Player::State::LEAVING_SCREEN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Si los jugadores ya no estan y no quedan mensajes en pantalla
|
||||
if (allPlayersAreGameOver() && path_sprites_.empty()) {
|
||||
setState(GameState::GAME_OVER);
|
||||
setState(State::GAME_OVER);
|
||||
}
|
||||
|
||||
// Incrementa el contador al final
|
||||
@@ -392,12 +390,12 @@ void Game::updateGameStateCompleted() {
|
||||
|
||||
// Comprueba el estado del juego
|
||||
void Game::checkState() {
|
||||
if (state_ != GameState::COMPLETED && Stage::number == 10) {
|
||||
setState(GameState::COMPLETED);
|
||||
if (state_ != State::COMPLETED && Stage::number == 10) {
|
||||
setState(State::COMPLETED);
|
||||
}
|
||||
|
||||
if (state_ != GameState::GAME_OVER && allPlayersAreGameOver()) {
|
||||
setState(GameState::GAME_OVER);
|
||||
if (state_ != State::GAME_OVER && allPlayersAreGameOver()) {
|
||||
setState(State::GAME_OVER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -525,7 +523,7 @@ auto Game::checkBulletTabeCollision(std::shared_ptr<Bullet> bullet) -> bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
tabe_->setState(TabeState::HIT);
|
||||
tabe_->setState(Tabe::State::HIT);
|
||||
bullet->disable();
|
||||
|
||||
handleTabeHitEffects();
|
||||
@@ -859,7 +857,7 @@ void Game::handlePlayerCollision(std::shared_ptr<Player> &player, std::shared_pt
|
||||
}
|
||||
screen_->shake();
|
||||
playSound("voice_no.wav");
|
||||
player->setPlayingState(PlayerState::ROLLING);
|
||||
player->setPlayingState(Player::State::ROLLING);
|
||||
players_to_reorder_.push_back(player);
|
||||
if (allPlayersAreNotPlaying()) {
|
||||
Stage::power_can_be_added = false; // No se puede subir poder de fase si no hay nadie jugando
|
||||
@@ -924,22 +922,22 @@ void Game::render() {
|
||||
void Game::updateGameStates() {
|
||||
if (!paused_) {
|
||||
switch (state_) {
|
||||
case GameState::FADE_IN:
|
||||
case State::FADE_IN:
|
||||
updateGameStateFadeIn();
|
||||
break;
|
||||
case GameState::ENTERING_PLAYER:
|
||||
case State::ENTERING_PLAYER:
|
||||
updateGameStateEnteringPlayer();
|
||||
break;
|
||||
case GameState::SHOWING_GET_READY_MESSAGE:
|
||||
case State::SHOWING_GET_READY_MESSAGE:
|
||||
updateGameStateShowingGetReadyMessage();
|
||||
break;
|
||||
case GameState::PLAYING:
|
||||
case State::PLAYING:
|
||||
updateGameStatePlaying();
|
||||
break;
|
||||
case GameState::COMPLETED:
|
||||
case State::COMPLETED:
|
||||
updateGameStateCompleted();
|
||||
break;
|
||||
case GameState::GAME_OVER:
|
||||
case State::GAME_OVER:
|
||||
updateGameStateGameOver();
|
||||
break;
|
||||
default:
|
||||
@@ -951,7 +949,7 @@ void Game::updateGameStates() {
|
||||
// Actualiza el fondo
|
||||
void Game::updateBackground() {
|
||||
// Si el juego está completado, se reduce la velocidad de las nubes
|
||||
if (state_ == GameState::COMPLETED) {
|
||||
if (state_ == State::COMPLETED) {
|
||||
Stage::total_power = (Stage::total_power > 200) ? (Stage::total_power - 25) : 200;
|
||||
}
|
||||
|
||||
@@ -1184,7 +1182,7 @@ void Game::addScoreToScoreBoard(const std::shared_ptr<Player> &player) {
|
||||
// Saca del estado de GAME OVER al jugador si el otro está activo
|
||||
void Game::checkAndUpdatePlayerStatus(int active_player_index, int inactive_player_index) {
|
||||
if (players_[active_player_index]->isGameOver() && !players_[inactive_player_index]->isGameOver() && !players_[inactive_player_index]->isWaiting()) {
|
||||
players_[active_player_index]->setPlayingState(PlayerState::WAITING);
|
||||
players_[active_player_index]->setPlayingState(Player::State::WAITING);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1198,7 +1196,7 @@ void Game::checkPlayersStatusPlaying() {
|
||||
if (allPlayersAreWaitingOrGameOver()) {
|
||||
// Entonces los pone en estado de Game Over
|
||||
for (auto &player : players_) {
|
||||
player->setPlayingState(PlayerState::GAME_OVER);
|
||||
player->setPlayingState(Player::State::GAME_OVER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1415,7 +1413,11 @@ void Game::handleFireInputs(const std::shared_ptr<Player> &player, bool autofire
|
||||
void Game::handlePlayerContinue(const std::shared_ptr<Player> &player) {
|
||||
const auto CONTROLLER_INDEX = player->getController();
|
||||
if (input_->checkInput(InputAction::START, INPUT_DO_NOT_ALLOW_REPEAT, Options::controllers[CONTROLLER_INDEX].type, Options::controllers[CONTROLLER_INDEX].index)) {
|
||||
player->setPlayingState(PlayerState::RESPAWNING);
|
||||
if (player->isContinue()) {
|
||||
player->setPlayingState(Player::State::RESPAWNING);
|
||||
} else if (player->isWaiting()) {
|
||||
player->setPlayingState(Player::State::ENTERING_SCREEN);
|
||||
}
|
||||
}
|
||||
|
||||
// Disminuye el contador de continuación si se presiona cualquier botón de disparo.
|
||||
@@ -1433,18 +1435,18 @@ void Game::handleNameInput(const std::shared_ptr<Player> &player) {
|
||||
const auto CONTROLLER_INDEX = player->getController();
|
||||
if (input_->checkInput(InputAction::FIRE_LEFT, INPUT_DO_NOT_ALLOW_REPEAT, Options::controllers[CONTROLLER_INDEX].type, Options::controllers[CONTROLLER_INDEX].index)) {
|
||||
if (player->isShowingName()) {
|
||||
player->setPlayingState(PlayerState::CONTINUE);
|
||||
player->setPlayingState(Player::State::CONTINUE);
|
||||
} else if (player->getEnterNamePositionOverflow()) {
|
||||
player->setInput(InputAction::START);
|
||||
addScoreToScoreBoard(player);
|
||||
player->setPlayingState(PlayerState::SHOWING_NAME);
|
||||
player->setPlayingState(Player::State::SHOWING_NAME);
|
||||
} else {
|
||||
player->setInput(InputAction::RIGHT);
|
||||
}
|
||||
} else if (input_->checkInput(InputAction::FIRE_CENTER, INPUT_DO_NOT_ALLOW_REPEAT, Options::controllers[CONTROLLER_INDEX].type, Options::controllers[CONTROLLER_INDEX].index) ||
|
||||
input_->checkInput(InputAction::FIRE_RIGHT, INPUT_DO_NOT_ALLOW_REPEAT, Options::controllers[CONTROLLER_INDEX].type, Options::controllers[CONTROLLER_INDEX].index)) {
|
||||
if (player->isShowingName()) {
|
||||
player->setPlayingState(PlayerState::CONTINUE);
|
||||
player->setPlayingState(Player::State::CONTINUE);
|
||||
} else {
|
||||
player->setInput(InputAction::LEFT);
|
||||
}
|
||||
@@ -1454,11 +1456,11 @@ void Game::handleNameInput(const std::shared_ptr<Player> &player) {
|
||||
player->setInput(InputAction::DOWN);
|
||||
} else if (input_->checkInput(InputAction::START, INPUT_DO_NOT_ALLOW_REPEAT, Options::controllers[CONTROLLER_INDEX].type, Options::controllers[CONTROLLER_INDEX].index)) {
|
||||
if (player->isShowingName()) {
|
||||
player->setPlayingState(PlayerState::CONTINUE);
|
||||
player->setPlayingState(Player::State::CONTINUE);
|
||||
} else {
|
||||
player->setInput(InputAction::START);
|
||||
addScoreToScoreBoard(player);
|
||||
player->setPlayingState(PlayerState::SHOWING_NAME);
|
||||
player->setPlayingState(Player::State::SHOWING_NAME);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1467,7 +1469,7 @@ void Game::handleNameInput(const std::shared_ptr<Player> &player) {
|
||||
void Game::initDemo(int player_id) {
|
||||
if (demo_.enabled) {
|
||||
// Cambia el estado del juego
|
||||
setState(GameState::PLAYING);
|
||||
setState(State::PLAYING);
|
||||
|
||||
// Aleatoriza la asignación del fichero con los datos del modo demostracion
|
||||
{
|
||||
@@ -1494,7 +1496,7 @@ void Game::initDemo(int player_id) {
|
||||
if (rand() % 3 != 0) {
|
||||
const auto OTHER_PLAYER_ID = player_id == 1 ? 2 : 1;
|
||||
auto other_player = getPlayer(OTHER_PLAYER_ID);
|
||||
other_player->setPlayingState(PlayerState::PLAYING);
|
||||
other_player->setPlayingState(Player::State::PLAYING);
|
||||
}
|
||||
|
||||
// Asigna cafes a los jugadores
|
||||
@@ -1507,8 +1509,8 @@ void Game::initDemo(int player_id) {
|
||||
}
|
||||
|
||||
// Configura los marcadores
|
||||
scoreboard_->setMode(SCOREBOARD_LEFT_PANEL, ScoreboardMode::DEMO);
|
||||
scoreboard_->setMode(SCOREBOARD_RIGHT_PANEL, ScoreboardMode::DEMO);
|
||||
scoreboard_->setMode(Scoreboard::Id::LEFT, Scoreboard::Mode::DEMO);
|
||||
scoreboard_->setMode(Scoreboard::Id::RIGHT, Scoreboard::Mode::DEMO);
|
||||
|
||||
// Silencia los globos
|
||||
balloon_manager_->setSounds(false);
|
||||
@@ -1534,11 +1536,11 @@ void Game::setTotalPower() {
|
||||
// Inicializa el marcador
|
||||
void Game::initScoreboard() {
|
||||
scoreboard_->setPos(param.scoreboard.rect);
|
||||
scoreboard_->setMode(SCOREBOARD_CENTER_PANEL, ScoreboardMode::STAGE_INFO);
|
||||
scoreboard_->setMode(Scoreboard::Id::CENTER, Scoreboard::Mode::STAGE_INFO);
|
||||
for (const auto &player : players_) {
|
||||
scoreboard_->setName(player->getScoreBoardPanel(), player->getName());
|
||||
if (player->isWaiting()) {
|
||||
scoreboard_->setMode(player->getScoreBoardPanel(), ScoreboardMode::WAITING);
|
||||
scoreboard_->setMode(player->getScoreBoardPanel(), Scoreboard::Mode::WAITING);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1577,27 +1579,31 @@ void Game::initDifficultyVars() {
|
||||
|
||||
// Inicializa los jugadores
|
||||
void Game::initPlayers(int player_id) {
|
||||
// Crea los dos jugadores
|
||||
constexpr int PLAYER_HEIGHT = 32;
|
||||
constexpr int PLAYER_WIDTH = 32;
|
||||
const int Y = param.game.play_area.rect.h - PLAYER_HEIGHT + 1;
|
||||
|
||||
// Crea al jugador uno y lo pone en modo espera
|
||||
players_.emplace_back(std::make_unique<Player>(1, param.game.play_area.first_quarter_x - (PLAYER_WIDTH / 2), Y, demo_.enabled, param.game.play_area.rect, player_textures_[0], player_animations_));
|
||||
players_.back()->setScoreBoardPanel(SCOREBOARD_LEFT_PANEL);
|
||||
players_.back()->setScoreBoardPanel(Scoreboard::Id::LEFT);
|
||||
players_.back()->setName(Lang::getText("[SCOREBOARD] 1"));
|
||||
players_.back()->setController(getController(players_.back()->getId()));
|
||||
players_.back()->setPlayingState(Player::State::WAITING);
|
||||
|
||||
// Crea al jugador dos y lo pone en modo espera
|
||||
players_.emplace_back(std::make_unique<Player>(2, param.game.play_area.third_quarter_x - (PLAYER_WIDTH / 2), Y, demo_.enabled, param.game.play_area.rect, player_textures_[1], player_animations_));
|
||||
players_.back()->setScoreBoardPanel(SCOREBOARD_RIGHT_PANEL);
|
||||
players_.back()->setScoreBoardPanel(Scoreboard::Id::RIGHT);
|
||||
players_.back()->setName(Lang::getText("[SCOREBOARD] 2"));
|
||||
players_.back()->setController(getController(players_.back()->getId()));
|
||||
players_.back()->setPlayingState(Player::State::WAITING);
|
||||
|
||||
// Activa el jugador que coincide con el "player_id" o ambos si es "0"
|
||||
if (player_id == 0) {
|
||||
// Activa ambos jugadores
|
||||
getPlayer(1)->setPlayingState(demo_.enabled ? PlayerState::PLAYING : PlayerState::ENTERING_SCREEN);
|
||||
getPlayer(2)->setPlayingState(demo_.enabled ? PlayerState::PLAYING : PlayerState::ENTERING_SCREEN);
|
||||
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 ? PlayerState::PLAYING : PlayerState::ENTERING_SCREEN);
|
||||
getPlayer(player_id)->setPlayingState(demo_.enabled ? Player::State::PLAYING : Player::State::ENTERING_SCREEN);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1675,7 +1681,7 @@ void Game::updateGameStateFadeIn() {
|
||||
updateScoreboard();
|
||||
updateBackground();
|
||||
if (fade_in_->hasEnded()) {
|
||||
setState(GameState::ENTERING_PLAYER);
|
||||
setState(State::ENTERING_PLAYER);
|
||||
balloon_manager_->createTwoBigBalloons();
|
||||
evaluateAndSetMenace();
|
||||
}
|
||||
@@ -1689,7 +1695,7 @@ void Game::updateGameStateEnteringPlayer() {
|
||||
updateBackground();
|
||||
for (const auto &player : players_) {
|
||||
if (player->isPlaying()) {
|
||||
setState(GameState::SHOWING_GET_READY_MESSAGE);
|
||||
setState(State::SHOWING_GET_READY_MESSAGE);
|
||||
createMessage({paths_.at(0), paths_.at(1)}, Resource::get()->getTexture("game_text_get_ready"));
|
||||
playSound("voice_get_ready.wav");
|
||||
}
|
||||
@@ -1700,7 +1706,7 @@ void Game::updateGameStateEnteringPlayer() {
|
||||
void Game::updateGameStateShowingGetReadyMessage() {
|
||||
updateGameStatePlaying();
|
||||
if (path_sprites_.empty()) {
|
||||
setState(GameState::PLAYING);
|
||||
setState(State::PLAYING);
|
||||
}
|
||||
if (counter_ == 100) {
|
||||
playMusic();
|
||||
@@ -1746,7 +1752,7 @@ void Game::cleanVectors() {
|
||||
|
||||
// Gestiona el nivel de amenaza
|
||||
void Game::updateMenace() {
|
||||
if (state_ == GameState::PLAYING) {
|
||||
if (state_ == State::PLAYING) {
|
||||
const auto STAGE = Stage::get(Stage::number);
|
||||
const float PERCENT = Stage::power / STAGE.power_to_complete;
|
||||
const int DIFFERENCE = STAGE.max_menace - STAGE.min_menace;
|
||||
@@ -1787,7 +1793,7 @@ void Game::checkAndUpdateBalloonSpeed() {
|
||||
}
|
||||
|
||||
// Cambia el estado del juego
|
||||
void Game::setState(GameState state) {
|
||||
void Game::setState(State state) {
|
||||
state_ = state;
|
||||
counter_ = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user