#pragma once #include #include // Para std::array #include // Para shared_ptr, unique_ptr #include // Para string #include "core/rendering/surface_sprite.hpp" // Para SSprite class Surface; // lines 8-8 // Clase texto. Pinta texto en pantalla a partir de un bitmap class Text { public: // Tipos anidados públicos struct Offset { int x{0}, y{0}, w{0}; }; struct File { int box_width{0}; // Anchura de la caja de cada caracter en el png int box_height{0}; // Altura de la caja de cada caracter en el png std::array offset{}; // Vector con las posiciones y ancho de cada letra }; // Constructor Text(const std::shared_ptr& surface, const std::string& text_file); Text(const std::shared_ptr& surface, const std::shared_ptr& text_file); // Destructor ~Text() = default; // Constantes de flags para writeDX static constexpr int COLOR_FLAG = 1; static constexpr int SHADOW_FLAG = 2; static constexpr int CENTER_FLAG = 4; static constexpr int STROKE_FLAG = 8; void write(int x, int y, const std::string& text, int kerning = 1, int lenght = -1); // Escribe el texto en pantalla void writeColored(int x, int y, const std::string& text, Uint8 color, int kerning = 1, int lenght = -1); // Escribe el texto con colores void writeShadowed(int x, int y, const std::string& text, Uint8 color, Uint8 shadow_distance = 1, int kerning = 1, int lenght = -1); // Escribe el texto con sombra void writeCentered(int x, int y, const std::string& text, int kerning = 1, int lenght = -1); // Escribe el texto centrado en un punto x void writeDX(Uint8 flags, int x, int y, const std::string& text, int kerning = 1, Uint8 text_color = Uint8(), Uint8 shadow_distance = 1, Uint8 shadow_color = Uint8(), int lenght = -1); // Escribe texto con extras auto writeToSurface(const std::string& text, int zoom = 1, int kerning = 1) -> std::shared_ptr; // Escribe el texto en una textura auto writeDXToSurface(Uint8 flags, const std::string& text, int kerning = 1, Uint8 text_color = Uint8(), Uint8 shadow_distance = 1, Uint8 shadow_color = Uint8(), int lenght = -1) -> std::shared_ptr; // Escribe el texto con extras en una textura [[nodiscard]] auto length(const std::string& text, int kerning = 1) const -> int; // Obtiene la longitud en pixels de una cadena [[nodiscard]] auto getCharacterSize() const -> int; // Devuelve el tamaño del caracter void setFixedWidth(bool value); // Establece si se usa un tamaño fijo de letra static auto loadTextFile(const std::string& file_path) -> std::shared_ptr; // Método de utilidad para cargar ficheros de texto private: // Objetos y punteros std::unique_ptr sprite_ = nullptr; // Objeto con los graficos para el texto // Variables int box_width_ = 0; // Anchura de la caja de cada caracter en el png int box_height_ = 0; // Altura de la caja de cada caracter en el png bool fixed_width_ = false; // Indica si el texto se ha de escribir con longitud fija en todas las letras std::array offset_{}; // Vector con las posiciones y ancho de cada letra };