From bccf4c30de79e55fc096af5c577b8cf8dd120b1c Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 4 Jan 2025 10:47:26 +0100 Subject: [PATCH] Modificada la cadencia de foc sense autofire i arreglades un poc les animacions de cool_down i cooling --- source/game.cpp | 40 ++++++++++++++++++++++++++-------------- source/notifier.cpp | 22 +++++++++++----------- source/notifier.h | 4 ++-- source/player.cpp | 43 ++++++++++++++++++++++--------------------- source/player.h | 12 ++++++------ 5 files changed, 67 insertions(+), 54 deletions(-) diff --git a/source/game.cpp b/source/game.cpp index b1dafbc..835f3cf 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -557,17 +557,17 @@ void Game::checkBulletBalloonCollision() auto player = getPlayer(bullet->getOwner()); // Suelta el item si se da el caso - const auto droppeditem = dropItem(); - if (droppeditem != ItemType::NONE && !demo_.recording) + const auto dropped_item = dropItem(); + if (dropped_item != ItemType::NONE && !demo_.recording) { - if (droppeditem != ItemType::COFFEE_MACHINE) + if (dropped_item != ItemType::COFFEE_MACHINE) { - createItem(droppeditem, balloon->getPosX(), balloon->getPosY()); + createItem(dropped_item, balloon->getPosX(), balloon->getPosY()); JA_PlaySound(Resource::get()->getSound("itemdrop.wav")); } else { - createItem(droppeditem, player->getPosX(), 0); + createItem(dropped_item, player->getPosX(), param.game.game_area.rect.y - param.game.coffee_machine_h); coffee_machine_enabled_ = true; } } @@ -1257,7 +1257,14 @@ void Game::checkEvents() } case SDLK_8: { - players_.at(0)->setPlayingState(PlayerState::LEAVING_SCREEN); + for (auto player : players_) + { + if (player->isPlaying()) + { + createItem(ItemType::COFFEE_MACHINE, player->getPosX(), param.game.game_area.rect.y - param.game.coffee_machine_h); + break; + } + } break; } case SDLK_9: @@ -1481,8 +1488,10 @@ void Game::handleFireInput(const std::shared_ptr &player, BulletType bul : InputType::FIRE_RIGHT); createBullet(player->getPosX() + (player->getWidth() / 2) - 6, player->getPosY() + (player->getHeight() / 2), bulletType, player->isPowerUp(), player->getId()); JA_PlaySound(Resource::get()->getSound("bullet.wav")); + // Establece un tiempo de espera para el próximo disparo. - player->setFireCooldown(10); + const int cooldown = player->isPowerUp() ? 5 : options.game.autofire ? 10 : 7; + player->setFireCooldown(cooldown); } } @@ -1492,15 +1501,18 @@ void Game::handlePlayersInput() for (const auto &player : players_) { if (player->isPlaying()) - { // Maneja el input de los jugadores en modo normal. + { + // Maneja el input de los jugadores en modo normal. handleNormalPlayerInput(player); } else if (player->isContinue() || player->isWaiting()) - { // Gestiona la continuación del jugador. + { + // Gestiona la continuación del jugador. handlePlayerContinue(player); } else if (player->isEnteringName() || player->isEnteringNameGameCompleted()) - { // Gestiona la introducción del nombre del jugador. + { + // Gestiona la introducción del nombre del jugador. handleNameInput(player); } } @@ -1593,8 +1605,8 @@ void Game::handleNameInput(const std::shared_ptr &player) { player->setInput(InputType::START); addScoreToScoreBoard(player->getRecordName(), player->getScore()); - const auto status = player->getPlayingState(); - player->setPlayingState(status == PlayerState::ENTERING_NAME ? PlayerState::CONTINUE : PlayerState::LEAVING_SCREEN); + const auto state = player->getPlayingState(); + player->setPlayingState(state == PlayerState::ENTERING_NAME ? PlayerState::CONTINUE : PlayerState::LEAVING_SCREEN); } else { @@ -1617,8 +1629,8 @@ void Game::handleNameInput(const std::shared_ptr &player) { player->setInput(InputType::START); addScoreToScoreBoard(player->getRecordName(), player->getScore()); - const auto status = player->getPlayingState(); - player->setPlayingState(status == PlayerState::ENTERING_NAME ? PlayerState::CONTINUE : PlayerState::LEAVING_SCREEN); + const auto state = player->getPlayingState(); + player->setPlayingState(state == PlayerState::ENTERING_NAME ? PlayerState::CONTINUE : PlayerState::LEAVING_SCREEN); } } diff --git a/source/notifier.cpp b/source/notifier.cpp index 506a2da..a503440 100644 --- a/source/notifier.cpp +++ b/source/notifier.cpp @@ -60,7 +60,7 @@ void Notifier::update() // Si la notificación anterior está "saliendo", no hagas nada if (i > 0) { - if (notifications_[i - 1].status == NotificationStatus::RISING) + if (notifications_[i - 1].state == NotificationStatus::RISING) { break; } @@ -73,8 +73,8 @@ void Notifier::update() { if (param.notification.sound) { - if (notifications_[i].status == NotificationStatus::RISING) - { + if (notifications_[i].state == NotificationStatus::RISING) + { // Reproduce el sonido de la notificación JA_PlaySound(Resource::get()->getSound("notify.wav")); } @@ -82,7 +82,7 @@ void Notifier::update() } // Comprueba los estados - if (notifications_[i].status == NotificationStatus::RISING) + if (notifications_[i].state == NotificationStatus::RISING) { const float step = ((float)notifications_[i].counter / notifications_[i].travel_dist); const int alpha = 255 * step; @@ -99,21 +99,21 @@ void Notifier::update() if (notifications_[i].rect.y == notifications_[i].y) { - notifications_[i].status = NotificationStatus::STAY; + notifications_[i].state = NotificationStatus::STAY; notifications_[i].texture->setAlpha(255); notifications_[i].counter = 0; } } - else if (notifications_[i].status == NotificationStatus::STAY) + else if (notifications_[i].state == NotificationStatus::STAY) { if (notifications_[i].counter == wait_time_) { - notifications_[i].status = NotificationStatus::VANISHING; + notifications_[i].state = NotificationStatus::VANISHING; notifications_[i].counter = 0; } } - else if (notifications_[i].status == NotificationStatus::VANISHING) + else if (notifications_[i].state == NotificationStatus::VANISHING) { const float step = (notifications_[i].counter / (float)notifications_[i].travel_dist); @@ -131,7 +131,7 @@ void Notifier::update() if (notifications_[i].rect.y == notifications_[i].y - notifications_[i].travel_dist) { - notifications_[i].status = NotificationStatus::FINISHED; + notifications_[i].state = NotificationStatus::FINISHED; } } @@ -146,7 +146,7 @@ void Notifier::clearFinishedNotifications() { for (int i = (int)notifications_.size() - 1; i >= 0; --i) { - if (notifications_[i].status == NotificationStatus::FINISHED) + if (notifications_[i].state == NotificationStatus::FINISHED) { notifications_.erase(notifications_.begin() + i); } @@ -302,7 +302,7 @@ void Notifier::clearNotifications() { for (auto ¬ification : notifications_) { - notification.status = NotificationStatus::FINISHED; + notification.state = NotificationStatus::FINISHED; } clearFinishedNotifications(); diff --git a/source/notifier.h b/source/notifier.h index 06b2540..45d240f 100644 --- a/source/notifier.h +++ b/source/notifier.h @@ -37,7 +37,7 @@ private: std::shared_ptr sprite; std::vector texts; int counter; - NotificationStatus status; + NotificationStatus state; NotificationShape shape; SDL_Rect rect; int y; @@ -46,7 +46,7 @@ private: // Constructor explicit Notification() - : texture(nullptr), sprite(nullptr), texts(), counter(0), status(NotificationStatus::RISING), + : texture(nullptr), sprite(nullptr), texts(), counter(0), state(NotificationStatus::RISING), shape(NotificationShape::SQUARED), rect{0, 0, 0, 0}, y(0), travel_dist(0), code("") {} }; diff --git a/source/player.cpp b/source/player.cpp index df250dd..ab9273a 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -56,7 +56,7 @@ void Player::init() vel_y_ = 0; score_ = 0; score_multiplier_ = 1.0f; - cooldown_ = 10; + cool_down_ = 10; enter_name_->init(); // Establece la posición del sprite @@ -401,37 +401,38 @@ void Player::setAnimation() // Actualiza el valor de la variable void Player::updateCooldown() { - if (cooldown_ > 0) + if (cool_down_ > 0) { - cooldown_ -= power_up_ ? 2 : 1; + --cool_down_; + cooling_state_counter_ = 50; } else { - if (!isCooling()) + if (cooling_state_counter_ > 0) { - cooling_status_counter_ = 40; - switch (firing_state_) + if (cooling_state_counter_ == 40) { - case PlayerState::FIRING_LEFT: - firing_state_ = PlayerState::COOLING_LEFT; - break; - case PlayerState::FIRING_RIGHT: - firing_state_ = PlayerState::COOLING_RIGHT; - break; - case PlayerState::FIRING_UP: - firing_state_ = PlayerState::COOLING_UP; - break; - default: - break; + switch (firing_state_) + { + case PlayerState::FIRING_LEFT: + setFiringState(PlayerState::COOLING_LEFT); + break; + case PlayerState::FIRING_RIGHT: + setFiringState(PlayerState::COOLING_RIGHT); + break; + case PlayerState::FIRING_UP: + setFiringState(PlayerState::COOLING_UP); + break; + default: + break; + } } - } - else if (cooling_status_counter_ > 0) - { - --cooling_status_counter_; + --cooling_state_counter_; } else { setFiringState(PlayerState::FIRING_NONE); + cooling_state_counter_ = 0; } } } diff --git a/source/player.h b/source/player.h index abdf630..2669de1 100644 --- a/source/player.h +++ b/source/player.h @@ -69,8 +69,8 @@ private: int default_pos_y_; // Posición inicial para el jugador float vel_x_ = 0.0f; // Cantidad de pixeles a desplazarse en el eje X int vel_y_ = 0.0f; // Cantidad de pixeles a desplazarse en el eje Y - int cooldown_ = 0; // Contador durante el cual no puede disparar - int cooling_status_counter_ = 0; // Contador para la animación del estado cooling + int cool_down_ = 0; // Contador durante el cual no puede disparar + int cooling_state_counter_ = 0; // Contador para la animación del estado cooling int score_ = 0; // Puntos del jugador float score_multiplier_ = 1.0f; // Multiplicador de puntos PlayerState walking_state_ = PlayerState::WALKING_STOP; // Estado del jugador al moverse @@ -207,10 +207,10 @@ public: bool isWaiting() const { return playing_state_ == PlayerState::WAITING; } // Getters - bool canFire() const { return cooldown_ > 0 ? false : true; } + bool canFire() const { return cool_down_ > 0 ? false : true; } bool hasExtraHit() const { return extra_hit_; } - bool isCooling() { return firing_state_ == PlayerState::COOLING_LEFT || firing_state_ == PlayerState::COOLING_UP || firing_state_ == PlayerState::COOLING_RIGHT; } - bool IsEligibleForHighScore() { return score_ > options.game.hi_score_table.back().score; } + bool isCooling() const { return firing_state_ == PlayerState::COOLING_LEFT || firing_state_ == PlayerState::COOLING_UP || firing_state_ == PlayerState::COOLING_RIGHT; } + bool IsEligibleForHighScore() const { return score_ > options.game.hi_score_table.back().score; } bool isInvulnerable() const { return invulnerable_; } bool isPowerUp() const { return power_up_; } Circle &getCollider() { return collider_; } @@ -233,7 +233,7 @@ public: // Setters void setController(int index) { controller_index_ = index; } - void setFireCooldown(int time) { cooldown_ = time; } + void setFireCooldown(int time) { cool_down_ = time; } void setFiringState(PlayerState state) { firing_state_ = state; } void setInvulnerableCounter(int value) { invulnerable_counter_ = value; } void setName(const std::string &name) { name_ = name; }