diff --git a/source/game/scenes/title.cpp b/source/game/scenes/title.cpp index 217789b2..8f0851d4 100644 --- a/source/game/scenes/title.cpp +++ b/source/game/scenes/title.cpp @@ -45,7 +45,7 @@ Title::Title() initMarquee(); // Inicializa la marquesina createCheevosTexture(); // Crea y rellena la textura para mostrar los logros Screen::get()->setBorderColor(static_cast(PaletteColor::BLACK)); // Cambia el color del borde - playMusic("title.ogg"); // Inicia la musica + Audio::get()->playMusic("title.ogg"); // Inicia la musica } // Inicializa la marquesina diff --git a/source/utils/utils.cpp b/source/utils/utils.cpp index 5809b0f7..dd3ae32d 100644 --- a/source/utils/utils.cpp +++ b/source/utils/utils.cpp @@ -282,6 +282,24 @@ void normalizeLine(LineDiagonal& l) { } } +// Convierte SDL_FRect a SDL_Rect +auto toSDLRect(const SDL_FRect& frect) -> SDL_Rect { + SDL_Rect rect = { + .x = static_cast(frect.x), + .y = static_cast(frect.y), + .w = static_cast(frect.w), + .h = static_cast(frect.h)}; + return rect; +} + +// Convierte SDL_FPoint a SDL_Point +auto toSDLPoint(const SDL_FPoint& fpoint) -> SDL_Point { + SDL_Point point = { + .x = static_cast(fpoint.x), + .y = static_cast(fpoint.y)}; + return point; +} + // Detector de colisiones entre un punto y una linea diagonal auto checkCollision(const SDL_FPoint& point, const LineDiagonal& l) -> bool { SDL_Point p = toSDLPoint(point); @@ -425,14 +443,6 @@ auto stringInVector(const std::vector& vec, const std::string& str) return std::ranges::find(vec, str) != vec.end(); } -// Hace sonar la música -void playMusic(const std::string& music_path) { - // Si la música no está sonando - if (JA_GetMusicState() == JA_MUSIC_INVALID || JA_GetMusicState() == JA_MUSIC_STOPPED) { - JA_PlayMusic(Resource::Cache::get()->getMusic(music_path)); - } -} - // Rellena una textura de un color void fillTextureWithColor(SDL_Renderer* renderer, SDL_Texture* texture, Uint8 r, Uint8 g, Uint8 b, Uint8 a) { // Guardar el render target actual diff --git a/source/utils/utils.hpp b/source/utils/utils.hpp index 498ffc38..8d575aa6 100644 --- a/source/utils/utils.hpp +++ b/source/utils/utils.hpp @@ -35,42 +35,36 @@ enum class PaletteColor : Uint8 { // Estructura para definir un circulo struct Circle { - int x; - int y; - int r; + int x{0}; + int y{0}; + int r{0}; }; // Estructura para definir una linea horizontal struct LineHorizontal { - int x1, x2, y; + int x1{0}, x2{0}, y{0}; }; // Estructura para definir una linea vertical struct LineVertical { - int x, y1, y2; + int x{0}, y1{0}, y2{0}; }; // Estructura para definir una linea diagonal struct LineDiagonal { - int x1, y1, x2, y2; + int x1{0}, y1{0}, x2{0}, y2{0}; }; // Estructura para definir una linea struct Line { - int x1, y1, x2, y2; + int x1{0}, y1{0}, x2{0}, y2{0}; }; // Estructura para definir un color struct Color { - Uint8 r; - Uint8 g; - Uint8 b; - - // Constructor por defecto - Color() - : r(0), - g(0), - b(0) {} + Uint8 r{0}; + Uint8 g{0}; + Uint8 b{0}; // Constructor Color(Uint8 red, Uint8 green, Uint8 blue) @@ -79,96 +73,45 @@ struct Color { b(blue) {} }; -// Calcula el cuadrado de la distancia entre dos puntos -auto distanceSquared(int x1, int y1, int x2, int y2) -> double; +// COLISIONES Y GEOMETRÍA +auto distanceSquared(int x1, int y1, int x2, int y2) -> double; // Distancia² entre dos puntos +auto checkCollision(const Circle& a, const Circle& b) -> bool; // Colisión círculo-círculo +auto checkCollision(const Circle& a, const SDL_FRect& rect) -> bool; // Colisión círculo-rectángulo +auto checkCollision(const SDL_FRect& a, const SDL_FRect& b) -> bool; // Colisión rectángulo-rectángulo +auto checkCollision(const SDL_FPoint& p, const SDL_FRect& r) -> bool; // Colisión punto-rectángulo +auto checkCollision(const LineHorizontal& l, const SDL_FRect& r) -> bool; // Colisión línea horizontal-rectángulo +auto checkCollision(const LineVertical& l, const SDL_FRect& r) -> bool; // Colisión línea vertical-rectángulo +auto checkCollision(const LineHorizontal& l, const SDL_FPoint& p) -> bool; // Colisión línea horizontal-punto +auto checkCollision(const Line& l1, const Line& l2) -> SDL_Point; // Colisión línea-línea (intersección) +auto checkCollision(const LineDiagonal& l1, const LineVertical& l2) -> SDL_Point; // Colisión diagonal-vertical +auto checkCollision(const SDL_FPoint& p, const LineDiagonal& l) -> bool; // Colisión punto-diagonal +void normalizeLine(LineDiagonal& l); // Normaliza línea diagonal (x1 < x2) -// Detector de colisiones entre dos circulos -auto checkCollision(const Circle& a, const Circle& b) -> bool; +// CONVERSIONES DE TIPOS SDL +auto toSDLRect(const SDL_FRect& frect) -> SDL_Rect; // Convierte SDL_FRect a SDL_Rect +auto toSDLPoint(const SDL_FPoint& fpoint) -> SDL_Point; // Convierte SDL_FPoint a SDL_Point -// Detector de colisiones entre un circulo y un rectangulo -auto checkCollision(const Circle& a, const SDL_FRect& rect) -> bool; +// CONVERSIONES DE STRING +auto stringToColor(const std::string& str) -> Uint8; // String a índice de paleta +auto safeStoi(const std::string& value, int default_value = 0) -> int; // String a int seguro (sin excepciones) +auto stringToBool(const std::string& str) -> bool; // String a bool (true/1/yes/on) +auto boolToString(bool value) -> std::string; // Bool a string (1/0) +auto toLower(const std::string& str) -> std::string; // String a minúsculas +auto toUpper(const std::string& str) -> std::string; // String a mayúsculas -// Detector de colisiones entre un dos rectangulos -auto checkCollision(const SDL_FRect& a, const SDL_FRect& b) -> bool; +// OPERACIONES CON STRINGS +auto stringInVector(const std::vector& vec, const std::string& str) -> bool; // Busca string en vector +auto spaceBetweenLetters(const std::string& input) -> std::string; // Añade espacios entre letras -// Detector de colisiones entre un punto y un rectangulo -auto checkCollision(const SDL_FPoint& p, const SDL_FRect& r) -> bool; +// OPERACIONES CON COLORES +auto colorAreEqual(Color color1, Color color2) -> bool; // Compara dos colores RGB -// Detector de colisiones entre una linea horizontal y un rectangulo -auto checkCollision(const LineHorizontal& l, const SDL_FRect& r) -> bool; +// OPERACIONES CON FICHEROS +auto getFileName(const std::string& path) -> std::string; // Extrae nombre de fichero de ruta +auto getPath(const std::string& full_path) -> std::string; // Extrae directorio de ruta completa -// Detector de colisiones entre una linea vertical y un rectangulo -auto checkCollision(const LineVertical& l, const SDL_FRect& r) -> bool; +// RENDERIZADO +void fillTextureWithColor(SDL_Renderer* renderer, SDL_Texture* texture, Uint8 r, Uint8 g, Uint8 b, Uint8 a); // Rellena textura -// Detector de colisiones entre una linea horizontal y un punto -auto checkCollision(const LineHorizontal& l, const SDL_FPoint& p) -> bool; - -// Detector de colisiones entre dos lineas -auto checkCollision(const Line& l1, const Line& l2) -> SDL_Point; - -// Detector de colisiones entre dos lineas -auto checkCollision(const LineDiagonal& l1, const LineVertical& l2) -> SDL_Point; - -// Detector de colisiones entre un punto y una linea diagonal -auto checkCollision(const SDL_FPoint& p, const LineDiagonal& l) -> bool; - -// Normaliza una linea diagonal -void normalizeLine(LineDiagonal& l); - -// Devuelve un Color a partir de un string -auto stringToColor(const std::string& str) -> Uint8; - -// Convierte una cadena a un entero de forma segura -auto safeStoi(const std::string& value, int default_value = 0) -> int; - -// Convierte una cadena a un booleano -auto stringToBool(const std::string& str) -> bool; - -// Convierte un booleano a una cadena -auto boolToString(bool value) -> std::string; - -// Compara dos colores -auto colorAreEqual(Color color1, Color color2) -> bool; - -// Convierte una cadena a minusculas -auto toLower(const std::string& str) -> std::string; - -// Convierte una cadena a mayúsculas -auto toUpper(const std::string& str) -> std::string; - -// Obtiene el nombre de un fichero a partir de una ruta -auto getFileName(const std::string& path) -> std::string; - -// Obtiene la ruta eliminando el nombre del fichero -auto getPath(const std::string& full_path) -> std::string; - -// Imprime por pantalla una linea de texto de tamaño fijo rellena con puntos -void printWithDots(const std::string& text1, const std::string& text2, const std::string& text3); - -// Comprueba si una vector contiene una cadena -auto stringInVector(const std::vector& vec, const std::string& str) -> bool; - -// Hace sonar la música -void playMusic(const std::string& music_path); - -// Rellena una textura de un color -void fillTextureWithColor(SDL_Renderer* renderer, SDL_Texture* texture, Uint8 r, Uint8 g, Uint8 b, Uint8 a); - -inline auto toSDLRect(const SDL_FRect& frect) -> SDL_Rect { - SDL_Rect rect = { - .x = static_cast(frect.x), - .y = static_cast(frect.y), - .w = static_cast(frect.w), - .h = static_cast(frect.h)}; - return rect; -} - -inline auto toSDLPoint(const SDL_FPoint& fpoint) -> SDL_Point { - SDL_Point point = { - .x = static_cast(fpoint.x), - .y = static_cast(fpoint.y)}; - return point; -} - -// Añade espacios entre las letras de un string -auto spaceBetweenLetters(const std::string& input) -> std::string; \ No newline at end of file +// OUTPUT Y UTILIDADES DE CONSOLA +void printWithDots(const std::string& text1, const std::string& text2, const std::string& text3); // Imprime línea con puntos \ No newline at end of file