/** * @file color.hpp * @brief Gestión de colores de la paleta Amstrad CPC */ #pragma once #include #include /** * @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(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; };