95 lines
3.1 KiB
C++
95 lines
3.1 KiB
C++
/**
|
|
* @file color.hpp
|
|
* @brief Gestión de colores de la paleta Amstrad CPC
|
|
*/
|
|
|
|
#ifndef COLOR_HPP
|
|
#define COLOR_HPP
|
|
|
|
#include <SDL2/SDL_stdinc.h>
|
|
|
|
#include <string>
|
|
|
|
/**
|
|
* @class Color
|
|
* @brief Clase para gestionar los colores de la paleta Amstrad CPC
|
|
*
|
|
* La paleta del Amstrad CPC tiene 27 colores únicos organizados en un sistema
|
|
* de 3 niveles de intensidad (0, 128, 255) para cada componente RGB.
|
|
*/
|
|
class Color {
|
|
public:
|
|
/**
|
|
* @enum Cpc
|
|
* @brief Índices de los colores de la paleta Amstrad CPC
|
|
*
|
|
* Los nombres corresponden a los colores oficiales documentados por Amstrad.
|
|
* El índice 0 está reservado para transparencia.
|
|
*/
|
|
enum class Cpc : Uint8 {
|
|
// Transparente (índice 0)
|
|
CLEAR = 0, // Nota: No usar "TRANSPARENT" - colisiona con macro de Windows
|
|
|
|
// Negros y azules (R=0)
|
|
BLACK = 1, // 0, 0, 0
|
|
BLUE = 2, // 0, 0, 128
|
|
BRIGHT_BLUE = 3, // 0, 0, 255
|
|
|
|
// Rojos y magentas (G=0)
|
|
RED = 4, // 128, 0, 0
|
|
MAGENTA = 5, // 128, 0, 128
|
|
MAUVE = 6, // 128, 0, 255
|
|
BRIGHT_RED = 7, // 255, 0, 0
|
|
PURPLE = 8, // 255, 0, 128
|
|
BRIGHT_MAGENTA = 9, // 255, 0, 255
|
|
|
|
// Verdes y cianes (R=0, G>0)
|
|
GREEN = 10, // 0, 128, 0
|
|
CYAN = 11, // 0, 128, 128
|
|
SKY_BLUE = 12, // 0, 128, 255
|
|
|
|
// Amarillos y blancos medios (G=128)
|
|
YELLOW = 13, // 128, 128, 0
|
|
WHITE = 14, // 128, 128, 128
|
|
PASTEL_BLUE = 15, // 128, 128, 255
|
|
|
|
// Naranjas y rosas (R=255, G=128)
|
|
ORANGE = 16, // 255, 128, 0
|
|
PINK = 17, // 255, 128, 128
|
|
PASTEL_MAGENTA = 18, // 255, 128, 255
|
|
|
|
// Verdes brillantes (G=255)
|
|
BRIGHT_GREEN = 19, // 0, 255, 0
|
|
SEA_GREEN = 20, // 0, 255, 128
|
|
BRIGHT_CYAN = 21, // 0, 255, 255
|
|
|
|
// Limas y pasteles verdes (G=255)
|
|
LIME = 22, // 128, 255, 0
|
|
PASTEL_GREEN = 23, // 128, 255, 128
|
|
PASTEL_CYAN = 24, // 128, 255, 255
|
|
|
|
// Amarillos brillantes y blancos (R=255, G=255)
|
|
BRIGHT_YELLOW = 25, // 255, 255, 0
|
|
PASTEL_YELLOW = 26, // 255, 255, 128
|
|
BRIGHT_WHITE = 27 // 255, 255, 255
|
|
};
|
|
|
|
/**
|
|
* @brief Obtiene el índice de paleta de un color CPC
|
|
* @param color Color del enum Cpc
|
|
* @return Índice de paleta (Uint8)
|
|
*/
|
|
static constexpr auto index(Cpc color) -> Uint8 {
|
|
return static_cast<Uint8>(color);
|
|
}
|
|
|
|
/**
|
|
* @brief Convierte un nombre de color (string) a índice de paleta
|
|
* @param name Nombre del color en minúsculas (ej: "cyan", "bright_blue")
|
|
* @return Índice de paleta, o 1 (BLACK) si no se encuentra
|
|
*/
|
|
static auto fromString(const std::string& name) -> Uint8;
|
|
};
|
|
|
|
#endif // COLOR_HPP
|