diff --git a/source/asset.cpp b/source/asset.cpp index d0a77ff..2f05cf8 100644 --- a/source/asset.cpp +++ b/source/asset.cpp @@ -9,16 +9,16 @@ #include "utils.h" // Para getFileName // Singleton -Asset *Asset::instance_ = nullptr; +Asset *Asset::instance = nullptr; // Inicializa la instancia única del singleton -void Asset::init(const std::string &executable_path) { Asset::instance_ = new Asset(executable_path); } +void Asset::init(const std::string &executable_path) { Asset::instance = new Asset(executable_path); } // Libera la instancia -void Asset::destroy() { delete Asset::instance_; } +void Asset::destroy() { delete Asset::instance; } // Obtiene la instancia -auto Asset::get() -> Asset * { return Asset::instance_; } +auto Asset::get() -> Asset * { return Asset::instance; } // Añade un elemento a la lista void Asset::add(const std::string &file, AssetType type, bool required, bool absolute) { diff --git a/source/asset.h b/source/asset.h index 33f8444..feaefa8 100644 --- a/source/asset.h +++ b/source/asset.h @@ -41,8 +41,8 @@ class Asset { // Gestor de recursos (singleton) AssetType type; // Tipo de recurso bool required; // Indica si el fichero es obligatorio - AssetItem(std::string filePath, AssetType assetType, bool isRequired) - : file(std::move(filePath)), type(assetType), required(isRequired) {} // Constructor + AssetItem(std::string file_path, AssetType asset_type, bool is_required) + : file(std::move(file_path)), type(asset_type), required(is_required) {} // Constructor }; // --- Variables internas --- @@ -60,5 +60,5 @@ class Asset { // Gestor de recursos (singleton) ~Asset() = default; // Destructor // --- Singleton --- - static Asset *instance_; // Instancia singleton + static Asset *instance; // Instancia singleton }; \ No newline at end of file diff --git a/source/audio.cpp b/source/audio.cpp index e2869d0..0cad257 100644 --- a/source/audio.cpp +++ b/source/audio.cpp @@ -9,16 +9,16 @@ #include "resource.h" // Para Resource // Singleton -Audio *Audio::instance_ = nullptr; +Audio *Audio::instance = nullptr; // Inicializa la instancia única del singleton -void Audio::init() { Audio::instance_ = new Audio(); } +void Audio::init() { Audio::instance = new Audio(); } // Libera la instancia -void Audio::destroy() { delete Audio::instance_; } +void Audio::destroy() { delete Audio::instance; } // Obtiene la instancia -auto Audio::get() -> Audio * { return Audio::instance_; } +auto Audio::get() -> Audio * { return Audio::instance; } // Constructor Audio::Audio() { initSDLAudio(); } diff --git a/source/audio.h b/source/audio.h index 7ecf2b1..5255ac2 100644 --- a/source/audio.h +++ b/source/audio.h @@ -90,5 +90,5 @@ class Audio { ~Audio(); // Destructor privado // --- Singleton --- - static Audio *instance_; + static Audio *instance; }; \ No newline at end of file diff --git a/source/background.cpp b/source/background.cpp index 1a92d0a..f08b981 100644 --- a/source/background.cpp +++ b/source/background.cpp @@ -321,7 +321,11 @@ void Background::createSunPath() { constexpr float RADIUS = 120; // Generar puntos de la curva desde 90 a 180 grados - for (double theta = M_PI / 2; theta <= M_PI; theta += 0.01) { + constexpr double STEP = 0.01; + const int NUM_STEPS = static_cast((M_PI - M_PI / 2) / STEP) + 1; + + for (int i = 0; i < NUM_STEPS; ++i) { + double theta = M_PI / 2 + i * STEP; float x = CENTER_X + (RADIUS * cos(theta)); float y = CENTER_Y - (RADIUS * sin(theta)); sun_path_.push_back({x, y}); @@ -342,7 +346,11 @@ void Background::createMoonPath() { constexpr float RADIUS = 140; // Generar puntos de la curva desde 0 a 90 grados - for (double theta = 0; theta <= M_PI / 2; theta += 0.01) { + constexpr double STEP = 0.01; + const int NUM_STEPS = static_cast((M_PI / 2 - 0) / STEP) + 1; + + for (int i = 0; i < NUM_STEPS; ++i) { + double theta = 0 + i * STEP; float x = CENTER_X + (RADIUS * cos(theta)); float y = CENTER_Y - (RADIUS * sin(theta)); moon_path_.push_back({x, y}); diff --git a/source/balloon.cpp b/source/balloon.cpp index ea34561..013be01 100644 --- a/source/balloon.cpp +++ b/source/balloon.cpp @@ -319,8 +319,8 @@ void Balloon::shiftSprite() { // Establece el nivel de zoom del sprite void Balloon::zoomSprite() { - sprite_->setZoomW(bouncing_.zoomW); - sprite_->setZoomH(bouncing_.zoomH); + sprite_->setZoomW(bouncing_.zoom_w); + sprite_->setZoomH(bouncing_.zoom_h); } // Activa el efecto @@ -341,8 +341,8 @@ void Balloon::disableBounce() { void Balloon::updateBounce() { if (bouncing_.enabled) { const int INDEX = bouncing_.counter / bouncing_.speed; - bouncing_.zoomW = bouncing_.w[INDEX]; - bouncing_.zoomH = bouncing_.h[INDEX]; + bouncing_.zoom_w = bouncing_.w[INDEX]; + bouncing_.zoom_h = bouncing_.h[INDEX]; zoomSprite(); diff --git a/source/balloon.h b/source/balloon.h index e2e927c..5fed9e1 100644 --- a/source/balloon.h +++ b/source/balloon.h @@ -109,10 +109,10 @@ class Balloon { bool enabled = false; // Si el efecto está activo Uint8 counter = 0; // Contador para el efecto Uint8 speed = 2; // Velocidad del efecto - float zoomW = 1.0f; // Zoom en anchura - float zoomH = 1.0f; // Zoom en altura - float despX = 0.0f; // Desplazamiento X antes de pintar - float despY = 0.0f; // Desplazamiento Y antes de pintar + float zoom_w = 1.0f; // Zoom en anchura + float zoom_h = 1.0f; // Zoom en altura + float desp_x = 0.0f; // Desplazamiento X antes de pintar + float desp_y = 0.0f; // Desplazamiento Y antes de pintar float w[MAX_BOUNCE] = {1.10f, 1.05f, 1.00f, 0.95f, 0.90f, 0.95f, 1.00f, 1.02f, 1.05f, 1.02f}; // Zoom ancho float h[MAX_BOUNCE] = {0.90f, 0.95f, 1.00f, 1.05f, 1.10f, 1.05f, 1.00f, 0.98f, 0.95f, 0.98f}; // Zoom alto @@ -120,10 +120,10 @@ class Balloon { Bouncing() = default; void reset() { counter = 0; - zoomW = 1.0f; - zoomH = 1.0f; - despX = 0.0f; - despY = 0.0f; + zoom_w = 1.0f; + zoom_h = 1.0f; + desp_x = 0.0f; + desp_y = 0.0f; } } bouncing_; diff --git a/source/bullet.cpp b/source/bullet.cpp index 19a1cf6..f169bd4 100644 --- a/source/bullet.cpp +++ b/source/bullet.cpp @@ -13,8 +13,8 @@ Bullet::Bullet(float x, float y, BulletType bullet_type, bool powered, int owner pos_y_(y), bullet_type_(bullet_type), owner_(owner) { - vel_x_ = (bullet_type_ == BulletType::LEFT) ? VEL_X_LEFT_ - : (bullet_type_ == BulletType::RIGHT) ? VEL_X_RIGHT_ + vel_x_ = (bullet_type_ == BulletType::LEFT) ? VEL_X_LEFT + : (bullet_type_ == BulletType::RIGHT) ? VEL_X_RIGHT : 0; std::string powered_type = powered ? "powered_" : "normal_"; @@ -59,7 +59,7 @@ BulletMoveStatus Bullet::move() { return BulletMoveStatus::OUT; } - pos_y_ += VEL_Y_; + pos_y_ += VEL_Y; if (pos_y_ < param.game.play_area.rect.y - HEIGHT) { disable(); return BulletMoveStatus::OUT; diff --git a/source/bullet.h b/source/bullet.h index 152a34a..9280f77 100644 --- a/source/bullet.h +++ b/source/bullet.h @@ -46,23 +46,23 @@ class Bullet { private: // Constantes - static constexpr float VEL_Y_ = -3.0f; - static constexpr float VEL_X_LEFT_ = -2.0f; - static constexpr float VEL_X_RIGHT_ = 2.0f; + static constexpr float VEL_Y = -3.0f; + static constexpr float VEL_X_LEFT = -2.0f; + static constexpr float VEL_X_RIGHT = 2.0f; - // Propiedades - std::unique_ptr sprite_; // Sprite con los gráficos + // Propiedades + std::unique_ptr sprite_; // Sprite con los gráficos - float pos_x_; // Posición en el eje X - float pos_y_; // Posición en el eje Y - float vel_x_; // Velocidad en el eje X + float pos_x_; // Posición en el eje X + float pos_y_; // Posición en el eje Y + float vel_x_; // Velocidad en el eje X - BulletType bullet_type_; // Tipo de bala - int owner_; // Identificador del dueño - Circle collider_; // Círculo de colisión + BulletType bullet_type_; // Tipo de bala + int owner_; // Identificador del dueño + Circle collider_; // Círculo de colisión - // Métodos internos - void shiftColliders(); // Ajusta el círculo de colisión - void shiftSprite(); // Ajusta el sprite - BulletMoveStatus move(); // Mueve la bala y devuelve su estado + // Métodos internos + void shiftColliders(); // Ajusta el círculo de colisión + void shiftSprite(); // Ajusta el sprite + BulletMoveStatus move(); // Mueve la bala y devuelve su estado }; diff --git a/source/external/.clang-tidy b/source/external/.clang-tidy new file mode 100644 index 0000000..612bd0e --- /dev/null +++ b/source/external/.clang-tidy @@ -0,0 +1 @@ +Checks: '-*' diff --git a/source/input.cpp b/source/input.cpp index f0c8bd3..3591192 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -9,16 +9,16 @@ #include // Para pair // Singleton -Input *Input::instance_ = nullptr; +Input *Input::instance = nullptr; // Inicializa la instancia única del singleton -void Input::init(const std::string &game_controller_db_path) { Input::instance_ = new Input(game_controller_db_path); } +void Input::init(const std::string &game_controller_db_path) { Input::instance = new Input(game_controller_db_path); } // Libera la instancia -void Input::destroy() { delete Input::instance_; } +void Input::destroy() { delete Input::instance; } // Obtiene la instancia -Input *Input::get() { return Input::instance_; } +Input *Input::get() { return Input::instance; } // Constructor Input::Input(const std::string &game_controller_db_path) diff --git a/source/input.h b/source/input.h index 8ee2a60..821088a 100644 --- a/source/input.h +++ b/source/input.h @@ -146,5 +146,5 @@ class Input { ~Input() = default; // Destructor privado // --- Singleton --- - static Input *instance_; + static Input *instance; }; \ No newline at end of file diff --git a/source/notifier.cpp b/source/notifier.cpp index b89e2de..8eaa238 100644 --- a/source/notifier.cpp +++ b/source/notifier.cpp @@ -14,16 +14,16 @@ #include "texture.h" // Para Texture // Singleton -Notifier *Notifier::instance_ = nullptr; +Notifier *Notifier::instance = nullptr; // Inicializa la instancia única del singleton -void Notifier::init(const std::string &icon_file, std::shared_ptr text) { Notifier::instance_ = new Notifier(icon_file, text); } +void Notifier::init(const std::string &icon_file, std::shared_ptr text) { Notifier::instance = new Notifier(icon_file, text); } // Libera la instancia -void Notifier::destroy() { delete Notifier::instance_; } +void Notifier::destroy() { delete Notifier::instance; } // Obtiene la instancia -Notifier *Notifier::get() { return Notifier::instance_; } +Notifier *Notifier::get() { return Notifier::instance; } // Constructor Notifier::Notifier(std::string icon_file, std::shared_ptr text) diff --git a/source/notifier.h b/source/notifier.h index dd36069..cfcea70 100644 --- a/source/notifier.h +++ b/source/notifier.h @@ -32,37 +32,37 @@ class Notifier { private: // --- Singleton --- - static Notifier *instance_; + static Notifier *instance; - // --- Tipos internos --- - enum class NotificationStatus { - RISING, - STAY, - VANISHING, - FINISHED, - }; + // --- Tipos internos --- + enum class NotificationStatus { + RISING, + STAY, + VANISHING, + FINISHED, + }; - enum class NotificationShape { - ROUNDED, - SQUARED, - }; + enum class NotificationShape { + ROUNDED, + SQUARED, + }; - // --- Estructura Notification --- - struct Notification { - std::shared_ptr texture; // Textura de la notificación - std::shared_ptr sprite; // Sprite asociado - std::vector texts; // Textos a mostrar - int counter; // Contador de tiempo - NotificationStatus state; // Estado de la notificación - NotificationShape shape; // Forma de la notificación - SDL_FRect rect; // Rectángulo de la notificación - int y; // Posición vertical - int travel_dist; // Distancia a recorrer - std::string code; // Código identificador de la notificación + // --- Estructura Notification --- + struct Notification { + std::shared_ptr texture; // Textura de la notificación + std::shared_ptr sprite; // Sprite asociado + std::vector texts; // Textos a mostrar + int counter; // Contador de tiempo + NotificationStatus state; // Estado de la notificación + NotificationShape shape; // Forma de la notificación + SDL_FRect rect; // Rectángulo de la notificación + int y; // Posición vertical + int travel_dist; // Distancia a recorrer + std::string code; // Código identificador de la notificación - // Constructor - explicit Notification() - : texture(nullptr), sprite(nullptr), texts(), counter(0), state(NotificationStatus::RISING), shape(NotificationShape::SQUARED), rect{0, 0, 0, 0}, y(0), travel_dist(0), code("") {} + // Constructor + explicit Notification() + : texture(nullptr), sprite(nullptr), texts(), counter(0), state(NotificationStatus::RISING), shape(NotificationShape::SQUARED), rect{0, 0, 0, 0}, y(0), travel_dist(0), code("") {} }; // --- Objetos y punteros --- diff --git a/source/path_sprite.h b/source/path_sprite.h index fb76f62..033f1f5 100644 --- a/source/path_sprite.h +++ b/source/path_sprite.h @@ -37,7 +37,7 @@ struct Path { }; // Devuelve un vector con los puntos que conforman la ruta -std::vector createPath(float start, float end, PathType type, float fixed_pos, int steps, const std::function &easingFunction); +std::vector createPath(float start, float end, PathType type, float fixed_pos, int steps, const std::function &easing_function); // --- Clase PathSprite: Sprite que sigue uno o varios recorridos --- class PathSprite : public Sprite { @@ -54,7 +54,7 @@ class PathSprite : public Sprite { // --- Gestión de recorridos --- void addPath(Path path, bool centered = false); // Añade un recorrido (Path) void addPath(std::vector spots, int waiting_counter = 0); // Añade un recorrido a partir de puntos - void addPath(int start, int end, PathType type, int fixed_pos, int steps, const std::function &easingFunction, int waiting_counter = 0); // Añade un recorrido generado + void addPath(int start, int end, PathType type, int fixed_pos, int steps, const std::function &easing_function, int waiting_counter = 0); // Añade un recorrido generado // --- Estado y control --- void enable(); // Habilita el objeto diff --git a/source/player.cpp b/source/player.cpp index 8c6e687..8b05b64 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -46,7 +46,7 @@ void Player::init() { firing_state_ = PlayerState::FIRING_NONE; playing_state_ = PlayerState::WAITING; power_up_ = false; - power_up_counter_ = POWERUP_COUNTER_; + power_up_counter_ = POWERUP_COUNTER; extra_hit_ = false; coffees_ = 0; continue_ticks_ = 0; @@ -91,12 +91,12 @@ void Player::setInput(InputAction input) { void Player::setInputPlaying(InputAction input) { switch (input) { case InputAction::LEFT: { - vel_x_ = -BASE_SPEED_; + vel_x_ = -BASE_SPEED; setWalkingState(PlayerState::WALKING_LEFT); break; } case InputAction::RIGHT: { - vel_x_ = BASE_SPEED_; + vel_x_ = BASE_SPEED; setWalkingState(PlayerState::WALKING_RIGHT); break; } @@ -153,7 +153,7 @@ void Player::move() { // Si el jugador abandona el area de juego por los laterales, restaura su posición const float MIN_X = play_area_.x - 5; - const float MAX_X = play_area_.w + 5 - WIDTH_; + const float MAX_X = play_area_.w + 5 - WIDTH; pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X); shiftSprite(); @@ -163,7 +163,7 @@ void Player::move() { // Si el jugador abandona el area de juego por los laterales lo hace rebotar const int X = player_sprite_->getPosX(); const int MIN_X = play_area_.x; - const int MAX_X = play_area_.x + play_area_.w - WIDTH_; + const int MAX_X = play_area_.x + play_area_.w - WIDTH; if ((X < MIN_X) || (X > MAX_X)) { player_sprite_->setPosX(std::clamp(X, MIN_X, MAX_X)); player_sprite_->setVelX(-player_sprite_->getVelX()); @@ -171,10 +171,10 @@ void Player::move() { } // Si el jugador toca el suelo rebota y si tiene poca velocidad, se detiene y cambia de estado - if (player_sprite_->getPosY() > play_area_.h - HEIGHT_) { + if (player_sprite_->getPosY() > play_area_.h - HEIGHT) { if (player_sprite_->getVelY() < 2.0f) { // Si la velocidad de rebote es baja, lo detiene y cambia de estado - const auto NEXT_PLAYER_STATUS = IsEligibleForHighScore() ? PlayerState::ENTERING_NAME : PlayerState::CONTINUE; + const auto NEXT_PLAYER_STATUS = isEligibleForHighScore() ? PlayerState::ENTERING_NAME : PlayerState::CONTINUE; demo_ ? setPlayingState(PlayerState::LYING_ON_THE_FLOOR_FOREVER) : setPlayingState(NEXT_PLAYER_STATUS); pos_x_ = player_sprite_->getPosX(); pos_y_ = default_pos_y_; @@ -183,7 +183,7 @@ void Player::move() { playSound("jump.wav"); } else { // Decrementa las velocidades de rebote - player_sprite_->setPosY(play_area_.h - HEIGHT_); + player_sprite_->setPosY(play_area_.h - HEIGHT); player_sprite_->setVelY(player_sprite_->getVelY() * -0.5f); player_sprite_->setVelX(player_sprite_->getVelX() * 0.75f); player_sprite_->setAnimationSpeed(player_sprite_->getAnimationSpeed() * 2); @@ -195,7 +195,7 @@ void Player::move() { case PlayerState::TITLE_ANIMATION: { // Si el jugador abandona el area de juego por los laterales lo detiene /*const int X = player_sprite_->getPosX(); - const int MIN_X = play_area_.x - WIDTH_; + const int MIN_X = play_area_.x - WIDTH; const int MAX_X = play_area_.x + play_area_.w; if ((X < MIN_X) || (X > MAX_X)) { @@ -219,7 +219,7 @@ void Player::move() { break; } pos_x_ += vel_x_ * 2.0f; - const float MIN_X = -WIDTH_; + const float MIN_X = -WIDTH; const float MAX_X = play_area_.w; pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X); shiftSprite(); @@ -253,7 +253,7 @@ void Player::move() { break; } pos_x_ += vel_x_; - const float MIN_X = -WIDTH_; + const float MIN_X = -WIDTH; const float MAX_X = play_area_.w; pos_x_ = std::clamp(pos_x_, MIN_X, MAX_X); shiftSprite(); @@ -298,8 +298,8 @@ void Player::move() { pos_x_ += vel_x_ / 2.0f; if (vel_x_ > 0) { // setInputPlaying(InputAction::RIGHT); - if (pos_x_ > param.game.game_area.rect.w - WIDTH_) { - pos_x_ = param.game.game_area.rect.w - WIDTH_; + if (pos_x_ > param.game.game_area.rect.w - WIDTH) { + pos_x_ = param.game.game_area.rect.w - WIDTH; vel_x_ *= -1; } } else { @@ -310,7 +310,7 @@ void Player::move() { } } - if (pos_x_ > param.game.game_area.center_x - WIDTH_ / 2) { + if (pos_x_ > param.game.game_area.center_x - WIDTH / 2) { setWalkingState(PlayerState::WALKING_LEFT); } else { setWalkingState(PlayerState::WALKING_RIGHT); @@ -326,7 +326,7 @@ void Player::move() { // Pinta el jugador en pantalla void Player::render() { if (power_up_ && isPlaying()) { - if (power_up_counter_ > (POWERUP_COUNTER_ / 4) || power_up_counter_ % 20 > 4) { + if (power_up_counter_ > (POWERUP_COUNTER / 4) || power_up_counter_ % 20 > 4) { power_sprite_->render(); } } @@ -406,7 +406,7 @@ void Player::setAnimation() { void Player::updateCooldown() { if (playing_state_ == PlayerState::PLAYING) { if (cant_fire_counter_ > 0) { - cooling_state_counter_ = COOLING_DURATION_; + cooling_state_counter_ = COOLING_DURATION; // La mitad del tiempo que no puede disparar tiene el brazo arriba (PlayerState::FIRING) // y la otra mitad en retroceso (PlayerState::RECOILING) @@ -434,8 +434,8 @@ void Player::updateCooldown() { if (recoiling_state_counter_ > 0) { --recoiling_state_counter_; } else { - if (cooling_state_counter_ > COOLING_COMPLETE_) { - if (cooling_state_counter_ == COOLING_DURATION_) { + if (cooling_state_counter_ > COOLING_COMPLETE) { + if (cooling_state_counter_ == COOLING_DURATION) { switch (firing_state_) { case PlayerState::RECOILING_LEFT: setFiringState(PlayerState::COOLING_LEFT); @@ -454,7 +454,7 @@ void Player::updateCooldown() { --cooling_state_counter_; } - if (cooling_state_counter_ == COOLING_COMPLETE_) { + if (cooling_state_counter_ == COOLING_COMPLETE) { setFiringState(PlayerState::FIRING_NONE); cooling_state_counter_ = -1; } @@ -608,7 +608,7 @@ void Player::setPlayingState(PlayerState state) { setScoreboardMode(ScoreboardMode::SCORE); switch (id_) { case 1: - pos_x_ = param.game.game_area.rect.x - WIDTH_; + pos_x_ = param.game.game_area.rect.x - WIDTH; break; case 2: @@ -621,7 +621,7 @@ void Player::setPlayingState(PlayerState state) { break; } case PlayerState::CREDITS: { - vel_x_ = (walking_state_ == PlayerState::WALKING_RIGHT) ? BASE_SPEED_ : -BASE_SPEED_; + vel_x_ = (walking_state_ == PlayerState::WALKING_RIGHT) ? BASE_SPEED : -BASE_SPEED; break; } default: @@ -644,7 +644,7 @@ void Player::decScoreMultiplier() { // Establece el valor del estado void Player::setInvulnerable(bool value) { invulnerable_ = value; - invulnerable_counter_ = invulnerable_ ? INVULNERABLE_COUNTER_ : 0; + invulnerable_counter_ = invulnerable_ ? INVULNERABLE_COUNTER : 0; } // Monitoriza el estado @@ -664,7 +664,7 @@ void Player::updateInvulnerable() { // Establece el valor de la variable void Player::setPowerUp() { power_up_ = true; - power_up_counter_ = POWERUP_COUNTER_; + power_up_counter_ = POWERUP_COUNTER; } // Actualiza el valor de la variable @@ -698,8 +698,8 @@ void Player::removeExtraHit() { // Actualiza el circulo de colisión a la posición del jugador void Player::shiftColliders() { - collider_.x = static_cast(pos_x_ + (WIDTH_ / 2)); - collider_.y = static_cast(pos_y_ + (HEIGHT_ / 2)); + collider_.x = static_cast(pos_x_ + (WIDTH / 2)); + collider_.y = static_cast(pos_y_ + (HEIGHT / 2)); } // Pone las texturas del jugador diff --git a/source/player.h b/source/player.h index 0b0f14b..b2653f0 100644 --- a/source/player.h +++ b/source/player.h @@ -122,7 +122,7 @@ class Player { bool hasExtraHit() const { return extra_hit_; } bool isCooling() const { return firing_state_ == PlayerState::COOLING_LEFT || firing_state_ == PlayerState::COOLING_UP || firing_state_ == PlayerState::COOLING_RIGHT; } bool isRecoiling() const { return firing_state_ == PlayerState::RECOILING_LEFT || firing_state_ == PlayerState::RECOILING_UP || firing_state_ == PlayerState::RECOILING_RIGHT; } - bool IsEligibleForHighScore() const { return score_ > Options::settings.hi_score_table.back().score; } + bool isEligibleForHighScore() const { return score_ > Options::settings.hi_score_table.back().score; } bool isInvulnerable() const { return invulnerable_; } bool isPowerUp() const { return power_up_; } Circle &getCollider() { return collider_; } @@ -130,7 +130,7 @@ class Player { int getCoffees() const { return coffees_; } int getContinueCounter() const { return continue_counter_; } int getController() const { return controller_index_; } - int getHeight() const { return HEIGHT_; } + int getHeight() const { return HEIGHT; } int getId() const { return id_; } int getInvulnerableCounter() const { return invulnerable_counter_; } int getPosX() const { return static_cast(pos_x_); } @@ -140,7 +140,7 @@ class Player { std::string getLastEnterName() const { return last_enter_name_; } int getScore() const { return score_; } int getScoreBoardPanel() const { return scoreboard_panel_; } - int getWidth() const { return WIDTH_; } + int getWidth() const { return WIDTH; } PlayerState getPlayingState() const { return playing_state_; } const std::string &getName() const { return name_; } bool get1CC() const { return game_completed_ && credits_used_ == 1; } @@ -161,71 +161,71 @@ class Player { private: // --- Constantes --- - static constexpr int POWERUP_COUNTER_ = 1500; // Duración del estado PowerUp - static constexpr int INVULNERABLE_COUNTER_ = 200; // Duración del estado invulnerable - static constexpr int WIDTH_ = 30; // Anchura - static constexpr int HEIGHT_ = 30; // Altura - static constexpr float BASE_SPEED_ = 1.5f; // Velocidad base del jugador - static constexpr int COOLING_DURATION_ = 50; - static constexpr int COOLING_COMPLETE_ = 0; + static constexpr int POWERUP_COUNTER = 1500; // Duración del estado PowerUp + static constexpr int INVULNERABLE_COUNTER = 200; // Duración del estado invulnerable + static constexpr int WIDTH = 30; // Anchura + static constexpr int HEIGHT = 30; // Altura + static constexpr float BASE_SPEED = 1.5f; // Velocidad base del jugador + static constexpr int COOLING_DURATION = 50; + static constexpr int COOLING_COMPLETE = 0; - // --- Objetos y punteros --- - std::unique_ptr player_sprite_; // Sprite para dibujar el jugador - std::unique_ptr power_sprite_; // Sprite para dibujar el aura del jugador con el poder a tope - std::unique_ptr enter_name_; // Clase utilizada para introducir el nombre + // --- Objetos y punteros --- + std::unique_ptr player_sprite_; // Sprite para dibujar el jugador + std::unique_ptr power_sprite_; // Sprite para dibujar el aura del jugador con el poder a tope + std::unique_ptr enter_name_; // Clase utilizada para introducir el nombre - // --- Variables de estado --- - int id_; // Número de identificación para el jugador. Player1 = 1, Player2 = 2 - SDL_FRect play_area_; // Rectángulo con la zona de juego - float pos_x_ = 0.0f; // Posición en el eje X - int pos_y_ = 0; // Posición en el eje Y - float default_pos_x_; // Posición inicial para el jugador - int default_pos_y_; // Posición inicial para el jugador - float vel_x_ = 0.0f; // Cantidad de píxeles a desplazarse en el eje X - int vel_y_ = 0.0f; // Cantidad de píxeles a desplazarse en el eje Y - int cant_fire_counter_ = 0; // Contador durante el cual no puede disparar - int recoiling_state_counter_ = 0; // Contador para la animación del estado de retroceso - int recoiling_state_duration_ = 0; // Numero de frames que dura el estado de retroceso - 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 - PlayerState firing_state_ = PlayerState::FIRING_NONE; // Estado del jugador al disparar - PlayerState playing_state_ = PlayerState::WAITING; // Estado del jugador en el juego - bool invulnerable_ = true; // Indica si el jugador es invulnerable - int invulnerable_counter_ = INVULNERABLE_COUNTER_; // Contador para la invulnerabilidad - bool extra_hit_ = false; // Indica si el jugador tiene un toque extra - int coffees_ = 0; // Indica cuántos cafés lleva acumulados - bool power_up_ = false; // Indica si el jugador tiene activo el modo PowerUp - int power_up_counter_ = POWERUP_COUNTER_; // Temporizador para el modo PowerUp - int power_up_desp_x_ = 0; // Desplazamiento del sprite de PowerUp respecto al sprite del jugador - Circle collider_ = Circle(0, 0, 9); // Círculo de colisión del jugador - int continue_counter_ = 10; // Contador para poder continuar - Uint32 continue_ticks_ = 0; // Variable para poder cambiar el contador de continue en función del tiempo - int scoreboard_panel_ = 0; // Panel del marcador asociado al jugador - std::string name_; // Nombre del jugador - int controller_index_ = 0; // Índice del array de mandos que utilizará para moverse - bool demo_ = false; // Para que el jugador sepa si está en el modo demostración - int name_entry_idle_counter_ = 0; // Contador para poner nombre - int name_entry_total_counter_ = 0; // Segundos totales que lleva acumulados poniendo nombre - Uint32 name_entry_ticks_ = 0; // Variable para poder cambiar el contador de poner nombre en función del tiempo - Uint32 showing_name_ticks_ = 0; // Tiempo en el que se entra al estado SHOWING_NAME - int step_counter_ = 0; // Cuenta los pasos para los estados en los que camina automáticamente - bool game_completed_ = false; // Indica si ha completado el juego - int credits_used_ = 1; // Indica el número de veces que ha continuado - std::string last_enter_name_; // Último nombre introducido en la tabla de puntuaciones + // --- Variables de estado --- + int id_; // Número de identificación para el jugador. Player1 = 1, Player2 = 2 + SDL_FRect play_area_; // Rectángulo con la zona de juego + float pos_x_ = 0.0f; // Posición en el eje X + int pos_y_ = 0; // Posición en el eje Y + float default_pos_x_; // Posición inicial para el jugador + int default_pos_y_; // Posición inicial para el jugador + float vel_x_ = 0.0f; // Cantidad de píxeles a desplazarse en el eje X + int vel_y_ = 0.0f; // Cantidad de píxeles a desplazarse en el eje Y + int cant_fire_counter_ = 0; // Contador durante el cual no puede disparar + int recoiling_state_counter_ = 0; // Contador para la animación del estado de retroceso + int recoiling_state_duration_ = 0; // Numero de frames que dura el estado de retroceso + 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 + PlayerState firing_state_ = PlayerState::FIRING_NONE; // Estado del jugador al disparar + PlayerState playing_state_ = PlayerState::WAITING; // Estado del jugador en el juego + bool invulnerable_ = true; // Indica si el jugador es invulnerable + int invulnerable_counter_ = INVULNERABLE_COUNTER; // Contador para la invulnerabilidad + bool extra_hit_ = false; // Indica si el jugador tiene un toque extra + int coffees_ = 0; // Indica cuántos cafés lleva acumulados + bool power_up_ = false; // Indica si el jugador tiene activo el modo PowerUp + int power_up_counter_ = POWERUP_COUNTER; // Temporizador para el modo PowerUp + int power_up_desp_x_ = 0; // Desplazamiento del sprite de PowerUp respecto al sprite del jugador + Circle collider_ = Circle(0, 0, 9); // Círculo de colisión del jugador + int continue_counter_ = 10; // Contador para poder continuar + Uint32 continue_ticks_ = 0; // Variable para poder cambiar el contador de continue en función del tiempo + int scoreboard_panel_ = 0; // Panel del marcador asociado al jugador + std::string name_; // Nombre del jugador + int controller_index_ = 0; // Índice del array de mandos que utilizará para moverse + bool demo_ = false; // Para que el jugador sepa si está en el modo demostración + int name_entry_idle_counter_ = 0; // Contador para poner nombre + int name_entry_total_counter_ = 0; // Segundos totales que lleva acumulados poniendo nombre + Uint32 name_entry_ticks_ = 0; // Variable para poder cambiar el contador de poner nombre en función del tiempo + Uint32 showing_name_ticks_ = 0; // Tiempo en el que se entra al estado SHOWING_NAME + int step_counter_ = 0; // Cuenta los pasos para los estados en los que camina automáticamente + bool game_completed_ = false; // Indica si ha completado el juego + int credits_used_ = 1; // Indica el número de veces que ha continuado + std::string last_enter_name_; // Último nombre introducido en la tabla de puntuaciones - // --- Métodos internos --- - void shiftColliders(); // Actualiza el círculo de colisión a la posición del jugador - void shiftSprite(); // Recoloca el sprite - void updateInvulnerable(); // Monitoriza el estado de invulnerabilidad - void updateContinueCounter(); // Actualiza el contador de continue - void updateEnterNameCounter(); // Actualiza el contador de entrar nombre - void updateShowingName(); // Actualiza el estado SHOWING_NAME - void decNameEntryCounter(); // Decrementa el contador de entrar nombre - void updateScoreboard(); // Actualiza el panel del marcador - void setScoreboardMode(ScoreboardMode mode); // Cambia el modo del marcador - void playSound(const std::string &name); // Hace sonar un sonido - bool isRenderable() const { return !isWaiting() && !isGameOver() && !isTitleHidden(); } - void addScoreToScoreBoard(); // Añade una puntuación a la tabla de records + // --- Métodos internos --- + void shiftColliders(); // Actualiza el círculo de colisión a la posición del jugador + void shiftSprite(); // Recoloca el sprite + void updateInvulnerable(); // Monitoriza el estado de invulnerabilidad + void updateContinueCounter(); // Actualiza el contador de continue + void updateEnterNameCounter(); // Actualiza el contador de entrar nombre + void updateShowingName(); // Actualiza el estado SHOWING_NAME + void decNameEntryCounter(); // Decrementa el contador de entrar nombre + void updateScoreboard(); // Actualiza el panel del marcador + void setScoreboardMode(ScoreboardMode mode); // Cambia el modo del marcador + void playSound(const std::string &name); // Hace sonar un sonido + bool isRenderable() const { return !isWaiting() && !isGameOver() && !isTitleHidden(); } + void addScoreToScoreBoard(); // Añade una puntuación a la tabla de records }; \ No newline at end of file diff --git a/source/resource.cpp b/source/resource.cpp index faba793..86929f1 100644 --- a/source/resource.cpp +++ b/source/resource.cpp @@ -18,16 +18,16 @@ struct JA_Music_t; // lines 11-11 struct JA_Sound_t; // lines 12-12 // Singleton -Resource *Resource::instance_ = nullptr; +Resource *Resource::instance = nullptr; // Inicializa la instancia única del singleton -void Resource::init() { Resource::instance_ = new Resource(); } +void Resource::init() { Resource::instance = new Resource(); } // Libera la instancia -void Resource::destroy() { delete Resource::instance_; } +void Resource::destroy() { delete Resource::instance; } // Obtiene la instancia -Resource *Resource::get() { return Resource::instance_; } +Resource *Resource::get() { return Resource::instance; } // Constructor Resource::Resource() : loading_text_(Screen::get()->getText()) { load(); } @@ -260,11 +260,11 @@ void Resource::addPalettes() { // Crea texturas a partir de textos para mostrar puntuaciones y mensajes void Resource::createTextures() { struct NameAndText { - std::string name; - std::string text; + std::string name; + std::string text; - NameAndText(const std::string &name_init, const std::string &text_init) - : name(name_init), text(text_init) {} + NameAndText(const std::string &name_init, const std::string &text_init) + : name(name_init), text(text_init) {} }; SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> CREATING TEXTURES"); @@ -303,12 +303,12 @@ void Resource::createTextures() { // Crea los objetos de texto a partir de los archivos de textura y texto void Resource::createText() { struct ResourceInfo { - std::string key; - std::string texture_file; - std::string text_file; + std::string key; + std::string texture_file; + std::string text_file; - ResourceInfo(const std::string &k, const std::string &t_file, const std::string &txt_file) - : key(k), texture_file(t_file), text_file(txt_file) {} + ResourceInfo(const std::string &k, const std::string &t_file, const std::string &txt_file) + : key(k), texture_file(t_file), text_file(txt_file) {} }; SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\n>> CREATING TEXT OBJECTS"); diff --git a/source/resource.h b/source/resource.h index 9cc741a..cd1019e 100644 --- a/source/resource.h +++ b/source/resource.h @@ -146,5 +146,5 @@ class Resource { ~Resource(); // Destructor privado // --- Instancia singleton --- - static Resource *instance_; // Instancia única de Resource + static Resource *instance; // Instancia única de Resource }; \ No newline at end of file diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index 8ba790e..3aacec4 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -16,21 +16,21 @@ #include "texture.h" // Para Texture // [SINGLETON] Hay que definir las variables estáticas, desde el .h sólo la hemos declarado -Scoreboard *Scoreboard::scoreboard_ = nullptr; +Scoreboard *Scoreboard::instance = nullptr; // [SINGLETON] Crearemos el objeto score_board con esta función estática void Scoreboard::init() { - Scoreboard::scoreboard_ = new Scoreboard(); + Scoreboard::instance = new Scoreboard(); } // [SINGLETON] Destruiremos el objeto score_board con esta función estática void Scoreboard::destroy() { - delete Scoreboard::scoreboard_; + delete Scoreboard::instance; } // [SINGLETON] Con este método obtenemos el objeto score_board y podemos trabajar con él Scoreboard *Scoreboard::get() { - return Scoreboard::scoreboard_; + return Scoreboard::instance; } // Constructor diff --git a/source/scoreboard.h b/source/scoreboard.h index 8032f0e..3e0ceef 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -67,55 +67,55 @@ class Scoreboard { void setStage(int stage) { stage_ = stage; } private: - // --- Singleton --- - static Scoreboard *scoreboard_; + // --- Objetos y punteros --- + SDL_Renderer *renderer_; // El renderizador de la ventana + std::shared_ptr game_power_meter_texture_; // Textura con el marcador de poder de la fase + std::unique_ptr power_meter_sprite_; // Sprite para el medidor de poder de la fase + std::shared_ptr text_scoreboard_; // Fuente para el marcador del juego + SDL_Texture *background_ = nullptr; // Textura para dibujar el marcador + std::vector panel_texture_; // Texturas para dibujar cada panel - // --- Objetos y punteros --- - SDL_Renderer *renderer_; // El renderizador de la ventana - std::shared_ptr game_power_meter_texture_; // Textura con el marcador de poder de la fase - std::unique_ptr power_meter_sprite_; // Sprite para el medidor de poder de la fase - std::shared_ptr text_scoreboard_; // Fuente para el marcador del juego - SDL_Texture *background_ = nullptr; // Textura para dibujar el marcador - std::vector panel_texture_; // Texturas para dibujar cada panel + // --- Variables de estado --- + std::string name_[SCOREBOARD_MAX_PANELS] = {}; // Nombre de cada jugador + std::string record_name_[SCOREBOARD_MAX_PANELS] = {}; // Nombre introducido para la tabla de records + size_t selector_pos_[SCOREBOARD_MAX_PANELS] = {}; // Posición del selector de letra para introducir el nombre + int score_[SCOREBOARD_MAX_PANELS] = {}; // Puntuación de los jugadores + float mult_[SCOREBOARD_MAX_PANELS] = {}; // Multiplicador de los jugadores + int continue_counter_[SCOREBOARD_MAX_PANELS] = {}; // Tiempo para continuar de los jugadores + Panel panel_[SCOREBOARD_MAX_PANELS] = {}; // Lista con todos los paneles del marcador + int stage_ = 1; // Número de fase actual + int hi_score_ = 0; // Máxima puntuación + float power_ = 0; // Poder actual de la fase + std::string hi_score_name_ = std::string(); // Nombre del jugador con la máxima puntuación + Color color_ = Color(); // Color del marcador + SDL_FRect rect_ = {0, 0, 320, 40}; // Posición y dimensiones del marcador + Uint64 ticks_ = SDL_GetTicks(); // Variable donde almacenar el valor de SDL_GetTicks() + int time_counter_ = 0; // Contador de segundos + int loop_counter_ = 0; // Contador de bucle + std::vector name_colors_; // Colores para destacar el nombre una vez introducido - // --- Variables de estado --- - std::string name_[SCOREBOARD_MAX_PANELS] = {}; // Nombre de cada jugador - std::string record_name_[SCOREBOARD_MAX_PANELS] = {}; // Nombre introducido para la tabla de records - size_t selector_pos_[SCOREBOARD_MAX_PANELS] = {}; // Posición del selector de letra para introducir el nombre - int score_[SCOREBOARD_MAX_PANELS] = {}; // Puntuación de los jugadores - float mult_[SCOREBOARD_MAX_PANELS] = {}; // Multiplicador de los jugadores - int continue_counter_[SCOREBOARD_MAX_PANELS] = {}; // Tiempo para continuar de los jugadores - Panel panel_[SCOREBOARD_MAX_PANELS] = {}; // Lista con todos los paneles del marcador - int stage_ = 1; // Número de fase actual - int hi_score_ = 0; // Máxima puntuación - float power_ = 0; // Poder actual de la fase - std::string hi_score_name_ = std::string(); // Nombre del jugador con la máxima puntuación - Color color_ = Color(); // Color del marcador - SDL_FRect rect_ = {0, 0, 320, 40}; // Posición y dimensiones del marcador - Uint64 ticks_ = SDL_GetTicks(); // Variable donde almacenar el valor de SDL_GetTicks() - int time_counter_ = 0; // Contador de segundos - int loop_counter_ = 0; // Contador de bucle - std::vector name_colors_; // Colores para destacar el nombre una vez introducido + // --- Variables de aspecto --- + Color text_color1_, text_color2_; // Colores para los marcadores del texto; - // --- Variables de aspecto --- - Color text_color1_, text_color2_; // Colores para los marcadores del texto; + // --- Puntos predefinidos para colocar elementos en los paneles --- + SDL_FPoint slot4_1_, slot4_2_, slot4_3_, slot4_4_; + SDL_FPoint enter_name_pos_; - // --- Puntos predefinidos para colocar elementos en los paneles --- - SDL_FPoint slot4_1_, slot4_2_, slot4_3_, slot4_4_; - SDL_FPoint enter_name_pos_; + // --- Métodos internos --- + void recalculateAnchors(); // Recalcula las anclas de los elementos + std::string updateScoreText(int num); // Transforma un valor numérico en una cadena de 7 cifras + void createBackgroundTexture(); // Crea la textura de fondo + void createPanelTextures(); // Crea las texturas de los paneles + void fillPanelTextures(); // Rellena los diferentes paneles del marcador + void fillBackgroundTexture(); // Rellena la textura de fondo + void updateTimeCounter(); // Actualiza el contador + void renderSeparator(); // Dibuja la línea que separa la zona de juego del marcador + void iniNameColors(); // Inicializa el vector de colores para el nombre - // --- Métodos internos --- - void recalculateAnchors(); // Recalcula las anclas de los elementos - std::string updateScoreText(int num); // Transforma un valor numérico en una cadena de 7 cifras - void createBackgroundTexture(); // Crea la textura de fondo - void createPanelTextures(); // Crea las texturas de los paneles - void fillPanelTextures(); // Rellena los diferentes paneles del marcador - void fillBackgroundTexture(); // Rellena la textura de fondo - void updateTimeCounter(); // Actualiza el contador - void renderSeparator(); // Dibuja la línea que separa la zona de juego del marcador - void iniNameColors(); // Inicializa el vector de colores para el nombre + // --- Constructor y destructor privados (singleton) --- + Scoreboard(); + ~Scoreboard(); - // --- Constructor y destructor privados (singleton) --- - Scoreboard(); - ~Scoreboard(); + // --- Singleton --- + static Scoreboard *instance; }; diff --git a/source/screen.cpp b/source/screen.cpp index b8e94a9..336add8 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -19,16 +19,16 @@ #include "ui/service_menu.h" // Para ServiceMenu // Singleton -Screen *Screen::instance_ = nullptr; +Screen *Screen::instance = nullptr; // Inicializa la instancia única del singleton -void Screen::init() { Screen::instance_ = new Screen(); } +void Screen::init() { Screen::instance = new Screen(); } // Libera la instancia -void Screen::destroy() { delete Screen::instance_; } +void Screen::destroy() { delete Screen::instance; } // Obtiene la instancia -auto Screen::get() -> Screen * { return Screen::instance_; } +auto Screen::get() -> Screen * { return Screen::instance; } // Constructor Screen::Screen() @@ -214,7 +214,7 @@ void Screen::renderInfo() { debug_info_.text->writeDX(TEXT_COLOR | TEXT_STROKE, param.game.width - debug_info_.text->lenght(Options::video.info) - 2, 1, Options::video.info, 1, param.debug.color, 1, param.debug.color.DARKEN(150)); // FPS - const std::string FPS_TEXT = std::to_string(fps_.lastValue) + " FPS"; + const std::string FPS_TEXT = std::to_string(fps_.last_value) + " FPS"; debug_info_.text->writeDX(TEXT_COLOR | TEXT_STROKE, param.game.width - debug_info_.text->lenght(FPS_TEXT) - 2, 1 + debug_info_.text->getCharacterSize(), FPS_TEXT, 1, param.debug.color, 1, param.debug.color.DARKEN(150)); } } @@ -254,7 +254,7 @@ void Screen::adjustWindowSize() { const int NEW_POS_X = old_pos_x + ((old_width - WIDTH) / 2); const int NEW_POS_Y = old_pos_y + ((old_height - HEIGHT) / 2); - SDL_SetWindowPosition(window_, std::max(NEW_POS_X, WINDOWS_DECORATIONS_), std::max(NEW_POS_Y, 0)); + SDL_SetWindowPosition(window_, std::max(NEW_POS_X, WINDOWS_DECORATIONS), std::max(NEW_POS_Y, 0)); SDL_SetWindowSize(window_, WIDTH, HEIGHT); } } @@ -370,7 +370,7 @@ void Screen::getDisplayInfo() { std::to_string(static_cast(dm->refresh_rate)) + " Hz"; // Calcula el máximo factor de zoom que se puede aplicar a la pantalla - const int MAX_ZOOM = std::min(dm->w / param.game.width, (dm->h - WINDOWS_DECORATIONS_) / param.game.height); + const int MAX_ZOOM = std::min(dm->w / param.game.width, (dm->h - WINDOWS_DECORATIONS) / param.game.height); // Normaliza los valores de zoom Options::window.size = std::min(Options::window.size, MAX_ZOOM); diff --git a/source/screen.h b/source/screen.h index 51847f8..d753cf9 100644 --- a/source/screen.h +++ b/source/screen.h @@ -62,24 +62,24 @@ class Screen { private: // --- Constantes --- - static constexpr int WINDOWS_DECORATIONS_ = 35; + static constexpr int WINDOWS_DECORATIONS = 35; - // --- Estructuras internas --- - struct FPS { - Uint32 ticks; // Tiempo en milisegundos desde que se comenzó a contar. - int frameCount; // Número acumulado de frames en el intervalo. - int lastValue; // Número de frames calculado en el último segundo. + // --- Estructuras internas --- + struct FPS { + Uint32 ticks; // Tiempo en milisegundos desde que se comenzó a contar. + int frame_count; // Número acumulado de frames en el intervalo. + int last_value; // Número de frames calculado en el último segundo. - FPS() : ticks(0), frameCount(0), lastValue(0) {} - void increment() { frameCount++; } - int calculate(Uint32 currentTicks) { - if (currentTicks - ticks >= 1000) { - lastValue = frameCount; - frameCount = 0; - ticks = currentTicks; - } - return lastValue; - } + FPS() : ticks(0), frame_count(0), last_value(0) {} + void increment() { frame_count++; } + int calculate(Uint32 current_ticks) { + if (current_ticks - ticks >= 1000) { + last_value = frame_count; + frame_count = 0; + ticks = current_ticks; + } + return last_value; + } }; // Efecto de flash en pantalla: pinta la pantalla de un color durante unos frames @@ -108,8 +108,8 @@ class Screen { int original_width; // Ancho original de la imagen bool enabled; // Indica si el efecto está activo - explicit ShakeEffect(bool en = false, int dp = 2, int dl = 3, int cnt = 0, int len = 8, int rem = 0, int origPos = 0, int origWidth = 800) - : desp(dp), delay(dl), counter(cnt), lenght(len), remaining(rem), original_pos(origPos), original_width(origWidth), enabled(en) {} + explicit ShakeEffect(bool en = false, int dp = 2, int dl = 3, int cnt = 0, int len = 8, int rem = 0, int orig_pos = 0, int orig_width = 800) + : desp(dp), delay(dl), counter(cnt), lenght(len), remaining(rem), original_pos(orig_pos), original_width(orig_width), enabled(en) {} // Activa el efecto de sacudida y guarda la posición y tamaño originales void enable(SDL_FRect &src_rect, SDL_FRect &dst_rect, int new_desp = -1, int new_delay = -1, int new_lenght = -1) { @@ -168,7 +168,7 @@ class Screen { #endif // --- Singleton --- - static Screen *instance_; + static Screen *instance; // --- Objetos y punteros --- SDL_Window *window_; // Ventana de la aplicación diff --git a/source/sections/credits.cpp b/source/sections/credits.cpp index 2a64fa6..11013ec 100644 --- a/source/sections/credits.cpp +++ b/source/sections/credits.cpp @@ -170,9 +170,8 @@ void Credits::fillTextTexture() { const int TEXTS_HEIGHT = 1 * text->getCharacterSize() + 8 * SPACE_POST_TITLE + 3 * SPACE_PRE_TITLE; credits_rect_dst_.h = credits_rect_src_.h = TEXTS_HEIGHT; - int y = (param.game.height - TEXTS_HEIGHT) / 2; // PROGRAMMED_AND_DESIGNED_BY - y = 0; + int y = 0; text_grad->writeDX(TEXT_CENTER | TEXT_SHADOW, param.game.game_area.center_x, y, TEXTS.at(0), 1, NO_TEXT_COLOR, 1, SHADOW_TEXT_COLOR); y += SPACE_POST_TITLE; @@ -259,7 +258,7 @@ void Credits::fillCanvas() { // SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0xFF, 0, 0, 0xFF); const Color COLOR = color_.LIGHTEN(); SDL_SetRenderDrawColor(Screen::get()->getRenderer(), COLOR.r, COLOR.g, COLOR.b, 0xFF); - SDL_RenderRect(Screen::get()->getRenderer(), &red_rect); + SDL_RenderRect(Screen::get()->getRenderer(), &border_rect_); // Si el mini_logo está en su destino, lo dibuja encima de lo anterior if (mini_logo_on_position_) { @@ -408,10 +407,10 @@ void Credits::updateBlackRects() { // Actualiza el rectangulo rojo void Credits::updateRedRect() { - red_rect.x = left_black_rect_.x + left_black_rect_.w; - red_rect.y = top_black_rect_.y + top_black_rect_.h - 1; - red_rect.w = right_black_rect_.x - red_rect.x; - red_rect.h = bottom_black_rect_.y - red_rect.y + 1; + border_rect_.x = left_black_rect_.x + left_black_rect_.w; + border_rect_.y = top_black_rect_.y + top_black_rect_.h - 1; + border_rect_.w = right_black_rect_.x - border_rect_.x; + border_rect_.h = bottom_black_rect_.y - border_rect_.y + 1; } // Actualiza el estado de fade diff --git a/source/sections/credits.h b/source/sections/credits.h index d09e0da..a40cdf8 100644 --- a/source/sections/credits.h +++ b/source/sections/credits.h @@ -16,114 +16,114 @@ class Player; class TiledBG; class Credits { - public: - // --- Constructores y destructor --- - Credits(); - ~Credits(); + public: + // --- Constructores y destructor --- + Credits(); + ~Credits(); - // --- Bucle principal --- - void run(); + // --- Bucle principal --- + void run(); - private: - // --- Constantes de clase --- - static constexpr int PLAY_AREA_HEIGHT = 200; + private: + // --- Constantes de clase --- + static constexpr int PLAY_AREA_HEIGHT = 200; - // --- Objetos principales --- - std::unique_ptr balloon_manager_; // Gestión de globos - std::unique_ptr tiled_bg_; // Mosaico animado de fondo - std::unique_ptr fade_in_; // Fundido de entrada - std::unique_ptr fade_out_; // Fundido de salida - std::vector> players_; // Vector de jugadores + // --- Objetos principales --- + std::unique_ptr balloon_manager_; // Gestión de globos + std::unique_ptr tiled_bg_; // Mosaico animado de fondo + std::unique_ptr fade_in_; // Fundido de entrada + std::unique_ptr fade_out_; // Fundido de salida + std::vector> players_; // Vector de jugadores - // --- Gestión de texturas --- - SDL_Texture *text_texture_; // Textura con el texto de créditos - SDL_Texture *canvas_; // Textura donde se dibuja todo + // --- Gestión de texturas --- + SDL_Texture *text_texture_; // Textura con el texto de créditos + SDL_Texture *canvas_; // Textura donde se dibuja todo - // --- Temporización y contadores --- - Uint64 ticks_ = 0; // Control de velocidad del programa - Uint32 counter_ = 0; // Contador principal de lógica - Uint32 counter_pre_fade_ = 0; // Activación del fundido final - Uint32 counter_prevent_endless_ = 0; // Prevención de bucle infinito + // --- Temporización y contadores --- + Uint64 ticks_ = 0; // Control de velocidad del programa + Uint32 counter_ = 0; // Contador principal de lógica + Uint32 counter_pre_fade_ = 0; // Activación del fundido final + Uint32 counter_prevent_endless_ = 0; // Prevención de bucle infinito - // --- Variables de estado --- - bool fading_ = false; // Estado del fade final - bool want_to_pass_ = false; // Jugador quiere saltarse créditos - bool mini_logo_on_position_ = false; // Minilogo en posición final + // --- Variables de estado --- + bool fading_ = false; // Estado del fade final + bool want_to_pass_ = false; // Jugador quiere saltarse créditos + bool mini_logo_on_position_ = false; // Minilogo en posición final - // --- Diseño y posicionamiento --- - float black_bars_size_ = (param.game.game_area.rect.h - PLAY_AREA_HEIGHT) / 2; // Tamaño de las barras negras - int mini_logo_final_pos_ = 0; // Posición final del minilogo - Color color_; // Color usado para los efectos + // --- Diseño y posicionamiento --- + float black_bars_size_ = (param.game.game_area.rect.h - PLAY_AREA_HEIGHT) / 2; // Tamaño de las barras negras + int mini_logo_final_pos_ = 0; // Posición final del minilogo + Color color_; // Color usado para los efectos - // --- Control de audio --- - int initial_volume_ = Options::audio.music.volume; // Volumen inicial - int steps_ = 0; // Pasos para reducir audio + // --- Control de audio --- + int initial_volume_ = Options::audio.music.volume; // Volumen inicial + int steps_ = 0; // Pasos para reducir audio - // --- Rectángulos de renderizado --- - // Texto de créditos - SDL_FRect credits_rect_src_ = param.game.game_area.rect; - SDL_FRect credits_rect_dst_ = param.game.game_area.rect; + // --- Rectángulos de renderizado --- + // Texto de créditos + SDL_FRect credits_rect_src_ = param.game.game_area.rect; + SDL_FRect credits_rect_dst_ = param.game.game_area.rect; - // Mini logo - SDL_FRect mini_logo_rect_src_ = param.game.game_area.rect; - SDL_FRect mini_logo_rect_dst_ = param.game.game_area.rect; + // Mini logo + SDL_FRect mini_logo_rect_src_ = param.game.game_area.rect; + SDL_FRect mini_logo_rect_dst_ = param.game.game_area.rect; - // Definición del área de juego - SDL_FRect play_area_ = { - param.game.game_area.rect.x, - param.game.game_area.rect.y + black_bars_size_, - param.game.game_area.rect.w, - PLAY_AREA_HEIGHT}; + // Definición del área de juego + SDL_FRect play_area_ = { + param.game.game_area.rect.x, + param.game.game_area.rect.y + black_bars_size_, + param.game.game_area.rect.w, + PLAY_AREA_HEIGHT}; - // Barras negras para efecto letterbox - SDL_FRect top_black_rect_ = { - play_area_.x, - param.game.game_area.rect.y, - play_area_.w, - black_bars_size_}; - SDL_FRect bottom_black_rect_ = { - play_area_.x, - param.game.game_area.rect.h - black_bars_size_, - play_area_.w, - black_bars_size_}; - SDL_FRect left_black_rect_ = { - play_area_.x, - param.game.game_area.center_y - 1, - 0, - 2}; - SDL_FRect right_black_rect_ = { - play_area_.x + play_area_.w, - param.game.game_area.center_y - 1, - 0, - 2}; + // Barras negras para efecto letterbox + SDL_FRect top_black_rect_ = { + play_area_.x, + param.game.game_area.rect.y, + play_area_.w, + black_bars_size_}; + SDL_FRect bottom_black_rect_ = { + play_area_.x, + param.game.game_area.rect.h - black_bars_size_, + play_area_.w, + black_bars_size_}; + SDL_FRect left_black_rect_ = { + play_area_.x, + param.game.game_area.center_y - 1, + 0, + 2}; + SDL_FRect right_black_rect_ = { + play_area_.x + play_area_.w, + param.game.game_area.center_y - 1, + 0, + 2}; - // Borde para la ventana - SDL_FRect red_rect = play_area_; // Delimitador de ventana + // Borde para la ventana + SDL_FRect border_rect_ = play_area_; // Delimitador de ventana - // --- Métodos del bucle principal --- - void update(); // Actualización principal de la lógica - void render(); // Renderizado de la escena - void checkEvents(); // Manejo de eventos - void checkInput(); // Procesamiento de entrada + // --- Métodos del bucle principal --- + void update(); // Actualización principal de la lógica + void render(); // Renderizado de la escena + void checkEvents(); // Manejo de eventos + void checkInput(); // Procesamiento de entrada - // --- Métodos de renderizado --- - void fillTextTexture(); // Crear textura de texto de créditos - void fillCanvas(); // Renderizar todos los sprites y fondos - void updateTextureDstRects(); // Actualizar destinos de texturas - void renderPlayers(); // Renderiza los jugadores + // --- Métodos de renderizado --- + void fillTextTexture(); // Crear textura de texto de créditos + void fillCanvas(); // Renderizar todos los sprites y fondos + void updateTextureDstRects(); // Actualizar destinos de texturas + void renderPlayers(); // Renderiza los jugadores - // --- Métodos de lógica del juego --- - void throwBalloons(); // Lanzar globos al escenario - void initPlayers(); // Inicializar jugadores - void updateAllFades(); // Actualizar estados de fade - void cycleColors(); // Cambiar colores de fondo - void updatePlayers(); // Actualza los jugadores + // --- Métodos de lógica del juego --- + void throwBalloons(); // Lanzar globos al escenario + void initPlayers(); // Inicializar jugadores + void updateAllFades(); // Actualizar estados de fade + void cycleColors(); // Cambiar colores de fondo + void updatePlayers(); // Actualza los jugadores - // --- Métodos de interfaz --- - void updateBlackRects(); // Actualizar rectángulos negros (letterbox) - void updateRedRect(); // Actualizar rectángulo rojo (borde) + // --- Métodos de interfaz --- + void updateBlackRects(); // Actualizar rectángulos negros (letterbox) + void updateRedRect(); // Actualizar rectángulo rojo (borde) - // --- Métodos de audio --- - void setVolume(int amount); // Establecer volumen - void resetVolume(); // Restablecer volumen + // --- Métodos de audio --- + void setVolume(int amount); // Establecer volumen + void resetVolume(); // Restablecer volumen }; \ No newline at end of file diff --git a/source/sections/game.cpp b/source/sections/game.cpp index d23c8f9..dd95a2d 100644 --- a/source/sections/game.cpp +++ b/source/sections/game.cpp @@ -283,7 +283,7 @@ void Game::updateGameStateGameOver() { cleanVectors(); if (game_over_counter_ > 0) { - if (game_over_counter_ == GAME_OVER_COUNTER_) { + if (game_over_counter_ == GAME_OVER_COUNTER) { createMessage({paths_.at(2), paths_.at(3)}, Resource::get()->getTexture("game_text_game_over")); Audio::get()->fadeOutMusic(1000); balloon_manager_->setBouncingSounds(true); @@ -367,7 +367,7 @@ 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() ? PlayerState::ENTERING_NAME_GAME_COMPLETED : PlayerState::LEAVING_SCREEN); } } } @@ -621,7 +621,7 @@ ItemType Game::dropItem() { break; case 4: if (LUCKY_NUMBER < helper_.item_coffee_odds) { - helper_.item_coffee_odds = ITEM_COFFEE_ODDS_; + helper_.item_coffee_odds = ITEM_COFFEE_ODDS; return ItemType::COFFEE; } else { if (helper_.need_coffee) { @@ -631,7 +631,7 @@ ItemType Game::dropItem() { break; case 5: if (LUCKY_NUMBER < helper_.item_coffee_machine_odds) { - helper_.item_coffee_machine_odds = ITEM_COFFEE_MACHINE_ODDS_; + helper_.item_coffee_machine_odds = ITEM_COFFEE_MACHINE_ODDS; if (!coffee_machine_enabled_ && helper_.need_coffee_machine) { return ItemType::COFFEE_MACHINE; } @@ -786,7 +786,7 @@ void Game::handlePlayerCollision(std::shared_ptr &player) { screen_->shake(); playSound("voice_no.wav"); player->setPlayingState(PlayerState::ROLLING); - players_to_reorder.push_back(player); + players_to_reorder_.push_back(player); if (allPlayersAreNotPlaying()) { // No se puede subir poder de fase si no hay nadie jugando Stage::power_can_be_added = false; @@ -928,7 +928,7 @@ void Game::render() { void Game::enableTimeStopItem() { balloon_manager_->stopAllBalloons(); balloon_manager_->reverseColorsToAllBalloons(); - time_stopped_counter_ = TIME_STOPPED_COUNTER_; + time_stopped_counter_ = TIME_STOPPED_COUNTER; } // Deshabilita el efecto del item de detener el tiempo @@ -1158,12 +1158,12 @@ void Game::checkInput() { // Comprueba las entradas si no está el menú de servicio activo if (!ServiceMenu::get()->isEnabled()) { checkPauseInput(); - demo_.enabled ? DEMO_handlePassInput() : handlePlayersInput(); + demo_.enabled ? demoHandlePassInput() : handlePlayersInput(); } // Mueve los jugadores en el modo demo if (demo_.enabled) { - DEMO_handleInput(); + demoHandleInput(); } // Verifica los inputs globales. @@ -1188,7 +1188,7 @@ void Game::checkPauseInput() { } // Gestiona las entradas de los jugadores en el modo demo para saltarse la demo. -void Game::DEMO_handlePassInput() { +void Game::demoHandlePassInput() { if (input_->checkAnyButton()) { Section::name = Section::Name::TITLE; // Salir del modo demo y regresar al menú principal. Section::attract_mode = Section::AttractMode::TITLE_TO_DEMO; // El juego volverá a mostrar la demo @@ -1197,19 +1197,19 @@ void Game::DEMO_handlePassInput() { } // Gestiona las entradas de los jugadores en el modo demo, incluyendo movimientos y disparos automáticos. -void Game::DEMO_handleInput() { +void Game::demoHandleInput() { int index = 0; for (const auto &player : players_) { if (player->isPlaying()) { // Maneja el input específico del jugador en modo demo. - DEMO_handlePlayerInput(player, index); + demoHandlePlayerInput(player, index); } ++index; } } // Procesa las entradas para un jugador específico durante el modo demo. -void Game::DEMO_handlePlayerInput(const std::shared_ptr &player, int index) { +void Game::demoHandlePlayerInput(const std::shared_ptr &player, int index) { const auto &demo_data = demo_.data[index][demo_.counter]; if (demo_data.left == 1) { @@ -1721,10 +1721,10 @@ void Game::playSound(const std::string &name) { // Organiza los jugadores para que los vivos se pinten sobre los muertos void Game::movePlayersToFront() { - if (players_to_reorder.empty()) + if (players_to_reorder_.empty()) return; - for (auto &player : players_to_reorder) { + 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 dying_player = *it; @@ -1732,7 +1732,7 @@ void Game::movePlayersToFront() { players_.insert(players_.begin(), dying_player); } } - players_to_reorder.clear(); + players_to_reorder_.clear(); } // Comprueba si está activo el menu de servicio para poner el juego en pausa diff --git a/source/sections/game.h b/source/sections/game.h index 3e9d2c3..9a89230 100644 --- a/source/sections/game.h +++ b/source/sections/game.h @@ -39,13 +39,13 @@ constexpr int TOTAL_SCORE_DATA = 3; class Game { public: // Constructor - Game(int playerID, int current_stage, bool demo); + Game(int player_id, int current_stage, bool demo); - // Destructor - ~Game(); + // Destructor + ~Game(); - // Bucle principal del juego - void run(); + // Bucle principal del juego + void run(); private: // --- Tipos internos --- @@ -59,18 +59,18 @@ class Game { }; // --- Constantes internas --- - static constexpr int HELP_COUNTER_ = 1000; - static constexpr int GAME_COMPLETED_START_FADE_ = 500; - static constexpr int GAME_COMPLETED_END_ = 700; - static constexpr int GAME_OVER_COUNTER_ = 350; - static constexpr int TIME_STOPPED_COUNTER_ = 360; - static constexpr int ITEM_POINTS_1_DISK_ODDS_ = 10; - static constexpr int ITEM_POINTS_2_GAVINA_ODDS_ = 6; - static constexpr int ITEM_POINTS_3_PACMAR_ODDS_ = 3; - static constexpr int ITEM_CLOCK_ODDS_ = 5; - static constexpr int ITEM_COFFEE_ODDS_ = 5; - static constexpr int ITEM_POWER_BALL_ODDS_ = 0; - static constexpr int ITEM_COFFEE_MACHINE_ODDS_ = 4; + static constexpr int HELP_COUNTER = 1000; + static constexpr int GAME_COMPLETED_START_FADE = 500; + static constexpr int GAME_COMPLETED_END = 700; + static constexpr int GAME_OVER_COUNTER = 350; + static constexpr int TIME_STOPPED_COUNTER = 360; + static constexpr int ITEM_POINTS_1_DISK_ODDS = 10; + static constexpr int ITEM_POINTS_2_GAVINA_ODDS = 6; + static constexpr int ITEM_POINTS_3_PACMAR_ODDS = 3; + static constexpr int ITEM_CLOCK_ODDS = 5; + static constexpr int ITEM_COFFEE_ODDS = 5; + static constexpr int ITEM_POWER_BALL_ODDS = 0; + static constexpr int ITEM_COFFEE_MACHINE_ODDS = 4; // --- Estructuras --- struct Helper { @@ -89,13 +89,13 @@ class Game { : need_coffee(false), need_coffee_machine(false), need_power_ball(false), - counter(HELP_COUNTER_), - item_disk_odds(ITEM_POINTS_1_DISK_ODDS_), - item_gavina_odds(ITEM_POINTS_2_GAVINA_ODDS_), - item_pacmar_odds(ITEM_POINTS_3_PACMAR_ODDS_), - item_clock_odds(ITEM_CLOCK_ODDS_), - item_coffee_odds(ITEM_COFFEE_ODDS_), - item_coffee_machine_odds(ITEM_COFFEE_MACHINE_ODDS_) {} + counter(HELP_COUNTER), + item_disk_odds(ITEM_POINTS_1_DISK_ODDS), + item_gavina_odds(ITEM_POINTS_2_GAVINA_ODDS), + item_pacmar_odds(ITEM_POINTS_3_PACMAR_ODDS), + item_clock_odds(ITEM_CLOCK_ODDS), + item_coffee_odds(ITEM_COFFEE_ODDS), + item_coffee_machine_odds(ITEM_COFFEE_MACHINE_ODDS) {} }; // --- Objetos y punteros --- @@ -144,13 +144,13 @@ class Game { float difficulty_score_multiplier_; // Multiplicador de puntos en función de la dificultad int counter_ = 0; // Contador para el juego int game_completed_counter_ = 0; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos - int game_over_counter_ = GAME_OVER_COUNTER_; // Contador para el estado de fin de partida + int game_over_counter_ = GAME_OVER_COUNTER; // Contador para el estado de fin de partida int time_stopped_counter_ = 0; // Temporizador para llevar la cuenta del tiempo detenido int total_power_to_complete_game_; // La suma del poder necesario para completar todas las fases int menace_current_ = 0; // Nivel de amenaza actual int menace_threshold_ = 0; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el número de globos GameState state_ = GameState::FADE_IN; // Estado - std::vector> players_to_reorder; + std::vector> players_to_reorder_; #ifdef DEBUG bool auto_pop_balloons_ = false; // Si es true, incrementa automaticamente los globos explotados @@ -208,16 +208,16 @@ class Game { void checkAndUpdatePlayerStatus(int active_player_index, int inactive_player_index); // Saca del estado de GAME OVER al jugador si el otro está activo void checkPlayersStatusPlaying(); // Comprueba el estado de juego de los jugadores std::shared_ptr getPlayer(int id); // Obtiene un jugador a partir de su "id" - int getController(int playerId); // Obtiene un controlador a partir del "id" del jugador + int getController(int player_id); // Obtiene un controlador a partir del "id" del jugador void checkInput(); // Gestiona la entrada durante el juego void checkPauseInput(); // Verifica si alguno de los controladores ha solicitado una pausa y actualiza el estado de pausa del juego. - void DEMO_handleInput(); // Gestiona las entradas de los jugadores en el modo demo, incluyendo movimientos y disparos automáticos. - void DEMO_handlePassInput(); // Gestiona las entradas de los jugadores en el modo demo para saltarse la demo. - void DEMO_handlePlayerInput(const std::shared_ptr &player, int index); // Procesa las entradas para un jugador específico durante el modo demo. - void handleFireInput(const std::shared_ptr &player, BulletType bulletType); // Maneja el disparo de un jugador, incluyendo la creación de balas y la gestión del tiempo de espera entre disparos. + void demoHandleInput(); // Gestiona las entradas de los jugadores en el modo demo, incluyendo movimientos y disparos automáticos. + void demoHandlePassInput(); // Gestiona las entradas de los jugadores en el modo demo para saltarse la demo. + void demoHandlePlayerInput(const std::shared_ptr &player, int index); // Procesa las entradas para un jugador específico durante el modo demo. + void handleFireInput(const std::shared_ptr &player, BulletType bullet_type); // Maneja el disparo de un jugador, incluyendo la creación de balas y la gestión del tiempo de espera entre disparos. void handlePlayersInput(); // Gestiona las entradas de todos los jugadores en el modo normal (fuera del modo demo). void handleNormalPlayerInput(const std::shared_ptr &player); // Maneja las entradas de movimiento y disparo para un jugador en modo normal. - void handleFireInputs(const std::shared_ptr &player, bool autofire, int controllerIndex); // Procesa las entradas de disparo del jugador, permitiendo disparos automáticos si está habilitado. + void handleFireInputs(const std::shared_ptr &player, bool autofire, int controller_index); // Procesa las entradas de disparo del jugador, permitiendo disparos automáticos si está habilitado. void handlePlayerContinue(const std::shared_ptr &player); // Maneja la continuación del jugador cuando no está jugando, permitiendo que continúe si se pulsa el botón de inicio. void handleNameInput(const std::shared_ptr &player); // Procesa las entradas para la introducción del nombre del jugador. void initDemo(int player_id); // Inicializa las variables para el modo DEMO diff --git a/source/sections/hiscore_table.cpp b/source/sections/hiscore_table.cpp index d41bfc1..11d662e 100644 --- a/source/sections/hiscore_table.cpp +++ b/source/sections/hiscore_table.cpp @@ -383,7 +383,7 @@ void HiScoreTable::updateCounter() { background_->setAlpha(96); } - if (counter_ == COUNTER_END_) { + if (counter_ == COUNTER_END) { fade_->activate(); } } \ No newline at end of file diff --git a/source/sections/hiscore_table.h b/source/sections/hiscore_table.h index 23a5b98..90a8b1c 100644 --- a/source/sections/hiscore_table.h +++ b/source/sections/hiscore_table.h @@ -39,40 +39,40 @@ class HiScoreTable { private: // --- Constantes --- - static constexpr Uint16 COUNTER_END_ = 800; // Valor final para el contador + static constexpr Uint16 COUNTER_END = 800; // Valor final para el contador - // --- Objetos y punteros --- - SDL_Renderer *renderer_; // El renderizador de la ventana - SDL_Texture *backbuffer_; // Textura para usar como backbuffer + // --- Objetos y punteros --- + SDL_Renderer *renderer_; // El renderizador de la ventana + SDL_Texture *backbuffer_; // Textura para usar como backbuffer - std::unique_ptr fade_; // Objeto para renderizar fades - std::unique_ptr background_; // Objeto para dibujar el fondo del juego - std::unique_ptr header_; // Sprite con la cabecera del texto - std::vector> entry_names_; // Lista con los sprites de cada uno de los nombres de la tabla de records - std::vector paths_; // Vector con los recorridos precalculados + std::unique_ptr fade_; // Objeto para renderizar fades + std::unique_ptr background_; // Objeto para dibujar el fondo del juego + std::unique_ptr header_; // Sprite con la cabecera del texto + std::vector> entry_names_; // Lista con los sprites de cada uno de los nombres de la tabla de records + std::vector paths_; // Vector con los recorridos precalculados - // --- Variables --- - Uint16 counter_ = 0; // Contador - Uint64 ticks_; // Contador de ticks para ajustar la velocidad del programa - SDL_FRect view_area_; // Parte de la textura que se muestra en pantalla - FadeMode fade_mode_; // Modo de fade a utilizar - Color background_fade_color_; // Color de atenuación del fondo - std::vector entry_colors_; // Colores para destacar las entradas en la tabla + // --- Variables --- + Uint16 counter_ = 0; // Contador + Uint64 ticks_; // Contador de ticks para ajustar la velocidad del programa + SDL_FRect view_area_; // Parte de la textura que se muestra en pantalla + FadeMode fade_mode_; // Modo de fade a utilizar + Color background_fade_color_; // Color de atenuación del fondo + std::vector entry_colors_; // Colores para destacar las entradas en la tabla - // --- Métodos internos --- - void update(); // Actualiza las variables - void render(); // Pinta en pantalla - void checkEvents(); // Comprueba los eventos - void checkInput(); // Comprueba las entradas - std::string format(int number); // Convierte un entero a un string con separadores de miles - void fillTexture(); // Dibuja los sprites en la textura - void updateFade(); // Gestiona el fade - void createSprites(); // Crea los sprites con los textos - void updateSprites(); // Actualiza las posiciones de los sprites de texto - void initFade(); // Inicializa el fade - void initBackground(); // Inicializa el fondo - Color getEntryColor(int counter_); // Obtiene un color del vector de colores de entradas - void iniEntryColors(); // Inicializa los colores de las entradas - void glowEntryNames(); // Hace brillar los nombres de la tabla de records - void updateCounter(); // Gestiona el contador + // --- Métodos internos --- + void update(); // Actualiza las variables + void render(); // Pinta en pantalla + void checkEvents(); // Comprueba los eventos + void checkInput(); // Comprueba las entradas + std::string format(int number); // Convierte un entero a un string con separadores de miles + void fillTexture(); // Dibuja los sprites en la textura + void updateFade(); // Gestiona el fade + void createSprites(); // Crea los sprites con los textos + void updateSprites(); // Actualiza las posiciones de los sprites de texto + void initFade(); // Inicializa el fade + void initBackground(); // Inicializa el fondo + Color getEntryColor(int counter); // Obtiene un color del vector de colores de entradas + void iniEntryColors(); // Inicializa los colores de las entradas + void glowEntryNames(); // Hace brillar los nombres de la tabla de records + void updateCounter(); // Gestiona el contador }; \ No newline at end of file diff --git a/source/sections/instructions.cpp b/source/sections/instructions.cpp index c843b7c..70e701b 100644 --- a/source/sections/instructions.cpp +++ b/source/sections/instructions.cpp @@ -294,12 +294,12 @@ bool Instructions::moveLines(std::vector &lines, int width, float duration bool all_lines_off_screen = true; for (auto &line : lines) { - // Establecer startTime en el primer cuadro de animación - if (line.startTime == 0) { - line.startTime = current_time + line.y * start_delay; + // Establecer start_time en el primer cuadro de animación + if (line.start_time == 0) { + line.start_time = current_time + line.y * start_delay; } - float elapsed_time = (current_time - line.startTime) / 1000.0f; // Convertir a segundos + float elapsed_time = (current_time - line.start_time) / 1000.0f; // Convertir a segundos if (elapsed_time < 0) { all_lines_off_screen = false; // Si aún no se debe mover esta línea, no están todas fuera de pantalla continue; diff --git a/source/sections/instructions.h b/source/sections/instructions.h index 1e8a25c..a16021f 100644 --- a/source/sections/instructions.h +++ b/source/sections/instructions.h @@ -29,11 +29,11 @@ struct Line { int y; // Coordenada Y de la línea float x; // Coordenada X inicial (usamos float para mayor precisión en el suavizado) int direction; // Dirección de movimiento: -1 para izquierda, 1 para derecha - Uint32 startTime; // Tiempo de inicio del movimiento + Uint32 start_time; // Tiempo de inicio del movimiento // Constructor de Line Line(int y, float x, int direction) - : y(y), x(x), direction(direction), startTime(0) {} + : y(y), x(x), direction(direction), start_time(0) {} }; // Clase Instructions @@ -81,7 +81,7 @@ class Instructions { void iniSprites(); // Inicializa los sprites de los items void updateSprites(); // Actualiza los sprites std::vector initializeLines(int height); // Inicializa las líneas animadas - bool moveLines(std::vector &lines, int width, float duration, Uint32 startDelay); // Mueve las líneas + bool moveLines(std::vector &lines, int width, float duration, Uint32 start_delay); // Mueve las líneas void renderLines(SDL_Renderer *renderer, SDL_Texture *texture, const std::vector &lines); // Renderiza las líneas void updateBackbuffer(); // Gestiona la textura con los gráficos }; \ No newline at end of file diff --git a/source/sections/title.cpp b/source/sections/title.cpp index d8188e0..1ac0a69 100644 --- a/source/sections/title.cpp +++ b/source/sections/title.cpp @@ -408,11 +408,11 @@ void Title::updateStartPrompt() { } } - should_render_start_prompt = condition_met; + should_render_start_prompt_ = condition_met; } void Title::renderStartPrompt() { - if (should_render_start_prompt) { + if (should_render_start_prompt_) { text_->writeDX(TEXT_CENTER | TEXT_SHADOW, param.game.game_area.center_x, param.title.press_start_position, diff --git a/source/sections/title.h b/source/sections/title.h index bcb8dfb..822440e 100644 --- a/source/sections/title.h +++ b/source/sections/title.h @@ -67,7 +67,7 @@ class Title { Section::Options selection_ = Section::Options::TITLE_TIME_OUT; // Opción elegida en el título int num_controllers_; // Número de mandos conectados TitleState state_; // Estado actual de la sección - bool should_render_start_prompt = false; // Indica si se muestra o no el texto de PRESS START BUTTON TO PLAY + bool should_render_start_prompt_ = false; // Indica si se muestra o no el texto de PRESS START BUTTON TO PLAY bool player1_start_pressed_ = false; // Indica si se ha pulsdo el boton de empezar a jugar para el jugador 1 bool player2_start_pressed_ = false; // Indica si se ha pulsdo el boton de empezar a jugar para el jugador 2 diff --git a/source/tiled_bg.cpp b/source/tiled_bg.cpp index 1d291e0..843fca5 100644 --- a/source/tiled_bg.cpp +++ b/source/tiled_bg.cpp @@ -53,20 +53,20 @@ TiledBG::~TiledBG() { // Rellena la textura con el contenido void TiledBG::fillTexture() { // Crea los objetos para pintar en la textura de fondo - auto tile = std::make_unique(Resource::get()->getTexture("title_bg_tile.png"), (SDL_FRect){0, 0, TILE_WIDTH_, TILE_HEIGHT_}); + auto tile = std::make_unique(Resource::get()->getTexture("title_bg_tile.png"), (SDL_FRect){0, 0, TILE_WIDTH, TILE_HEIGHT}); // Prepara para dibujar sobre la textura auto temp = SDL_GetRenderTarget(renderer_); SDL_SetRenderTarget(renderer_, canvas_); // Rellena la textura con el tile - const auto I_MAX = pos_.w * 2 / TILE_WIDTH_; - const auto J_MAX = pos_.h * 2 / TILE_HEIGHT_; - tile->setSpriteClip(0, 0, TILE_WIDTH_, TILE_HEIGHT_); + const auto I_MAX = pos_.w * 2 / TILE_WIDTH; + const auto J_MAX = pos_.h * 2 / TILE_HEIGHT; + tile->setSpriteClip(0, 0, TILE_WIDTH, TILE_HEIGHT); for (int i = 0; i < I_MAX; ++i) { for (int j = 0; j < J_MAX; ++j) { - tile->setX(i * TILE_WIDTH_); - tile->setY(j * TILE_HEIGHT_); + tile->setX(i * TILE_WIDTH); + tile->setY(j * TILE_HEIGHT); tile->render(); } } @@ -88,8 +88,8 @@ void TiledBG::update() { switch (mode_) { case TiledBGMode::DIAGONAL: { // El tileado de fondo se desplaza en diagonal - window_.x = static_cast(desp_) % TILE_WIDTH_; - window_.y = static_cast(desp_) % TILE_HEIGHT_; + window_.x = static_cast(desp_) % TILE_WIDTH; + window_.y = static_cast(desp_) % TILE_HEIGHT; break; } @@ -112,7 +112,7 @@ void TiledBG::updateStop() { const int UMBRAL = 20 * speed_; // Ajusta este valor según la precisión deseada // Desacelerar si estamos cerca de completar el ciclo (ventana a punto de regresar a 0) - if (window_.x >= TILE_WIDTH_ - UMBRAL) { + if (window_.x >= TILE_WIDTH - UMBRAL) { speed_ /= 1.05f; // Reduce gradualmente la velocidad // Asegura que no baje demasiado diff --git a/source/tiled_bg.h b/source/tiled_bg.h index 8bb280e..73d1d9c 100644 --- a/source/tiled_bg.h +++ b/source/tiled_bg.h @@ -39,24 +39,24 @@ class TiledBG { private: // --- Constantes --- - static constexpr int TILE_WIDTH_ = 64; // Ancho del tile - static constexpr int TILE_HEIGHT_ = 64; // Alto del tile + static constexpr int TILE_WIDTH = 64; // Ancho del tile + static constexpr int TILE_HEIGHT = 64; // Alto del tile - // --- Objetos y punteros --- - SDL_Renderer *renderer_; // El renderizador de la ventana - SDL_Texture *canvas_; // Textura donde dibujar el fondo formado por tiles + // --- Objetos y punteros --- + SDL_Renderer *renderer_; // El renderizador de la ventana + SDL_Texture *canvas_; // Textura donde dibujar el fondo formado por tiles - // --- Variables de estado --- - SDL_FRect pos_; // Posición y tamaño del mosaico - SDL_FRect window_; // Ventana visible para la textura de fondo del título - TiledBGMode mode_; // Tipo de movimiento del mosaico - double sin_[360]; // Vector con los valores del seno precalculados - float desp_ = 0.0f; // Desplazamiento aplicado - float speed_ = 1.0f; // Incremento que se añade al desplazamiento a cada bucle - bool stopping_ = false; // Indica si se está deteniendo + // --- Variables de estado --- + SDL_FRect pos_; // Posición y tamaño del mosaico + SDL_FRect window_; // Ventana visible para la textura de fondo del título + TiledBGMode mode_; // Tipo de movimiento del mosaico + double sin_[360]; // Vector con los valores del seno precalculados + float desp_ = 0.0f; // Desplazamiento aplicado + float speed_ = 1.0f; // Incremento que se añade al desplazamiento a cada bucle + bool stopping_ = false; // Indica si se está deteniendo - // --- Métodos internos --- - void fillTexture(); // Rellena la textura con el contenido - void updateDesp() { desp_ += speed_; } // Actualiza el desplazamiento - void updateStop(); // Detiene el desplazamiento de forma ordenada + // --- Métodos internos --- + void fillTexture(); // Rellena la textura con el contenido + void updateDesp() { desp_ += speed_; } // Actualiza el desplazamiento + void updateStop(); // Detiene el desplazamiento de forma ordenada }; \ No newline at end of file diff --git a/source/ui/menu_option.h b/source/ui/menu_option.h index 74f39a5..9baec3c 100644 --- a/source/ui/menu_option.h +++ b/source/ui/menu_option.h @@ -78,8 +78,8 @@ class IntOption : public MenuOption { Behavior getBehavior() const override { return Behavior::ADJUST; } std::string getValueAsString() const override { return std::to_string(*linked_variable_); } void adjustValue(bool adjust_up) override { - int newValue = *linked_variable_ + (adjust_up ? step_value_ : -step_value_); - *linked_variable_ = std::clamp(newValue, min_value_, max_value_); + int new_value = *linked_variable_ + (adjust_up ? step_value_ : -step_value_); + *linked_variable_ = std::clamp(new_value, min_value_, max_value_); } int getMaxValueWidth(Text *text_renderer) const override { int max_width = 0; diff --git a/source/ui/menu_renderer.cpp b/source/ui/menu_renderer.cpp index c8784b6..21bec71 100644 --- a/source/ui/menu_renderer.cpp +++ b/source/ui/menu_renderer.cpp @@ -37,7 +37,7 @@ void MenuRenderer::render(const ServiceMenu *menu_state) { // Dibuja la línea separadora y = rect_.y + upper_height_; SDL_SetRenderDrawColor(Screen::get()->getRenderer(), BORDER_COLOR.r, BORDER_COLOR.g, BORDER_COLOR.b, 255); - SDL_RenderLine(Screen::get()->getRenderer(), rect_.x + ServiceMenu::OPTIONS_HORIZONTAL_PADDING_, y, rect_.x + rect_.w - ServiceMenu::OPTIONS_HORIZONTAL_PADDING_, y); + SDL_RenderLine(Screen::get()->getRenderer(), rect_.x + ServiceMenu::OPTIONS_HORIZONTAL_PADDING, y, rect_.x + rect_.w - ServiceMenu::OPTIONS_HORIZONTAL_PADDING, y); // Dibuja las opciones y = options_y_; @@ -47,8 +47,8 @@ void MenuRenderer::render(const ServiceMenu *menu_state) { const Color ¤t_color = IS_SELECTED ? param.service_menu.selected_color : param.service_menu.text_color; if (menu_state->getCurrentGroupAlignment() == ServiceMenu::GroupAlignment::LEFT) { - element_text_->writeColored(rect_.x + ServiceMenu::OPTIONS_HORIZONTAL_PADDING_, y, option_pairs.at(i).first, current_color, -2); - const int X = rect_.x + rect_.w - ServiceMenu::OPTIONS_HORIZONTAL_PADDING_ - element_text_->lenght(option_pairs.at(i).second, -2); + element_text_->writeColored(rect_.x + ServiceMenu::OPTIONS_HORIZONTAL_PADDING, y, option_pairs.at(i).first, current_color, -2); + const int X = rect_.x + rect_.w - ServiceMenu::OPTIONS_HORIZONTAL_PADDING - element_text_->lenght(option_pairs.at(i).second, -2); element_text_->writeColored(X, y, option_pairs.at(i).second, current_color, -2); } else { element_text_->writeDX(TEXT_CENTER | TEXT_COLOR, rect_.x + rect_.w / 2, y, option_pairs.at(i).first, -2, current_color); @@ -96,7 +96,7 @@ void MenuRenderer::setAnchors(const ServiceMenu *menu_state) { lower_padding_ = (options_padding_ * 3); lower_height_ = ((max_entries > 0 ? max_entries - 1 : 0) * (options_height_ + options_padding_)) + options_height_ + (lower_padding_ * 2); - width_ = ServiceMenu::MIN_WIDTH_; + width_ = ServiceMenu::MIN_WIDTH; height_ = upper_height_ + lower_height_; } @@ -151,7 +151,7 @@ void MenuRenderer::updateResizeAnimation() { void MenuRenderer::precalculateMenuWidths(const std::vector> &all_options, const ServiceMenu *menu_state) { for (int &w : group_menu_widths_) - w = ServiceMenu::MIN_WIDTH_; + w = ServiceMenu::MIN_WIDTH; for (int group = 0; group < 5; ++group) { auto sg = static_cast(group); int max_option_width = 0; @@ -164,11 +164,11 @@ void MenuRenderer::precalculateMenuWidths(const std::vectorgetMaxValueWidth(element_text_.get())); } } - size_t total_width = max_option_width + (ServiceMenu::OPTIONS_HORIZONTAL_PADDING_ * 2); + size_t total_width = max_option_width + (ServiceMenu::OPTIONS_HORIZONTAL_PADDING * 2); if (menu_state->getCurrentGroupAlignment() == ServiceMenu::GroupAlignment::LEFT) { - total_width += ServiceMenu::MIN_GAP_OPTION_VALUE_ + max_value_width; + total_width += ServiceMenu::MIN_GAP_OPTION_VALUE + max_value_width; } - group_menu_widths_[group] = std::max((int)ServiceMenu::MIN_WIDTH_, (int)total_width); + group_menu_widths_[group] = std::max((int)ServiceMenu::MIN_WIDTH, (int)total_width); } } diff --git a/source/ui/service_menu.cpp b/source/ui/service_menu.cpp index c8f24b8..5e825cc 100644 --- a/source/ui/service_menu.cpp +++ b/source/ui/service_menu.cpp @@ -13,10 +13,10 @@ #include "utils.h" // Para Zone // Singleton -ServiceMenu *ServiceMenu::instance_ = nullptr; -void ServiceMenu::init() { ServiceMenu::instance_ = new ServiceMenu(); } -void ServiceMenu::destroy() { delete ServiceMenu::instance_; } -ServiceMenu *ServiceMenu::get() { return ServiceMenu::instance_; } +ServiceMenu *ServiceMenu::instance = nullptr; +void ServiceMenu::init() { ServiceMenu::instance = new ServiceMenu(); } +void ServiceMenu::destroy() { delete ServiceMenu::instance; } +ServiceMenu *ServiceMenu::get() { return ServiceMenu::instance; } // Constructor ServiceMenu::ServiceMenu() @@ -150,7 +150,7 @@ void ServiceMenu::updateOptionPairs() { void ServiceMenu::updateMenu() { title_ = settingsGroupToString(current_settings_group_); - AdjustListValues(); + adjustListValues(); // Actualiza las opciones visibles updateDisplayOptions(); @@ -254,7 +254,7 @@ void ServiceMenu::initializeOptions() { } // Sincroniza los valores de las opciones tipo lista -void ServiceMenu::AdjustListValues() { +void ServiceMenu::adjustListValues() { for (auto &option : options_) { if (auto list_option = dynamic_cast(option.get())) { list_option->sync(); diff --git a/source/ui/service_menu.h b/source/ui/service_menu.h index d36ec95..37f47f9 100644 --- a/source/ui/service_menu.h +++ b/source/ui/service_menu.h @@ -28,9 +28,9 @@ class ServiceMenu { }; // --- Constantes públicas que el Renderer podría necesitar --- - static constexpr size_t OPTIONS_HORIZONTAL_PADDING_ = 20; - static constexpr size_t MIN_WIDTH_ = 240; - static constexpr size_t MIN_GAP_OPTION_VALUE_ = 30; + static constexpr size_t OPTIONS_HORIZONTAL_PADDING = 20; + static constexpr size_t MIN_WIDTH = 240; + static constexpr size_t MIN_GAP_OPTION_VALUE = 30; static void init(); static void destroy(); @@ -89,7 +89,7 @@ class ServiceMenu { void applyAudioSettings(); void applySettingsSettings(); MenuOption *getOptionByCaption(const std::string &caption) const; - void AdjustListValues(); + void adjustListValues(); void playMoveSound(); void playAdjustSound(); void playSelectSound(); @@ -102,5 +102,5 @@ class ServiceMenu { ~ServiceMenu() = default; ServiceMenu(const ServiceMenu &) = delete; ServiceMenu &operator=(const ServiceMenu &) = delete; - static ServiceMenu *instance_; + static ServiceMenu *instance; }; diff --git a/source/ui/ui_message.cpp b/source/ui/ui_message.cpp index 5d4a28e..02e594e 100644 --- a/source/ui/ui_message.cpp +++ b/source/ui/ui_message.cpp @@ -13,7 +13,7 @@ void UIMessage::show() { if (visible_ && target_y_ == 0.0f) return; // Ya está visible y quieto - start_y_ = DESP_; // Empieza 8 píxeles arriba de la posición base + start_y_ = DESP; // Empieza 8 píxeles arriba de la posición base target_y_ = 0.0f; // La posición final es la base y_offset_ = start_y_; anim_step_ = 0; @@ -27,7 +27,7 @@ void UIMessage::hide() { return; start_y_ = y_offset_; // Comienza desde la posición actual - target_y_ = DESP_; // Termina 8 píxeles arriba de la base + target_y_ = DESP; // Termina 8 píxeles arriba de la base anim_step_ = 0; animating_ = true; } diff --git a/source/ui/ui_message.h b/source/ui/ui_message.h index 5e40474..45ec32a 100644 --- a/source/ui/ui_message.h +++ b/source/ui/ui_message.h @@ -49,7 +49,7 @@ class UIMessage { float target_y_ = 0.0f; // Posición Y objetivo de la animación int anim_step_ = 0; // Paso actual de la animación static constexpr int ANIMATION_STEPS = 8; // Número total de pasos de la animación - static constexpr float DESP_ = -8.0f; // Distancia a desplazarse + static constexpr float DESP = -8.0f; // Distancia a desplazarse // Actualiza la interpolación de la animación (ease out/in cubic) void updateAnimation(); diff --git a/source/writer.cpp b/source/writer.cpp index 9e6e386..293ad87 100644 --- a/source/writer.cpp +++ b/source/writer.cpp @@ -67,7 +67,7 @@ void Writer::setEnabled(bool value) { } // Obtiene el valor de la variable -bool Writer::IsEnabled() const { +bool Writer::isEnabled() const { return enabled_; } diff --git a/source/writer.h b/source/writer.h index 90ab0de..bc09811 100644 --- a/source/writer.h +++ b/source/writer.h @@ -34,7 +34,7 @@ class Writer { void center(int x); // Getters - bool IsEnabled() const; // Indica si el objeto está habilitado + bool isEnabled() const; // Indica si el objeto está habilitado bool hasFinished() const; // Indica si ya ha terminado private: