#pragma once #include // for SDL_Rect, SDL_Point #include // for Uint8 #include // for string // Tipos de paleta enum class Palette : int { ZXSPECTRUM, ZXARNE }; // Estructura para definir un circulo struct Circle { int x; int y; int r; }; // Estructura para definir una linea horizontal struct h_line_t { int x1, x2, y; }; // Estructura para definir una linea vertical struct v_line_t { int x, y1, y2; }; // Estructura para definir una linea diagonal struct d_line_t { int x1, y1, x2, y2; }; // Estructura para definir una linea struct line_t { int x1, y1, x2, y2; }; // Estructura para definir un color struct Color { Uint8 r; Uint8 g; Uint8 b; // Constructor por defecto Color() : r(0), g(0), b(0) {} // Constructor Color(Uint8 red, Uint8 green, Uint8 blue) : r(red), g(green), b(blue) {} }; // Calcula el cuadrado de la distancia entre dos puntos double distanceSquared(int x1, int y1, int x2, int y2); // Detector de colisiones entre dos circulos bool checkCollision(Circle &a, Circle &b); // Detector de colisiones entre un circulo y un rectangulo bool checkCollision(Circle &a, SDL_Rect &b); // Detector de colisiones entre un dos rectangulos bool checkCollision(SDL_Rect &a, SDL_Rect &b); // Detector de colisiones entre un punto y un rectangulo bool checkCollision(SDL_Point &p, SDL_Rect &r); // Detector de colisiones entre una linea horizontal y un rectangulo bool checkCollision(h_line_t &l, SDL_Rect &r); // Detector de colisiones entre una linea vertical y un rectangulo bool checkCollision(v_line_t &l, SDL_Rect &r); // Detector de colisiones entre una linea horizontal y un punto bool checkCollision(h_line_t &l, SDL_Point &p); // Detector de colisiones entre dos lineas SDL_Point checkCollision(line_t &l1, line_t &l2); // Detector de colisiones entre dos lineas SDL_Point checkCollision(d_line_t &l1, v_line_t &l2); // Detector de colisiones entre un punto y una linea diagonal bool checkCollision(SDL_Point &p, d_line_t &l); // Normaliza una linea diagonal void normalizeLine(d_line_t &l); // Devuelve un Color a partir de un string Color stringToColor(Palette pal, const std::string &str); // Convierte una cadena a un entero de forma segura int safeStoi(const std::string &value, int defaultValue = 0); // Convierte una cadena a un booleano bool stringToBool(const std::string &str); // Convierte un booleano a una cadena std::string boolToString(bool value); // Compara dos colores bool colorAreEqual(Color color1, Color color2); // Convierte una cadena a minusculas std::string toLower(std::string str); // Convierte una cadena a mayúsculas std::string toUpper(std::string str); // Obtiene el nombre de un fichero a partir de una ruta std::string getFileName(const std::string &path); // Obtiene la ruta eliminando el nombre del fichero std::string getPath(const std::string &full_path); // 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);