diff --git a/source/audio.cpp b/source/audio.cpp index e4c521f..15ae74d 100644 --- a/source/audio.cpp +++ b/source/audio.cpp @@ -1,7 +1,13 @@ #include "audio.h" -#include "jail_audio.h" -#include "options.h" -#include +#include // for SDL_AudioFormat +#include // for SDL_GetError +#include // for SDL_Init, SDL_INIT_AUDIO +#include // for SDL_LogInfo, SDL_LogCategory, SDL_LogError +#include // for clamp +#include "jail_audio.h" // for JA_FadeOutMusic, JA_Init, JA_PauseMusic +#include "options.h" // for Options, OptionsAudio, options, OptionsM... +struct JA_Music_t; +struct JA_Sound_t; // [SINGLETON] Hay que definir las variables estáticas, desde el .h sólo la hemos declarado Audio *Audio::audio_ = nullptr; diff --git a/source/audio.h b/source/audio.h index 39db0a5..b896b57 100644 --- a/source/audio.h +++ b/source/audio.h @@ -1,7 +1,7 @@ #pragma once -#include -#include "jail_audio.h" +struct JA_Music_t; +struct JA_Sound_t; class Audio { diff --git a/source/global_inputs.cpp b/source/global_inputs.cpp index f4d2a98..fbf1f59 100644 --- a/source/global_inputs.cpp +++ b/source/global_inputs.cpp @@ -1,34 +1,10 @@ #include "global_inputs.h" -#include // Para SDL_RendererLogicalPresentation, SDL_Se... -#include // Para operator+, allocator, char_traits, string -#include // Para vector -#include "audio.h" // Para JA_SetMusicVolume, JA_SetSoundVolume -#include "options.h" // Para Options, options, VideoOptions, GameOpt... -#include "screen.h" // Para Screen -#include "utils.h" // Para boolToOnOff +#include // for SDLK_ESCAPE, SDLK_F1, SDLK_F2, SDLK_F3 +#include "options.h" // for Options, OptionsLogo, options +#include "screen.h" // for Screen namespace globalInputs { - - // Activa o desactiva el audio - void toggleAudio() - { - options.audio.enabled = !options.audio.enabled; - Audio::get()->enable(options.audio.enabled); - } - - // Cambia el modo de escalado entero - void toggleIntegerScale() - { - Screen::get()->toggleIntegerScale(); - } - - // Activa / desactiva el vsync - void toggleVSync() - { - Screen::get()->toggleVSync(); - } - // Comprueba los inputs que se pueden introducir en cualquier sección del juego void check(const SDL_Event &event) { @@ -58,12 +34,12 @@ namespace globalInputs // Integer Scale case SDLK_F5: - toggleIntegerScale(); + Screen::get()->toggleIntegerScale(); return; // VSync case SDLK_F6: - toggleVSync(); + Screen::get()->toggleVSync(); return; } } diff --git a/source/global_inputs.h b/source/global_inputs.h index 5f2b367..c638fcf 100644 --- a/source/global_inputs.h +++ b/source/global_inputs.h @@ -1,6 +1,6 @@ #pragma once -#include +#include // for SDL_Event namespace globalInputs { diff --git a/source/jail_audio.h b/source/jail_audio.h index 635d901..843b7ac 100644 --- a/source/jail_audio.h +++ b/source/jail_audio.h @@ -1,9 +1,9 @@ #pragma once -#include // Para SDL_AudioFormat -#include // Para Uint32, Uint8 -struct JA_Music_t; // lines 8-8 -struct JA_Sound_t; // lines 7-7 +#include // for SDL_AudioFormat +#include // for Uint32, Uint8 +struct JA_Music_t; // lines 4-4 +struct JA_Sound_t; // lines 5-5 enum JA_Channel_state { diff --git a/source/logo.cpp b/source/logo.cpp index aa037e8..5537249 100644 --- a/source/logo.cpp +++ b/source/logo.cpp @@ -1,87 +1,112 @@ #include "logo.h" +#include // Manejo de eventos de SDL (teclado, ratón, etc.) +#include // Inicialización y limpieza de SDL +#include // Manejo de logs en SDL +#include // Funciones de temporización de SDL +#include "global_inputs.h" // Funciones para manejar entradas globales +#include "mouse.h" // Manejo de eventos del ratón +#include "options.h" // Configuración global de opciones +#include "s_sprite.h" // Clase para manejar sprites +#include "screen.h" // Clase para manejar la pantalla +#include "surface.h" // Clase para manejar superficies -#include "screen.h" -#include "mouse.h" -#include "surface.h" -#include "s_sprite.h" -#include "global_inputs.h" - +// Constructor de la clase Logo: inicializa los recursos necesarios Logo::Logo() { - init(); + init(); } +// Destructor de la clase Logo: libera los recursos utilizados Logo::~Logo() { - close(); + close(); } +// Método privado para inicializar los recursos del logotipo void Logo::init() { - SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - SDL_SetLogPriority(SDL_LOG_CATEGORY_TEST, SDL_LOG_PRIORITY_ERROR); + // Configura las prioridades de los logs + SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + SDL_SetLogPriority(SDL_LOG_CATEGORY_TEST, SDL_LOG_PRIORITY_ERROR); - Screen::get()->init(); - logo_surface = std::make_shared("jailgames.gif"); - logo_surface->scale(5); + // Inicializa la pantalla + Screen::get()->init(); - logo_sprite = std::make_unique(logo_surface); - logo_sprite->setPosition( - (options.logo.width - logo_sprite->getWidth()) / 2, - (options.logo.height - logo_sprite->getHeight()) / 2); + // Carga la superficie del logotipo desde un archivo y la escala + logo_surface = std::make_shared("jailgames.gif"); + logo_surface->scale(5); - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Logo start"); + // Crea el sprite del logotipo y lo posiciona en el centro de la pantalla + logo_sprite = std::make_unique(logo_surface); + logo_sprite->setPosition( + (options.logo.width - logo_sprite->getWidth()) / 2, + (options.logo.height - logo_sprite->getHeight()) / 2); + + // Log de inicio del logotipo + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Logo start"); } +// Método privado para liberar los recursos del logotipo void Logo::close() { - Screen::get()->destroy(); + // Destruye la pantalla + Screen::get()->destroy(); - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nBye!"); - SDL_Quit(); + // Log de finalización del logotipo + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nBye!"); + + // Finaliza SDL + SDL_Quit(); } +// Método privado para manejar los eventos de entrada void Logo::checkEvents() { - SDL_Event event; - while (SDL_PollEvent(&event)) - { - switch (event.type) - { - case SDL_EVENT_QUIT: - options.logo.running = false; - return; - } + SDL_Event event; + while (SDL_PollEvent(&event)) // Procesa todos los eventos en la cola + { + switch (event.type) + { + case SDL_EVENT_QUIT: // Evento de salida (cerrar la ventana) + options.logo.running = false; // Detiene el bucle principal + return; + } - globalInputs::check(event); - Mouse::handleEvent(event); - } + // Maneja entradas globales y eventos del ratón + globalInputs::check(event); + Mouse::handleEvent(event); + } } +// Método privado para actualizar el estado del logotipo void Logo::update() { - if (SDL_GetTicks() - ticks > options.logo.speed) - { - ticks = SDL_GetTicks(); + // Comprueba si ha pasado suficiente tiempo para actualizar + if (SDL_GetTicks() - ticks > options.logo.speed) + { + ticks = SDL_GetTicks(); // Actualiza el contador de ticks - Screen::get()->update(); - } + // Actualiza la pantalla + Screen::get()->update(); + } } +// Método privado para renderizar el logotipo en pantalla void Logo::render() { - Screen::get()->start(); - logo_sprite->render(); - Screen::get()->render(); + Screen::get()->start(); // Inicia el proceso de renderizado + logo_sprite->render(); // Renderiza el sprite del logotipo + Screen::get()->render(); // Finaliza el renderizado } +// Método principal que ejecuta el ciclo de vida del logotipo int Logo::run() { - while (options.logo.running) - { - update(); - checkEvents(); - render(); - } - return 0; + while (options.logo.running) // Bucle principal mientras el logotipo esté activo + { + update(); // Actualiza el estado del logotipo + checkEvents(); // Maneja los eventos de entrada + render(); // Renderiza el logotipo + } + return 0; // Devuelve 0 al finalizar } \ No newline at end of file diff --git a/source/logo.h b/source/logo.h index cb82d09..779102a 100644 --- a/source/logo.h +++ b/source/logo.h @@ -1,27 +1,28 @@ -#pragma once +#pragma once // Evita inclusiones múltiples del archivo de encabezado -#include -#include -#include "surface.h" -#include "s_sprite.h" +#include // Incluye definiciones estándar de SDL, como Uint64 +#include // Proporciona soporte para punteros inteligentes (shared_ptr, unique_ptr) +#include "s_sprite.h" // Declara la clase SSprite, utilizada para manejar sprites +class Surface; // Declaración adelantada de la clase Surface + +// Clase Logo: Maneja la lógica principal de un logotipo animado o interactivo class Logo { - private: - bool running = true; - Uint64 ticks = 0; - std::shared_ptr logo_surface = nullptr; - std::unique_ptr logo_sprite = nullptr; + Uint64 ticks = 0; // Contador de ticks para medir el tiempo o controlar animaciones + std::shared_ptr logo_surface = nullptr; // Superficie del logotipo, compartida entre múltiples objetos + std::unique_ptr logo_sprite = nullptr; // Sprite del logotipo, propiedad exclusiva de esta clase - void init(); - void close(); - void checkEvents(); - void update(); - void render(); + // Métodos privados para manejar el ciclo de vida y la lógica del logotipo + void init(); // Inicializa los recursos necesarios para el logotipo + void close(); // Libera los recursos utilizados por el logotipo + void checkEvents(); // Maneja los eventos de entrada (teclado, ratón, etc.) + void update(); // Actualiza el estado del logotipo (animaciones, lógica, etc.) + void render(); // Renderiza el logotipo en pantalla public: - Logo(); - ~Logo(); - int run(); + Logo(); // Constructor: Inicializa la clase Logo + ~Logo(); // Destructor: Limpia los recursos utilizados por la clase Logo + int run(); // Método principal que ejecuta el ciclo de vida del logotipo }; \ No newline at end of file diff --git a/source/main.cpp b/source/main.cpp index 32a1c3d..2e327fa 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,6 +1,5 @@ -#include -#include -#include "logo.h" +#include // for make_unique, unique_ptr +#include "logo.h" // for Logo int main() { diff --git a/source/options.cpp b/source/options.cpp index f234989..25d68f7 100644 --- a/source/options.cpp +++ b/source/options.cpp @@ -1,14 +1,4 @@ #include "options.h" -#include -#include // Para find_if -#include // Para isspace -#include // Para basic_ostream, operator<<, basic_ofstream -#include // Para function -#include // Para cout, cerr -#include // Para basic_istringstream -#include // Para char_traits, string, operator<<, hash -#include // Para unordered_map, operator==, _Node_const_i... -#include // Para pair // Variables Options options; diff --git a/source/options.h b/source/options.h index 7b3e2e4..5f2fa4c 100644 --- a/source/options.h +++ b/source/options.h @@ -1,9 +1,9 @@ #pragma once -#include // Para Uint32 -#include // Para string, basic_string -#include "utils.h" // Para Color, Palette -#include +#include // for Uint64 +#include // for SDL_ScaleMode +#include // for clamp +#include // for string, basic_string // Constantes constexpr int DEFAULT_GAME_WIDTH = 480; // Ancho de la ventana por defecto diff --git a/source/s_sprite.h b/source/s_sprite.h index a399ed6..271d3f6 100644 --- a/source/s_sprite.h +++ b/source/s_sprite.h @@ -1,8 +1,9 @@ #pragma once -#include -#include // Para shared_ptr -class Surface; // lines 5-5 +#include // for SDL_Rect, SDL_Point +#include // for Uint8 +#include // for shared_ptr +class Surface; // lines 5-5 // Clase SSprite class SSprite diff --git a/source/screen.cpp b/source/screen.cpp index ea350d8..87ec2dd 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -1,14 +1,15 @@ #include "screen.h" -#include -#include // Para toupper -#include // Para max, min, transform -#include // Para basic_ostream, operator<<, endl, basic_... -#include // Para cerr -#include // Para istreambuf_iterator, operator== -#include // Para char_traits, string, operator+, operator== -#include "mouse.h" // Para updateCursorVisibility -#include "options.h" // Para Options, options, OptionsVideo, Border -#include "surface.h" // Para Surface, readPalFile +#include // for SDL_BLENDMODE_BLEND +#include // for SDL_GetError +#include // for SDL_SetHint, SDL_HINT_RENDER_DRIVER +#include // for SDL_Init, SDL_INIT_VIDEO +#include // for SDL_LogCategory, SDL_LogInfo, SDL_Lo... +#include // for SDL_PixelFormat +#include // for min, max +#include // for char_traits, operator+, to_string +#include "mouse.h" // for updateCursorVisibility +#include "options.h" // for Options, options, OptionsWindow, Opt... +#include "surface.h" // for Surface, readPalFile // [SINGLETON] Screen *Screen::screen_ = nullptr; diff --git a/source/screen.h b/source/screen.h index ca51487..323ce7f 100644 --- a/source/screen.h +++ b/source/screen.h @@ -1,13 +1,12 @@ #pragma once -#include -#include // Para size_t -#include // Para shared_ptr, __shared_ptr_access -#include // Para string -#include // Para vector -#include "utils.h" // Para Color -#include "options.h" -struct Surface; +#include // for SDL_Renderer, SDL_Texture +#include // for Uint8 +#include // for SDL_Window +#include // for shared_ptr +#include "options.h" // for Options, OptionsVideo, options +#include "surface.h" // for Surface +#include "utils.h" // for Color class Screen { diff --git a/source/surface.cpp b/source/surface.cpp index 41cc184..6a67dae 100644 --- a/source/surface.cpp +++ b/source/surface.cpp @@ -1,18 +1,20 @@ // IWYU pragma: no_include #include "surface.h" -#include -#include // Para abs -#include // Para min, max, copy_n, fill -#include // Para uint32_t -#include // Para memcpy, size_t -#include // Para basic_ifstream, basic_ostream, basic_ist... -#include // Para cerr -#include // Para shared_ptr, __shared_ptr_access, default... -#include // Para basic_istringstream -#include // Para runtime_error -#include // Para vector -#include "gif.h" // Para Gif -#include "screen.h" // Para Screen +#include // for SDL_GetError +#include // for SDL_GetTicks +#include // for abs +#include // for min, max, copy_n, fill +#include // for uint32_t +#include // for memcpy, size_t +#include // for basic_ifstream, basic_ostream, basic_ist... +#include // for cerr +#include // for shared_ptr, __shared_ptr_access, default... +#include // for basic_istringstream +#include // for runtime_error +#include // for vector +#include "gif.h" // for Gif +#include "screen.h" // for Screen +#include "utils.h" // for printWithDots // Carga una paleta desde un archivo .gif Palette loadPalette(const std::string &file_path) diff --git a/source/surface.h b/source/surface.h index 896cdfa..143e982 100644 --- a/source/surface.h +++ b/source/surface.h @@ -1,12 +1,15 @@ #pragma once -#include -#include // Para array -#include // Para default_delete, shared_ptr, __shared_pt... -#include // Para iota -#include // Para string -#include // Para move -#include "utils.h" // Para PaletteColor +#include // for SDL_Rect, SDL_FRect +#include // for SDL_Renderer, SDL_Texture +#include // for Uint8, Uint16, Uint32 +#include // for SDL_FlipMode +#include // for array +#include // for default_delete, shared_ptr, __shared_p... +#include // for iota +#include // for invalid_argument +#include // for string +#include // for move // Alias using Palette = std::array; diff --git a/source/utils.cpp b/source/utils.cpp index 8965fee..a359af8 100644 --- a/source/utils.cpp +++ b/source/utils.cpp @@ -1,15 +1,12 @@ #include "utils.h" -#include // Para abs -#include // Para find, transform -#include // Para tolower -#include // Para round, abs -#include // Para exception -#include // Para path -#include // Para basic_ostream, cout, basic_ios, ios, endl -#include // Para basic_string, string, char_traits, allocator -#include // Para unordered_map, operator==, _Node_const_iter... -#include // Para pair -#include "jail_audio.h" // Para JA_GetMusicState, JA_Music_state, JA_PlayMusic +#include // for abs +#include // for transform, find +#include // for tolower, toupper +#include // for round +#include // for exception +#include // for path +#include // for basic_ostream, cout, basic_ios, ios, endl +#include // for string, char_traits, allocator, operator== // Calcula el cuadrado de la distancia entre dos puntos double distanceSquared(int x1, int y1, int x2, int y2) diff --git a/source/utils.h b/source/utils.h index fe4b5c8..ec5120f 100644 --- a/source/utils.h +++ b/source/utils.h @@ -1,8 +1,9 @@ #pragma once -#include // Para SDL_Rect, SDL_Point -#include // Para string -#include // Para vector +#include // for SDL_Rect, SDL_Point +#include // for Uint8 +#include // for string +#include // for vector // Estructura para definir un circulo struct Circle