Precárrega i asignació de paletes a les textures Ara si algú toca una paleta, que siga conscient que la textura es compartida durant tot el joc
78 lines
2.5 KiB
C++
78 lines
2.5 KiB
C++
#pragma once
|
|
|
|
#include <SDL2/SDL_render.h> // for SDL_Renderer
|
|
#include <SDL2/SDL_stdinc.h> // for Uint8
|
|
#include <memory> // for shared_ptr, unique_ptr
|
|
#include <string> // for string
|
|
#include "sprite.h" // for Sprite
|
|
#include "utils.h" // for Color
|
|
class Texture;
|
|
|
|
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
|
|
std::shared_ptr<TextFile> loadTextFile(const std::string &file_path);
|
|
|
|
// Clase texto. Pinta texto en pantalla a partir de un bitmap
|
|
class Text
|
|
{
|
|
private:
|
|
// Objetos y punteros
|
|
std::unique_ptr<Sprite> sprite_; // Objeto con los graficos para el 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::shared_ptr<Texture> texture, const std::string &text_file);
|
|
Text(std::shared_ptr<Texture> texture, std::shared_ptr<TextFile> text_file);
|
|
|
|
// Destructor
|
|
~Text() = default;
|
|
|
|
// Escribe el texto en pantalla
|
|
void write(int x, int y, const std::string &text, int kerning = 1, int lenght = -1);
|
|
|
|
// Escribe el texto con colores
|
|
void writeColored(int x, int y, const std::string &text, Color color, int kerning = 1, int lenght = -1);
|
|
|
|
// Escribe el texto con sombra
|
|
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 centrado en un punto x
|
|
void writeCentered(int x, int y, const std::string &text, int kerning = 1, int lenght = -1);
|
|
|
|
// Escribe texto con extras
|
|
void writeDX(Uint8 flags, int x, int y, const std::string &text, int kerning = 1, Color textColor = Color(), Uint8 shadow_distance = 1, Color shadow_color = Color(), int lenght = -1);
|
|
|
|
// Obtiene la longitud en pixels de una cadena
|
|
int lenght(const 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);
|
|
}; |