diff --git a/.clang-tidy b/.clang-tidy index 1773fc9..15c1d23 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,6 +1,8 @@ Checks: > readability-*, modernize-*, + bugprone-*, + performance-*, -readability-identifier-length, -readability-magic-numbers diff --git a/source/animated_sprite.h b/source/animated_sprite.h index 480bacf..ec6b587 100644 --- a/source/animated_sprite.h +++ b/source/animated_sprite.h @@ -14,7 +14,7 @@ // Declaración adelantada class Texture; -// Estructura de Animación +// --- Estructuras --- struct Animation { static constexpr int DEFAULT_SPEED = 5; @@ -37,13 +37,13 @@ struct AnimationConfig { int max_tiles = 1; }; -// Alias de tipo para buffer de animaciones -using AnimationsFileBuffer = std::vector; +// --- Tipos --- +using AnimationsFileBuffer = std::vector; // Buffer de animaciones -// Carga las animaciones desde un fichero en un vector de strings -auto loadAnimationsFromFile(const std::string& file_path) -> AnimationsFileBuffer; +// --- Funciones --- +auto loadAnimationsFromFile(const std::string& file_path) -> AnimationsFileBuffer; // Carga las animaciones desde un fichero -// Clase AnimatedSprite: Sprite animado que hereda de MovingSprite +// --- Clase AnimatedSprite: sprite animado que hereda de MovingSprite --- class AnimatedSprite : public MovingSprite { public: // --- Constructores y destructor --- @@ -70,12 +70,10 @@ class AnimatedSprite : public MovingSprite { auto getAnimationIndex(const std::string& name) -> int; // Obtiene el índice de una animación por nombre protected: - // --- Datos de animación --- - std::vector animations_; // Vector de animaciones disponibles - int current_animation_ = 0; // Índice de la animación activa - - // --- Mapa para búsqueda rápida de animaciones por nombre --- - std::unordered_map animation_indices_; + // --- Variables de estado --- + std::vector animations_; // Vector de animaciones disponibles + std::unordered_map animation_indices_; // Mapa para búsqueda rápida por nombre + int current_animation_ = 0; // Índice de la animación activa // --- Métodos internos --- void animate(); // Calcula el frame correspondiente a la animación diff --git a/source/asset.h b/source/asset.h index 7d0f59f..2d603de 100644 --- a/source/asset.h +++ b/source/asset.h @@ -1,25 +1,25 @@ #pragma once -#include -#include -#include -#include +#include // Para string +#include // Para unordered_map +#include // Para move +#include // Para vector -// Clase Asset: gestor optimizado de recursos (singleton) +// --- Clase Asset: gestor optimizado de recursos (singleton) --- class Asset { public: - // Tipos de recursos + // --- Enums --- enum class Type : int { - BITMAP, - MUSIC, - SOUND, - FONT, - LANG, - DATA, - DEMODATA, - ANIMATION, - PALETTE, - SIZE, + BITMAP, // Imágenes + MUSIC, // Música + SOUND, // Sonidos + FONT, // Fuentes + LANG, // Idiomas + DATA, // Datos + DEMODATA, // Datos de demo + ANIMATION, // Animaciones + PALETTE, // Paletas + SIZE, // Tamaño }; // --- Métodos de singleton --- @@ -38,9 +38,9 @@ class Asset { [[nodiscard]] auto exists(const std::string &filename) const -> bool; // Nueva función para verificar existencia private: - // --- Estructura interna para almacenar información de cada recurso --- + // --- Estructuras privadas --- struct Item { - std::string file; // Ruta completa del archivo (mantener nombre original) + std::string file; // Ruta completa del archivo Type type; // Tipo de recurso bool required; // Indica si el archivo es obligatorio @@ -49,21 +49,22 @@ class Asset { }; // --- Variables internas --- - std::unordered_map file_list_; // Mapa para búsqueda O(1) (mantener nombre original) + std::unordered_map file_list_; // Mapa para búsqueda O(1) std::string executable_path_; // Ruta del ejecutable // --- Métodos internos --- - [[nodiscard]] static auto checkFile(const std::string &path) -> bool; - [[nodiscard]] static auto getTypeName(Type type) -> std::string; - [[nodiscard]] static auto parseAssetType(const std::string &type_str) -> Type; - void addToMap(const std::string &file_path, Type type, bool required, bool absolute); - [[nodiscard]] static auto replaceVariables(const std::string &path, const std::string &prefix, const std::string &system_folder) -> std::string; - static auto parseOptions(const std::string &options, bool &required, bool &absolute) -> void; + [[nodiscard]] static auto checkFile(const std::string &path) -> bool; // Verifica si un archivo existe + [[nodiscard]] static auto getTypeName(Type type) -> std::string; // Obtiene el nombre del tipo + [[nodiscard]] static auto parseAssetType(const std::string &type_str) -> Type; // Convierte string a tipo + void addToMap(const std::string &file_path, Type type, bool required, bool absolute); // Añade archivo al mapa + [[nodiscard]] static auto replaceVariables(const std::string &path, const std::string &prefix, const std::string &system_folder) -> std::string; // Reemplaza variables en la ruta + static auto parseOptions(const std::string &options, bool &required, bool &absolute) -> void; // Parsea opciones - // --- Patrón Singleton --- - explicit Asset(std::string executable_path) + // --- Constructores y destructor privados (singleton) --- + explicit Asset(std::string executable_path) // Constructor privado : executable_path_(std::move(executable_path)) {} - ~Asset() = default; + ~Asset() = default; // Destructor privado - static Asset *instance; + // --- Instancia singleton --- + static Asset *instance; // Instancia única de Asset }; \ No newline at end of file diff --git a/source/audio.h b/source/audio.h index 54eeb8d..a13d496 100644 --- a/source/audio.h +++ b/source/audio.h @@ -3,19 +3,20 @@ #include // Para string #include // Para move -// Clase Audio: gestor de audio (singleton) +// --- Clase Audio: gestor de audio (singleton) --- class Audio { public: + // --- Enums --- enum class Group : int { - ALL = -1, - GAME = 0, - INTERFACE = 1 + ALL = -1, // Todos los grupos + GAME = 0, // Sonidos del juego + INTERFACE = 1 // Sonidos de la interfaz }; // --- Constantes --- - static constexpr int MAX_VOLUME = 100; - static constexpr int MIN_VOLUME = 0; - static constexpr int FREQUENCY = 48000; + static constexpr int MAX_VOLUME = 100; // Volumen máximo + static constexpr int MIN_VOLUME = 0; // Volumen mínimo + static constexpr int FREQUENCY = 48000; // Frecuencia de audio // --- Métodos de singleton --- static void init(); // Inicializa el objeto Audio @@ -60,12 +61,14 @@ class Audio { void setMusicVolume(int volume) const; // Ajustar volumen de música private: + // --- Enums privados --- enum class MusicState { - PLAYING, - PAUSED, - STOPPED, + PLAYING, // Reproduciendo música + PAUSED, // Música pausada + STOPPED, // Música detenida }; + // --- Estructuras privadas --- struct Music { MusicState state; // Estado actual de la música (reproduciendo, detenido, en pausa) std::string name; // Última pista de música reproducida @@ -79,20 +82,19 @@ class Audio { : state(init_state), name(std::move(init_name)), loop(init_loop) {} }; - Music music_; + // --- Variables de estado --- + Music music_; // Estado de la música + bool enabled_ = true; // Estado general del audio + bool sound_enabled_ = true; // Estado de los efectos de sonido + bool music_enabled_ = true; // Estado de la música - // --- Variables de Estado --- - bool enabled_ = true; // Estado general del audio - bool sound_enabled_ = true; // Estado de los efectos de sonido - bool music_enabled_ = true; // Estado de la música + // --- Métodos internos --- + void initSDLAudio(); // Inicializa SDL Audio - // --- Inicializa SDL Audio --- - void initSDLAudio(); - - // --- Patrón Singleton --- + // --- Constructores y destructor privados (singleton) --- Audio(); // Constructor privado ~Audio(); // Destructor privado - // --- Singleton --- - static Audio *instance; + // --- Instancia singleton --- + static Audio *instance; // Instancia única de Audio }; \ No newline at end of file diff --git a/source/background.cpp b/source/background.cpp index 275ca47..608bea8 100644 --- a/source/background.cpp +++ b/source/background.cpp @@ -15,11 +15,7 @@ // Constructor Background::Background(float total_progress_to_complete) - : total_progress_to_complete_(total_progress_to_complete), - progress_per_stage_(total_progress_to_complete_ / STAGES), - sun_completion_progress_(total_progress_to_complete_ * SUN_COMPLETION_FACTOR), - - renderer_(Screen::get()->getRenderer()), + : renderer_(Screen::get()->getRenderer()), buildings_texture_(Resource::get()->getTexture("game_buildings.png")), top_clouds_texture_(Resource::get()->getTexture("game_clouds1.png")), @@ -29,6 +25,10 @@ Background::Background(float total_progress_to_complete) sun_texture_(Resource::get()->getTexture("game_sun.png")), moon_texture_(Resource::get()->getTexture("game_moon.png")), + total_progress_to_complete_(total_progress_to_complete), + progress_per_stage_(total_progress_to_complete_ / STAGES), + sun_completion_progress_(total_progress_to_complete_ * SUN_COMPLETION_FACTOR), + rect_(SDL_FRect{0, 0, static_cast(gradients_texture_->getWidth() / 2), static_cast(gradients_texture_->getHeight() / 2)}), src_rect_({0, 0, 320, 240}), dst_rect_({0, 0, 320, 240}), diff --git a/source/background.h b/source/background.h index d173ff8..6ac7c99 100644 --- a/source/background.h +++ b/source/background.h @@ -4,7 +4,7 @@ #include // Para array #include // Para size_t -#include // Para std::function +#include // Para function #include // Para unique_ptr, shared_ptr #include // Para vector @@ -14,140 +14,109 @@ class MovingSprite; class Sprite; class Texture; -/* - Esta clase gestiona el fondo que aparece en la sección jugable. - - Maneja internamente su progresión a través de diferentes estados del día/noche, - controlando las transiciones entre gradientes, posiciones del sol/luna y velocidad de nubes. - - Estados: - - NORMAL: Progresión normal del día - - COMPLETED: Reducción gradual de la actividad (nubes más lentas) - - Métodos clave: - - incrementProgress() -> Avanza la progresión del fondo - - setState() -> Cambia el estado del fondo - - setColor/setAlpha -> Efectos de atenuación -*/ - +// --- Clase Background: gestiona el fondo de la sección jugable --- class Background { public: - // Enumeración de estados + // --- Enums --- enum class State { - NORMAL, - COMPLETED + NORMAL, // Progresión normal del día + COMPLETED // Reducción gradual de la actividad }; - // Constructor y Destructor - Background(float total_progress_to_complete = 6100.0f); - ~Background(); + // --- Tipos --- + using ProgressCallback = std::function; // Callback para sincronización - // Actualización y renderizado + // --- Constructor y destructor --- + Background(float total_progress_to_complete = 6100.0f); // Constructor principal + ~Background(); // Destructor + + // --- Métodos principales --- void update(); // Actualiza la lógica del objeto void render(); // Dibuja el objeto + void reset(); // Reinicia la progresión - // Configuración de posición - void setPos(SDL_FRect pos); // Establece la posición del objeto - - // Control de progresión - void incrementProgress(float amount = 1.0f); // Incrementa la progresión interna - void setProgress(float absolute_progress); // Establece la progresión absoluta - void setState(State new_state); // Cambia el estado del fondo - void reset(); // Reinicia la progresión - - // Sistema de callback para sincronización automática - using ProgressCallback = std::function; + // --- Configuración --- + void setPos(SDL_FRect pos); // Establece la posición del objeto + void setState(State new_state); // Cambia el estado del fondo void setProgressCallback(ProgressCallback callback); // Establece callback para sincronización void removeProgressCallback(); // Elimina el callback + void setManualMode(bool manual); // Activa/desactiva el modo manual + void setCloudsSpeed(float value); // Ajusta la velocidad de las nubes + void setGradientNumber(int value); // Establece el degradado de fondo + void setTransition(float value); // Ajusta la transición entre texturas + void setSunProgression(float progress); // Establece la posición del sol + void setMoonProgression(float progress); // Establece la posición de la luna + void setColor(Color color); // Establece el color de atenuación + void setAlpha(int alpha); // Ajusta la transparencia del fondo - // Configuración manual (para uso fuera del juego principal) - void setManualMode(bool manual); // Activa/desactiva el modo manual - void setCloudsSpeed(float value); // Ajusta la velocidad de las nubes - void setGradientNumber(int value); // Establece el degradado de fondo - void setTransition(float value); // Ajusta la transición entre texturas - void setSunProgression(float progress); // Establece la posición del sol - void setMoonProgression(float progress); // Establece la posición de la luna + // --- Control de progresión --- + void incrementProgress(float amount = 1.0f); // Incrementa la progresión interna + void setProgress(float absolute_progress); // Establece la progresión absoluta - // Configuración de efectos visuales - void setColor(Color color); // Establece el color de atenuación - void setAlpha(int alpha); // Ajusta la transparencia del fondo - - // Getters para información del estado - float getProgress() const { return progress_; } - State getState() const { return state_; } - int getCurrentGradient() const { return static_cast(gradient_number_); } + // --- Getters --- + [[nodiscard]] auto getProgress() const -> float { return progress_; } // Obtiene el progreso actual + [[nodiscard]] auto getState() const -> State { return state_; } // Obtiene el estado actual + [[nodiscard]] auto getCurrentGradient() const -> int { return static_cast(gradient_number_); } // Obtiene el gradiente actual private: - // Constantes de configuración - static constexpr size_t STAGES = 4; - static constexpr float COMPLETED_REDUCTION_RATE = 25.0f; - static constexpr float MINIMUM_COMPLETED_PROGRESS = 200.0f; - static constexpr float SUN_COMPLETION_FACTOR = 0.5f; // El sol completa su recorrido a la mitad del progreso total + // --- Constantes --- + static constexpr size_t STAGES = 4; // Número de etapas + static constexpr float COMPLETED_REDUCTION_RATE = 25.0f; // Tasa de reducción completada + static constexpr float MINIMUM_COMPLETED_PROGRESS = 200.0f; // Progreso mínimo completado + static constexpr float SUN_COMPLETION_FACTOR = 0.5f; // Factor de completado del sol - // Configuración paramétrica - const float total_progress_to_complete_; - const float progress_per_stage_; - const float sun_completion_progress_; + // --- Objetos y punteros --- + SDL_Renderer *renderer_; // Renderizador de la ventana + SDL_Texture *canvas_; // Textura para componer el fondo + SDL_Texture *color_texture_; // Textura para atenuar el fondo + std::shared_ptr buildings_texture_; // Textura de edificios + std::shared_ptr top_clouds_texture_; // Textura de nubes superiores + std::shared_ptr bottom_clouds_texture_; // Textura de nubes inferiores + std::shared_ptr grass_texture_; // Textura de hierba + std::shared_ptr gradients_texture_; // Textura de gradientes + std::shared_ptr sun_texture_; // Textura del sol + std::shared_ptr moon_texture_; // Textura de la luna + std::unique_ptr top_clouds_sprite_a_; // Sprite de nubes superiores A + std::unique_ptr top_clouds_sprite_b_; // Sprite de nubes superiores B + std::unique_ptr bottom_clouds_sprite_a_; // Sprite de nubes inferiores A + std::unique_ptr bottom_clouds_sprite_b_; // Sprite de nubes inferiores B + std::unique_ptr buildings_sprite_; // Sprite de edificios + std::unique_ptr gradient_sprite_; // Sprite de gradiente + std::unique_ptr grass_sprite_; // Sprite de hierba + std::unique_ptr sun_sprite_; // Sprite del sol + std::unique_ptr moon_sprite_; // Sprite de la luna - // Objetos y punteros - SDL_Renderer *renderer_; // Renderizador de la ventana + // --- Variables de configuración --- + const float total_progress_to_complete_; // Progreso total para completar + const float progress_per_stage_; // Progreso por etapa + const float sun_completion_progress_; // Progreso de completado del sol + ProgressCallback progress_callback_; // Callback para notificar cambios de progreso - // Texturas - std::shared_ptr buildings_texture_; - std::shared_ptr top_clouds_texture_; - std::shared_ptr bottom_clouds_texture_; - std::shared_ptr grass_texture_; - std::shared_ptr gradients_texture_; - std::shared_ptr sun_texture_; - std::shared_ptr moon_texture_; + // --- Variables de estado --- + std::vector sun_path_; // Recorrido del sol + std::vector moon_path_; // Recorrido de la luna + std::array gradient_rect_; // Fondos degradados + std::array top_clouds_rect_; // Nubes superiores + std::array bottom_clouds_rect_; // Nubes inferiores + SDL_FRect rect_; // Tamaño del objeto + SDL_FRect src_rect_; // Parte del objeto para copiar en pantalla + SDL_FRect dst_rect_; // Posición en pantalla donde se copia el objeto + Color attenuate_color_; // Color de atenuación + State state_ = State::NORMAL; // Estado actual + float progress_ = 0.0f; // Progresión interna + float clouds_speed_ = 0; // Velocidad de las nubes + float transition_ = 0; // Porcentaje de transición + size_t gradient_number_ = 0; // Índice de fondo degradado + size_t counter_ = 0; // Contador interno + size_t alpha_color_texture_ = 0; // Transparencia de atenuación + size_t previous_alpha_color_texture_ = 0; // Transparencia anterior + size_t sun_index_ = 0; // Índice del recorrido del sol + size_t moon_index_ = 0; // Índice del recorrido de la luna + int base_ = 0; // Posición base del fondo + Uint8 alpha_ = 0; // Transparencia entre fases + bool manual_mode_ = false; // Si está en modo manual - // Sprites - std::unique_ptr top_clouds_sprite_a_; - std::unique_ptr top_clouds_sprite_b_; - std::unique_ptr bottom_clouds_sprite_a_; - std::unique_ptr bottom_clouds_sprite_b_; - std::unique_ptr buildings_sprite_; - std::unique_ptr gradient_sprite_; - std::unique_ptr grass_sprite_; - std::unique_ptr sun_sprite_; - std::unique_ptr moon_sprite_; - - // Buffers de renderizado - SDL_Texture *canvas_; // Textura para componer el fondo - SDL_Texture *color_texture_; // Textura para atenuar el fondo - - // Variables de estado y progresión - State state_ = State::NORMAL; - float progress_ = 0.0f; // Progresión interna (0 a total_progress_to_complete_) - bool manual_mode_ = false; // Si está en modo manual, no actualiza automáticamente - ProgressCallback progress_callback_; // Callback para notificar cambios de progreso - - // Variables de renderizado - SDL_FRect rect_; // Tamaño del objeto - SDL_FRect src_rect_; // Parte del objeto para copiar en pantalla - SDL_FRect dst_rect_; // Posición en pantalla donde se copia el objeto - std::array gradient_rect_; // Fondos degradados - std::array top_clouds_rect_; // Nubes superiores - std::array bottom_clouds_rect_; // Nubes inferiores - Color attenuate_color_; // Color de atenuación - - std::vector sun_path_; // Recorrido del sol - std::vector moon_path_; // Recorrido de la luna - - float clouds_speed_ = 0; // Velocidad de las nubes - float transition_ = 0; // Porcentaje de transición - - size_t gradient_number_ = 0; // Índice de fondo degradado - size_t counter_ = 0; // Contador interno - size_t alpha_color_texture_ = 0; // Transparencia de atenuación - size_t previous_alpha_color_texture_ = 0; // Transparencia anterior - size_t sun_index_ = 0; // Índice del recorrido del sol - size_t moon_index_ = 0; // Índice del recorrido de la luna - int base_ = 0; // Posición base del fondo - - Uint8 alpha_ = 0; // Transparencia entre fases - - // Métodos internos + // --- Métodos internos --- void initializePaths(); // Inicializa las rutas del sol y la luna void initializeRects(); // Inicializa los rectángulos de gradientes y nubes void initializeSprites(); // Crea los sprites diff --git a/source/balloon.h b/source/balloon.h index 5ccd842..f1400ea 100644 --- a/source/balloon.h +++ b/source/balloon.h @@ -38,17 +38,18 @@ class Balloon { static constexpr int POWERBALL_SCREENPOWER_MINIMUM = 10; static constexpr int POWERBALL_COUNTER = 8; + // --- Enums --- enum class Size : Uint8 { - SMALL = 0, - MEDIUM = 1, - LARGE = 2, - EXTRALARGE = 3, + SMALL = 0, // Tamaño pequeño + MEDIUM = 1, // Tamaño mediano + LARGE = 2, // Tamaño grande + EXTRALARGE = 3, // Tamaño extra grande }; enum class Type : Uint8 { - BALLOON = 0, - FLOATER = 1, - POWERBALL = 2, + BALLOON = 0, // Globo normal + FLOATER = 1, // Globo flotante + POWERBALL = 2, // Globo de poder }; // --- Constructores y destructor --- diff --git a/source/balloon_formations.h b/source/balloon_formations.h index c345735..272275c 100644 --- a/source/balloon_formations.h +++ b/source/balloon_formations.h @@ -13,7 +13,7 @@ // --- Clase BalloonFormations --- class BalloonFormations { public: - // --- Estructuras de datos --- + // --- Estructuras --- struct SpawnParams { int x = 0; // Posición en el eje X donde crear el globo int y = 0; // Posición en el eje Y donde crear el globo @@ -41,8 +41,8 @@ class BalloonFormations { Formation() = default; }; - // Vector de índices a formaciones - using Pool = std::vector; + // --- Types --- + using Pool = std::vector; // Vector de índices a formaciones // --- Constructor y destructor --- BalloonFormations() { @@ -79,28 +79,20 @@ class BalloonFormations { static constexpr int BALLOON_SPAWN_HEIGHT = 208; // Altura desde el suelo en la que aparecen los globos static constexpr int DEFAULT_CREATION_TIME = 200; // Tiempo base de creación de los globos para las formaciones - // --- Datos --- + // --- Variables --- std::vector formations_; // Vector con todas las formaciones disponibles std::vector pools_; // Vector de pools, cada pool contiene índices a formaciones - // --- Inicialización de formaciones --- + // --- Métodos internos --- void initFormations(); // Inicializa la lista principal de formaciones de globos disponibles void initFormationPools(); // Carga los pools desde archivo de configuración - - // --- Carga y análisis de datos --- auto loadFormationsFromFile(const std::string& filename, const std::map& variables) -> bool; auto parseBalloonLine(const std::string& line, const std::map& variables) -> std::optional; auto loadPoolsFromFile(const std::string& filename) -> bool; // Nueva función para cargar pools auto parsePoolLine(const std::string& line) -> std::optional>>; // Nueva función para parsear líneas de pools - - // --- Evaluación de expresiones --- auto evaluateExpression(const std::string& expr, const std::map& variables) -> float; auto evaluateSimpleExpression(const std::string& expr, const std::map& variables) -> float; - - // --- Utilidades --- static auto trim(const std::string& str) -> std::string; - - // --- Generación de variantes --- void createFloaterVariants(); void loadDefaultFormations(); void loadDefaultPools(); // Nueva función para pools por defecto diff --git a/source/balloon_manager.h b/source/balloon_manager.h index 6f5e055..e45c951 100644 --- a/source/balloon_manager.h +++ b/source/balloon_manager.h @@ -17,35 +17,36 @@ class Texture; +// --- Types --- using Balloons = std::vector>; -// Clase BalloonManager +// --- Clase BalloonManager: gestiona todos los globos del juego --- class BalloonManager { public: - // Constructor y Destructor + // --- Constructor y destructor --- BalloonManager(IStageInfo *stage_info); ~BalloonManager() = default; - // Actualización y Renderizado + // --- Métodos principales --- void update(); // Actualiza el estado de los globos void render(); // Renderiza los globos en pantalla - // Gestión de globos + // --- Gestión de globos --- void freeBalloons(); // Libera globos que ya no sirven - // Creación de formaciones enemigas + // --- Creación de formaciones enemigas --- void deployRandomFormation(int stage); // Crea una formación de globos aleatoria void deployFormation(int formation_id); // Crea una formación específica void deployFormation(int formation_id, int y); // Crea una formación específica con coordenadas - // Creación de globos + // --- Creación de globos --- auto createBalloon(float x, int y, Balloon::Type type, Balloon::Size size, float velx, float speed, int creation_timer) -> std::shared_ptr; // Crea un nuevo globo void createChildBalloon(const std::shared_ptr &balloon, const std::string &direction); // Crea un globo a partir de otro void createPowerBall(); // Crea una PowerBall void createTwoBigBalloons(); // Crea dos globos grandes void createRandomBalloons(); // Crea una disposición aleatoria de globos - // Control de velocidad y despliegue + // --- Control de velocidad y despliegue --- void setBalloonSpeed(float speed); // Ajusta la velocidad de los globos void setDefaultBalloonSpeed(float speed) { default_balloon_speed_ = speed; }; // Establece la velocidad base void resetBalloonSpeed() { setBalloonSpeed(default_balloon_speed_); }; // Restablece la velocidad de los globos @@ -53,61 +54,61 @@ class BalloonManager { auto canPowerBallBeCreated() -> bool; // Indica si se puede crear una PowerBall auto calculateScreenPower() -> int; // Calcula el poder de los globos en pantalla - // Manipulación de globos existentes + // --- Manipulación de globos existentes --- auto popBalloon(std::shared_ptr balloon) -> int; // Explosiona un globo, creando otros si aplica auto destroyBalloon(std::shared_ptr &balloon) -> int; // Explosiona un globo sin crear otros auto destroyAllBalloons() -> int; // Destruye todos los globos void stopAllBalloons(); // Detiene el movimiento de los globos void startAllBalloons(); // Reactiva el movimiento de los globos - // Cambios de apariencia + // --- Cambios de apariencia --- void reverseColorsToAllBalloons(); // Invierte los colores de los globos void normalColorsToAllBalloons(); // Restaura los colores originales - // Configuración de sonido + // --- Configuración de sonido --- void setSounds(bool value); // Activa o desactiva los sonidos de los globos void setBouncingSounds(bool value); // Activa o desactiva los sonidos de rebote los globos void setPoppingSounds(bool value); // Activa o desactiva los sonidos de los globos al explotar - // Configuración de juego + // --- Configuración de juego --- void setPlayArea(SDL_FRect play_area) { play_area_ = play_area; }; // Define el área de juego void setCreationTimeEnabled(bool value) { creation_time_enabled_ = value; }; // Activa o desactiva el tiempo de creación de globos void enableBalloonDeployment(bool value) { can_deploy_balloons_ = value; }; // Activa o desactiva la generación de globos - // Obtención de información + // --- Getters --- auto getMenace() -> int; // Obtiene el nivel de amenaza generado por los globos [[nodiscard]] auto getBalloonSpeed() const -> float { return balloon_speed_; } auto getBalloons() -> Balloons & { return balloons_; } [[nodiscard]] auto getNumBalloons() const -> int { return balloons_.size(); } private: + // --- Constantes --- static const int DEFAULT_BALLOON_DEPLOY_COUNTER = 300; + // --- Objetos y punteros --- Balloons balloons_; // Vector con los globos activos std::unique_ptr explosions_; // Objeto para gestionar explosiones std::unique_ptr balloon_formations_; // Objeto para manejar formaciones enemigas - std::vector> balloon_textures_; // Texturas de los globos std::vector> explosions_textures_; // Texturas de explosiones - std::vector> balloon_animations_; // Animaciones de los globos std::vector> explosions_animations_; // Animaciones de las explosiones + IStageInfo *stage_info_; // Informacion de la pantalla actual - // Variables de control de globos + // --- Variables de estado --- + SDL_FRect play_area_ = param.game.play_area.rect; float balloon_speed_ = Balloon::SPEED.at(0); float default_balloon_speed_ = Balloon::SPEED.at(0); int balloon_deploy_counter_ = 0; - bool power_ball_enabled_ = false; int power_ball_counter_ = 0; int last_balloon_deploy_ = 0; - SDL_FRect play_area_ = param.game.play_area.rect; + bool power_ball_enabled_ = false; bool creation_time_enabled_ = true; bool can_deploy_balloons_ = true; bool bouncing_sound_enabled_ = false; // Si debe sonar el globo al rebotar bool poping_sound_enabled_ = true; // Si debe sonar el globo al explotar bool sound_enabled_ = true; // Indica si los globos deben hacer algun sonido - IStageInfo *stage_info_; // Informacion de la pantalla actual - // Metodos privados + // --- Métodos internos --- void init(); }; diff --git a/source/bullet.cpp b/source/bullet.cpp index 3ff9524..a2edb8e 100644 --- a/source/bullet.cpp +++ b/source/bullet.cpp @@ -9,10 +9,10 @@ // Constructor Bullet::Bullet(float x, float y, BulletType bullet_type, bool powered, Player::Id owner) : sprite_(std::make_unique(Resource::get()->getTexture("bullet.png"), Resource::get()->getAnimation("bullet.ani"))), + bullet_type_(bullet_type), + owner_(owner) , pos_x_(x), - pos_y_(y), - bullet_type_(bullet_type), - owner_(owner) { + pos_y_(y){ vel_x_ = calculateVelocity(bullet_type_); sprite_->setCurrentAnimation(buildAnimationString(bullet_type_, powered)); diff --git a/source/bullet.h b/source/bullet.h index 2440eec..9488046 100644 --- a/source/bullet.h +++ b/source/bullet.h @@ -9,65 +9,62 @@ #include "player.h" // Para Player #include "utils.h" // Para Circle -// Tipos de balas +// --- Enums --- enum class BulletType : Uint8 { - UP, - LEFT, - RIGHT, - NONE + UP, // Bala hacia arriba + LEFT, // Bala hacia la izquierda + RIGHT, // Bala hacia la derecha + NONE // Sin bala }; -// Resultado del movimiento de la bala enum class BulletMoveStatus : Uint8 { - OK = 0, - OUT = 1 + OK = 0, // Movimiento normal + OUT = 1 // Fuera de los límites }; -// Clase Bullet +// --- Clase Bullet: representa una bala del jugador --- class Bullet { public: - // Constantes - static constexpr float WIDTH = 12.0F; - static constexpr float HEIGHT = 12.0F; + // --- Constantes --- + static constexpr float WIDTH = 12.0F; // Anchura de la bala + static constexpr float HEIGHT = 12.0F; // Altura de la bala - // Constructor y Destructor - Bullet(float x, float y, BulletType bullet_type, bool powered, Player::Id owner); - ~Bullet() = default; + // --- Constructor y destructor --- + Bullet(float x, float y, BulletType bullet_type, bool powered, Player::Id owner); // Constructor principal + ~Bullet() = default; // Destructor - // Métodos principales - void render(); // Dibuja la bala en pantalla - auto update() -> BulletMoveStatus; // Actualiza el estado del objeto + // --- Métodos principales --- + void render(); // Dibuja la bala en pantalla + auto update() -> BulletMoveStatus; // Actualiza el estado del objeto + void disable(); // Desactiva la bala - // Estado de la bala - [[nodiscard]] auto isEnabled() const -> bool; // Comprueba si está activa - void disable(); // Desactiva la bala - - // Getters - [[nodiscard]] auto getOwner() const -> Player::Id; // Devuelve el identificador del dueño - auto getCollider() -> Circle &; // Devuelve el círculo de colisión + // --- Getters --- + [[nodiscard]] auto isEnabled() const -> bool; // Comprueba si está activa + [[nodiscard]] auto getOwner() const -> Player::Id; // Devuelve el identificador del dueño + auto getCollider() -> Circle &; // Devuelve el círculo de colisión 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_X_CENTER = 0.0F; + // --- Constantes --- + static constexpr float VEL_Y = -3.0F; // Velocidad vertical + static constexpr float VEL_X_LEFT = -2.0F; // Velocidad izquierda + static constexpr float VEL_X_RIGHT = 2.0F; // Velocidad derecha + static constexpr float VEL_X_CENTER = 0.0F; // Velocidad central - // Propiedades + // --- Objetos y punteros --- 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 - + // --- Variables de estado --- + Circle collider_; // Círculo de colisión BulletType bullet_type_; // Tipo de bala Player::Id owner_; // Identificador del dueño - Circle collider_; // Círculo de colisión + 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 - // Métodos internos + // --- Métodos internos --- void shiftColliders(); // Ajusta el círculo de colisión void shiftSprite(); // Ajusta el sprite auto move() -> BulletMoveStatus; // Mueve la bala y devuelve su estado - static auto calculateVelocity(BulletType bullet_type) -> float; // Calcula la velocidad horizontal de la bala basada en su tipo - static auto buildAnimationString(BulletType bullet_type, bool powered) -> std::string; // Construye el string de animación basado en el tipo de bala y si está potenciada + static auto calculateVelocity(BulletType bullet_type) -> float; // Calcula la velocidad horizontal de la bala + static auto buildAnimationString(BulletType bullet_type, bool powered) -> std::string; // Construye el string de animación }; diff --git a/source/color.h b/source/color.h index 9ff9eda..bee4ee5 100644 --- a/source/color.h +++ b/source/color.h @@ -12,9 +12,7 @@ // --- Constantes --- constexpr size_t COLOR_CYCLE_SIZE = 6; // Mitad del ciclo espejado -// --- Estructuras y tipos --- - -// Estructura para definir un color RGBA +// --- Estructura Color: define un color RGBA --- struct Color { private: static constexpr int DEFAULT_LIGHTEN_AMOUNT = 50; @@ -91,12 +89,14 @@ struct Color { } }; -// Estructura para definir un color HSV +// --- Estructura HSV: define un color en formato HSV --- struct HSV { - float h, s, v; + float h; // Matiz (Hue) + float s; // Saturación (Saturation) + float v; // Valor (Value) }; -// Estructura para definir el ciclo de color +// --- Enum ColorCycleStyle: define estilos de ciclo de color --- enum class ColorCycleStyle { SUBTLE_PULSE, // Variación leve en brillo (por defecto) HUE_WAVE, // Variación suave en tono (sin verde) diff --git a/source/defaults.h b/source/defaults.h index a33c5f2..5241160 100644 --- a/source/defaults.h +++ b/source/defaults.h @@ -5,7 +5,7 @@ #include "color.h" #include "ui/notifier.h" // Para Notifier::Position -// Configuración centralizada con todos los valores por defecto del juego +// --- Namespace GameDefaults: configuración centralizada con valores por defecto del juego --- namespace GameDefaults { // --- GAME --- diff --git a/source/define_buttons.h b/source/define_buttons.h index 7e8aff8..09a0439 100644 --- a/source/define_buttons.h +++ b/source/define_buttons.h @@ -15,8 +15,10 @@ namespace Options { struct Gamepad; } +// --- Clase DefineButtons: configuración de botones de gamepad --- class DefineButtons { public: + // --- Estructuras --- struct Button { std::string label; Input::Action action; @@ -26,44 +28,44 @@ class DefineButtons { : label(std::move(label)), action(action), button(button) {} }; + // --- Constructor y destructor --- DefineButtons(); ~DefineButtons() = default; + // --- Métodos principales --- void render(); void update(); void handleEvents(const SDL_Event &event); auto enable(Options::Gamepad *options_gamepad) -> bool; void disable(); + + // --- Getters --- [[nodiscard]] auto isReadyToClose() const -> bool; [[nodiscard]] auto isEnabled() const -> bool { return enabled_; } [[nodiscard]] auto isFinished() const -> bool { return finished_; } private: - // Constante para cuánto tiempo mostrar el mensaje (en frames) - static constexpr size_t MESSAGE_DISPLAY_FRAMES = 120; // ~2 segundos a 60fps + // --- Constantes --- + static constexpr size_t MESSAGE_DISPLAY_FRAMES = 120; // Cuánto tiempo mostrar el mensaje (en frames) ~2 segundos a 60fps - // Punteros + // --- Objetos y punteros --- Input *input_ = nullptr; // Entrada del usuario Options::Gamepad *options_gamepad_ = nullptr; // Opciones del gamepad std::unique_ptr window_message_; // Mensaje de ventana - // Vectores y strings + // --- Variables de estado --- std::vector