#pragma once #include #include #include // for string #include class Sprite; class Texture; #include "utils/utils.h" // Clase texto. Pinta texto en pantalla a partir de un bitmap class Text { public: // Flags bitmask para writeDX static constexpr int FLAG_COLOR = 1; static constexpr int FLAG_SHADOW = 2; static constexpr int FLAG_CENTER = 4; static constexpr int FLAG_STROKE = 8; struct Offset { int x; // Posición X dentro del bitmap int y; // Posición Y dentro del bitmap int w; // Anchura del glifo }; Text(const std::string &bitmap_file, const std::string &text_file, SDL_Renderer *renderer); // Constructor desde paths Text(const std::vector &png_bytes, const std::vector &txt_bytes, SDL_Renderer *renderer); // Constructor desde bytes en memoria ~Text(); // Destructor // No copiable (gestiona memoria dinámica) Text(const Text &) = delete; auto operator=(const Text &) -> Text & = delete; 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, Color color, int kerning = 1, int lenght = -1); // Escribe el texto con colores void writeShadowed(int x, int y, const std::string &text, Color 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, Color text_color = Color(255, 255, 255), Uint8 shadow_distance = 1, Color shadow_color = Color(0, 0, 0), int lenght = -1); // Escribe texto con extras auto lenght(const std::string &text, int kerning = 1) -> int; // Obtiene la longitud en pixels de una cadena [[nodiscard]] auto getCharacterSize() const -> int; // Devuelve el valor de la variable void reLoadTexture(); // Recarga la textura void setFixedWidth(bool value); // Establece si se usa un tamaño fijo de letra private: // Objetos y punteros Sprite *sprite_; // Objeto con los graficos para el texto Texture *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 Offset offset_[128]; // Vector con las posiciones y ancho de cada letra };