#pragma once #include // for SDL_Renderer #include // for Uint8 #include // for string #include #include "utils.h" #include "sprite.h" #include "texture.h" constexpr int TEXT_COLOR = 1; constexpr int TEXT_SHADOW = 2; constexpr int TEXT_CENTER = 4; constexpr int TEXT_STROKE = 8; struct TextOffset { int x, y, w; }; struct TextFile { int box_width; // Anchura de la caja de cada caracter en el png int box_height; // Altura de la caja de cada caracter en el png TextOffset offset[128]; // Vector con las posiciones y ancho de cada letra }; // Llena una estructuta TextFile desde un fichero TextFile LoadTextFile(std::string file); // Clase texto. Pinta texto en pantalla a partir de un bitmap class Text { private: // Objetos y punteros std::unique_ptr sprite_; // Objeto con los graficos para el texto std::shared_ptr texture_; // Textura con los bitmaps del texto // Variables int box_width_; // Anchura de la caja de cada caracter en el png int box_height_; // Altura de la caja de cada caracter en el png bool fixed_width_; // Indica si el texto se ha de escribir con longitud fija en todas las letras TextOffset offset_[128]; // Vector con las posiciones y ancho de cada letra public: // Constructor Text(std::string bitmap_file, std::string text_file, SDL_Renderer *renderer); Text(std::string text_file, std::shared_ptr texture); Text(TextFile *text_file, std::shared_ptr texture); // Destructor ~Text() = default; // Escribe el texto en pantalla void write(int x, int y, std::string text, int kerning = 1, int lenght = -1); // Escribe el texto con colores void writeColored(int x, int y, std::string text, Color color, int kerning = 1, int lenght = -1); // Escribe el texto con sombra void writeShadowed(int x, int y, std::string text, Color color, Uint8 shadow_distance = 1, int kerning = 1, int lenght = -1); // Escribe el texto centrado en un punto x void writeCentered(int x, int y, std::string text, int kerning = 1, int lenght = -1); // Escribe texto con extras void writeDX(Uint8 flags, int x, int y, std::string text, int kerning = 1, Color textColor = {255, 255, 255}, Uint8 shadow_distance = 1, Color shadow_color = {0, 0, 0}, int lenght = -1); // Obtiene la longitud en pixels de una cadena int lenght(std::string text, int kerning = 1) const; // Devuelve el valor de la variable int getCharacterSize() const; // Recarga la textura void reLoadTexture(); // Establece si se usa un tamaƱo fijo de letra void setFixedWidth(bool value); // Carga una paleta de colores para el texto void addPalette(std::string path); // Establece una paleta de colores para el texto void setPalette(int index); };