canvi de pc

This commit is contained in:
2025-03-05 07:44:12 +01:00
parent 57481a1e97
commit 33038e8509
23 changed files with 173 additions and 164 deletions

View File

@@ -152,6 +152,10 @@ std::string Asset::getTypeName(AssetType type) const
return "TILEMAP";
break;
case AssetType::PALETTE:
return "PALETTE";
break;
default:
return "ERROR";
break;

View File

@@ -14,6 +14,7 @@ enum class AssetType : int
FONT,
ROOM,
TILEMAP,
PALETTE,
MAX_ASSET_TYPE
};

View File

@@ -143,7 +143,7 @@ void Credits::fillTexture()
// Rellena la textura de texto
Screen::get()->setRenderSurfaceData(text_surface_);
Screen::get()->clear(stringToColor("black"));
Screen::get()->clearSurface(stringToColor("black"));
auto text = Resource::get()->getText("smb2");
@@ -168,7 +168,7 @@ void Credits::fillTexture()
// Rellena la textura que cubre el texto con color transparente
Screen::get()->setRenderSurfaceData(text_surface_);
Screen::get()->clear(stringToColor("transparent"));
Screen::get()->clearSurface(stringToColor("transparent"));
// Los primeros 8 pixels crea una malla
auto surface = Screen::get()->getRenderSurfaceData();
@@ -252,7 +252,7 @@ void Credits::render()
Screen::get()->start();
// Limpia la pantalla
Screen::get()->clear(1);
Screen::get()->clearSurface(1);
if (counter_ < 1150)
{

View File

@@ -394,11 +394,11 @@ bool Director::setFileList()
Asset::get()->add(prefix + "/data/font/8bithud.txt", AssetType::FONT);
// Paletas
Asset::get()->add(prefix + "/data/palette/ruzx-spectrum-8x.gif", AssetType::DATA);
Asset::get()->add(prefix + "/data/palette/ruzx-spectrum-revision-2-8x.gif", AssetType::DATA);
Asset::get()->add(prefix + "/data/palette/zxarne-5-2-8x.gif", AssetType::DATA);
Asset::get()->add(prefix + "/data/palette/zx-spectrum-8x.gif", AssetType::DATA);
Asset::get()->add(prefix + "/data/palette/zx-spectrum-adjusted-8x.gif", AssetType::DATA);
Asset::get()->add(prefix + "/data/palette/zx-spectrum-8x.gif", AssetType::PALETTE);
Asset::get()->add(prefix + "/data/palette/zx-spectrum-adjusted-8x.gif", AssetType::PALETTE);
Asset::get()->add(prefix + "/data/palette/ruzx-spectrum-8x.gif", AssetType::PALETTE);
Asset::get()->add(prefix + "/data/palette/ruzx-spectrum-revision-2-8x.gif", AssetType::PALETTE);
Asset::get()->add(prefix + "/data/palette/zxarne-5-2-8x.gif", AssetType::PALETTE);
// Shaders
Asset::get()->add(prefix + "/data/shaders/crtpi_192.glsl", AssetType::DATA);

View File

@@ -84,7 +84,7 @@ void Ending::render()
Screen::get()->start();
// Limpia la pantalla
Screen::get()->clear(stringToColor("yellow"));
Screen::get()->clearSurface(stringToColor("yellow"));
// Dibuja las imagenes de la escena
sprite_pics_.at(current_scene_).image_sprite->render();
@@ -185,7 +185,7 @@ void Ending::iniTexts()
Screen::get()->setRenderSurfaceData(st.cover_surface);
// Rellena la cover_surface con color transparente
Screen::get()->clear(stringToColor("transparent"));
Screen::get()->clearSurface(stringToColor("transparent"));
// Crea una malla de 8 pixels de alto
auto surface = Screen::get()->getRenderSurfaceData();
@@ -252,7 +252,7 @@ void Ending::iniPics()
Screen::get()->setRenderSurfaceData(sp.cover_surface);
// Rellena la cover_surface con color transparente
Screen::get()->clear(stringToColor("transparent"));
Screen::get()->clearSurface(stringToColor("transparent"));
// Crea una malla en los primeros 8 pixels
auto surface = Screen::get()->getRenderSurfaceData();
@@ -473,7 +473,7 @@ void Ending::fillCoverTexture()
{
// Rellena la textura que cubre el texto con color transparente
Screen::get()->setRenderSurfaceData(cover_surface_);
Screen::get()->clear(stringToColor("transparent"));
Screen::get()->clearSurface(stringToColor("transparent"));
// Los primeros 8 pixels crea una malla
const Uint8 color = stringToColor("black");

View File

@@ -101,7 +101,7 @@ void Ending2::render()
Screen::get()->start();
// Limpia la pantalla
Screen::get()->clear(stringToColor("black"));
Screen::get()->clearSurface(stringToColor("black"));
// Dibuja los sprites
renderSprites();

View File

@@ -565,7 +565,7 @@ void Game::fillRoomNameTexture()
Screen::get()->setRenderSurfaceData(room_name_surface_);
// Rellena la textura de color
Screen::get()->clear(stringToColor("white"));
Screen::get()->clearSurface(stringToColor("white"));
// Escribe el texto en la textura
auto text = Resource::get()->getText("smb2");

View File

@@ -71,7 +71,7 @@ void GameOver::render()
constexpr int Y = 32;
Screen::get()->start();
Screen::get()->clear(1);
Screen::get()->clearSurface(1);
auto text = Resource::get()->getText("smb2");

View File

@@ -27,7 +27,8 @@ namespace globalInputs
// Cambia la paleta de colores
void switchPalette()
{
options.video.palette = options.video.palette == Palette::ZXSPECTRUM ? Palette::ZXARNE : Palette::ZXSPECTRUM;
//options.video.palette = options.video.palette == Palette::ZXSPECTRUM ? Palette::ZXARNE : Palette::ZXSPECTRUM;
Screen::get()->nextPalette();
}
// Cambia de seccion

View File

@@ -141,7 +141,7 @@ void LoadingScreen::updateCounter()
// Dibuja la pantalla de carga
void LoadingScreen::renderLoad()
{
loading_first_part_ ? mono_loading_screen_sprite_->render() : color_loading_screen_sprite_->render();
loading_first_part_ ? mono_loading_screen_sprite_->render(1, stringToColor("black")) : color_loading_screen_sprite_->render();
}
// Dibuja el efecto de carga en el borde
@@ -149,7 +149,7 @@ void LoadingScreen::renderBorder()
{
// Pinta el borde de colro azul
Uint8 color = stringToColor("blue");
Screen::get()->clear(color);
Screen::get()->clearSurface(color);
// Añade lineas amarillas
color = stringToColor("yellow");
@@ -203,6 +203,7 @@ void LoadingScreen::render()
// Prepara para empezar a dibujar en la textura de juego
Screen::get()->start();
Screen::get()->clearSurface(stringToColor("white"));
// Copia la surface a la surface de Screen
screen_surface_->render(0, 0);

View File

@@ -221,14 +221,14 @@ void Logo::render()
Screen::get()->start();
// Limpia la pantalla
Screen::get()->clear();
Screen::get()->clearSurface();
// Dibuja los objetos
for (const auto &s : jailgames_sprite_)
{
s->render();
s->render(1, stringToColor("white"));
}
since_1998_sprite_->render();
since_1998_sprite_->render(1, stringToColor("white"));
// Vuelca el contenido del renderizador en pantalla
Screen::get()->render();

View File

@@ -259,7 +259,7 @@ void Notifier::show(std::vector<std::string> texts, NotificationText text_is, in
else if (shape == NotificationShape::SQUARED)
{
Screen::get()->clear(bg_color_);
Screen::get()->clearSurface(bg_color_);
}
// Dibuja el icono de la notificación

View File

@@ -405,17 +405,16 @@ void Resource::renderProgress()
constexpr int BAR_HEIGHT = 10;
const int bar_position = options.game.height - BAR_HEIGHT - Y_PADDING;
Screen::get()->start();
Screen::get()->clear(4);
Screen::get()->clearSurface();
//SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 255, 255, 255, 255);
//
//const int wired_bar_width = options.game.width - (X_PADDING * 2);
//SDL_Rect rect_wired = {X_PADDING, bar_position, wired_bar_width, X_PADDING};
//SDL_RenderDrawRect(Screen::get()->getRenderer(), &rect_wired);
//
//const int full_bar_width = wired_bar_width * count_.getPercentage();
//SDL_Rect rect_full = {X_PADDING, bar_position, full_bar_width, X_PADDING};
//SDL_RenderFillRect(Screen::get()->getRenderer(), &rect_full);
auto surface = std::make_shared<Surface>(Screen::get()->getRenderSurfaceData(), 1, 1);
const int wired_bar_width = options.game.width - (X_PADDING * 2);
SDL_Rect rect_wired = {X_PADDING, bar_position, wired_bar_width, X_PADDING};
surface->fillRect(Screen::get()->getRenderSurfaceData(), &rect_wired, stringToColor("blue"));
const int full_bar_width = wired_bar_width * count_.getPercentage();
SDL_Rect rect_full = {X_PADDING, bar_position, full_bar_width, X_PADDING};
surface->fillRect(Screen::get()->getRenderSurfaceData(), &rect_full, stringToColor("white"));
Screen::get()->renderWithoutNotifier();
}

View File

@@ -475,7 +475,7 @@ void Room::fillMapTexture()
{
const Uint8 color = stringToColor(bg_color_);
Screen::get()->setRenderSurfaceData(map_surface_);
Screen::get()->clear(color);
Screen::get()->clearSurface(color);
// Los tileSetFiles son de 20x20 tiles. El primer tile es el 0. Cuentan hacia la derecha y hacia abajo

View File

@@ -139,7 +139,7 @@ void Scoreboard::fillTexture()
Screen::get()->setRenderSurfaceData(surface_);
// Limpia la textura
Screen::get()->clear(stringToColor("black"));
Screen::get()->clearSurface(stringToColor("black"));
// Anclas
constexpr int LINE1 = BLOCK;

View File

@@ -13,7 +13,7 @@
#include "notifier.h" // Para Notify
#include "options.h"
#include "mouse.h"
// #include "surface.h"
#include "surface.h"
// [SINGLETON]
Screen *Screen::screen_ = nullptr;
@@ -39,7 +39,8 @@ Screen *Screen::get()
// Constructor
Screen::Screen(SDL_Window *window, SDL_Renderer *renderer)
: window_(window),
renderer_(renderer)
renderer_(renderer),
palettes_(Asset::get()->getListByType(AssetType::PALETTE))
{
// Ajusta los tamaños
adjustGameCanvasRect();
@@ -77,11 +78,11 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer)
// Crea la surface donde se dibujan los graficos del juego
game_surface_ = std::make_shared<Surface>(nullptr, options.game.width, options.game.height);
game_surface_->loadPalette(Asset::get()->get("zx-spectrum-8x.gif"));
game_surface_->loadPalette(palettes_.front());
// Crea la surface donde se dibujan los graficos del juego
border_surface_ = std::make_shared<Surface>(nullptr, options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
border_surface_->loadPalette(Asset::get()->get("zx-spectrum-8x.gif"));
border_surface_->loadPalette(palettes_.front());
// Establece el modo de video
setVideoMode(options.video.mode);
@@ -106,7 +107,7 @@ void Screen::clear(Color color)
}
// Limpia la pantalla
void Screen::clear(Uint8 index)
void Screen::clearSurface(Uint8 index)
{
game_surface_->clear(index);
}
@@ -140,6 +141,9 @@ void Screen::render()
// Vuelca el contenido del renderizador en pantalla
void Screen::renderWithoutNotifier()
{
// Copia la surface a game_texture_
game_surface_->copyToTexture(renderer_, game_texture_);
// Si está el borde activo, vuelca gameCanvas sobre borderCanvas
if (options.video.border.enabled)
{
@@ -374,3 +378,16 @@ void Screen::setRenderSurfaceData(std::shared_ptr<Surface> surface)
{
(surface) ? game_surface_->redirectSurfaceDataTo(surface) : game_surface_->restoreOriginalSurfaceData();
}
// Cambia la paleta
void Screen::nextPalette()
{
++current_palette_;
if (current_palette_ == static_cast<int>(palettes_.size()))
{
current_palette_ = 0;
}
game_surface_->loadPalette(palettes_.at(current_palette_));
border_surface_->loadPalette(palettes_.at(current_palette_));
}

View File

@@ -38,6 +38,8 @@ private:
int window_height_; // Alto de la pantalla o ventana
SDL_Rect game_rect_; // Coordenadas donde se va a dibujar la textura del juego sobre la pantalla o ventana
Uint8 border_color_; // Color del borde añadido a la textura de juego para rellenar la pantalla
std::vector<std::string> palettes_; // Listado de los ficheros de paletta disponibles
Uint8 current_palette_ = 0; // Indice para el vector de paletas
// Dibuja las notificaciones
void renderNotifications();
@@ -78,7 +80,7 @@ public:
// Limpia la pantalla
void clear(Color color = {0x00, 0x00, 0x00});
void clear(Uint8 index);
void clearSurface(Uint8 index = 1);
// Prepara para empezar a dibujar en la textura de juego
void start();
@@ -139,4 +141,7 @@ public:
// Prepara para empezar a dibujar en la textura del borde
void startDrawOnBorder() { setRenderSurfaceData(border_surface_); }
// Cambia la paleta
void nextPalette();
};

View File

@@ -10,25 +10,45 @@
#include "asset.h" // for Asset
#include "gif.h" // for LoadGif, LoadPalette
Surface::Surface(std::shared_ptr<SurfaceData> surface_dest, int w, int h)
: surface_data_dest_(surface_dest),
surface_data_(std::make_shared<SurfaceData>(w, h)),
original_surface_data_(surface_data_),
transparent_color_(0) {}
Surface::Surface(std::shared_ptr<SurfaceData> surface_dest, const std::string &file_path)
: surface_data_dest_(surface_dest),
transparent_color_(0)
Surface::Surface(std::shared_ptr<SurfaceData> surface_data_dest, int w, int h)
{
// Carga la SurfaceData
SurfaceData loadedData = loadSurface(file_path);
surface_data_ = std::make_shared<SurfaceData>(std::move(loadedData));
// Inicializar surface_data_ con un nuevo SurfaceData
surface_data_ = std::make_shared<SurfaceData>(w, h);
// Inicializa el puntero original
// Guardar la copia original de surface_data_
original_surface_data_ = surface_data_;
// Si se proporciona un surface_data_dest, enlazamos surface_data_dest_
if (surface_data_dest)
{
surface_data_dest_ = surface_data_dest;
}
else
{
// Si no se pasa otro puntero, surface_data_dest_ apunta al propio surface_data_
surface_data_dest_ = surface_data_;
}
}
Surface::~Surface() {}
Surface::Surface(std::shared_ptr<SurfaceData> surface_data_dest, const std::string &file_path)
{
// Cargar surface_data_ desde el archivo
surface_data_ = std::make_shared<SurfaceData>(loadSurface(file_path));
// Guardar la copia original de surface_data_
original_surface_data_ = surface_data_;
// Si se proporciona un surface_data_dest, enlazamos surface_data_dest_
if (surface_data_dest)
{
surface_data_dest_ = surface_data_dest;
}
else
{
// Si no se pasa otro puntero, surface_data_dest_ apunta al propio surface_data_
surface_data_dest_ = surface_data_;
}
}
// Carga una superficie desde un archivo
SurfaceData Surface::loadSurface(const std::string &file_path)
@@ -335,8 +355,6 @@ void Surface::renderWithColorReplace(int x, int y, Uint8 source_color, Uint8 tar
// Limitar la región para evitar accesos fuera de rango
w = std::min(w, surface_data_->width - sx);
h = std::min(h, surface_data_->height - sy);
w = std::min(w, surface_data_dest_->width - x);
h = std::min(h, surface_data_dest_->height - y);
// Renderiza píxel por píxel aplicando el flip si es necesario
for (int iy = 0; iy < h; ++iy)
@@ -351,6 +369,12 @@ void Surface::renderWithColorReplace(int x, int y, Uint8 source_color, Uint8 tar
int dest_x = x + ix;
int dest_y = y + iy;
// Verifica que las coordenadas de destino estén dentro de los límites
if (dest_x < 0 || dest_y < 0 || dest_x >= surface_data_dest_->width || dest_y >= surface_data_dest_->height)
{
continue; // Saltar píxeles fuera del rango del destino
}
// Copia el píxel si no es transparente
Uint8 color = surface_data_->data[src_x + src_y * surface_data_->width];
if (color != transparent_color_)
@@ -430,3 +454,28 @@ bool Surface::fadePalette()
// Devolver si el índice 15 coincide con el índice 0
return palette_[15] == palette_[0];
}
// Método para redirigir surface_data_ al surface_data_ de otro objeto
void Surface::redirectSurfaceDataTo(const std::shared_ptr<SurfaceData>& newSurfaceData)
{
// Guardar el surface_data_ original para poder restaurarlo
original_surface_data_ = surface_data_;
// Redirigir surface_data_ al nuevo surface_data_
surface_data_ = newSurfaceData;
}
void Surface::redirectSurfaceDataTo(const std::shared_ptr<Surface> &otherSurface)
{
// Guardar el surface_data_ original para poder restaurarlo
original_surface_data_ = surface_data_;
// Redirigir surface_data_ al nuevo surface_data_
surface_data_ = otherSurface->getSurfaceData();
}
// Método para restaurar surface_data_ al valor original
void Surface::restoreOriginalSurfaceData()
{
surface_data_ = original_surface_data_;
}

View File

@@ -68,11 +68,11 @@ private:
public:
// Constructor
Surface(std::shared_ptr<SurfaceData> surface_data_dest, int w, int h);
Surface(std::shared_ptr<SurfaceData> surface_data_dest = nullptr, int w = 0, int h = 0);
Surface(std::shared_ptr<SurfaceData> surface_data_dest, const std::string &file_path);
// Destructor
~Surface();
~Surface() = default;
// Carga una SurfaceData desde un archivo
SurfaceData loadSurface(const std::string &file_path);
@@ -124,10 +124,10 @@ public:
void setPalette(const std::array<Uint32, 256> &palette) { palette_ = palette; }
void setSurface(std::shared_ptr<SurfaceData> surface) { surface_data_ = surface; }
// Permite que una Surface apunte al SurfaceData de otra Surface
void redirectSurfaceDataTo(const std::shared_ptr<SurfaceData> &newSurfaceData) { surface_data_ = newSurfaceData; }
void redirectSurfaceDataTo(const std::shared_ptr<Surface> &otherSurface) { surface_data_ = otherSurface->getSurfaceData(); }
// Método para redirigir surface_data_ al surface_data_ de otro objeto
void redirectSurfaceDataTo(const std::shared_ptr<SurfaceData> &newSurfaceData);
void redirectSurfaceDataTo(const std::shared_ptr<Surface> &otherSurface);
// Método para restaurar
void restoreOriginalSurfaceData() { surface_data_ = original_surface_data_; }
// Método para restaurar surface_data_ al valor original
void restoreOriginalSurfaceData();
};

View File

@@ -148,7 +148,7 @@ std::shared_ptr<Surface> Text::writeToSurface(const std::string &text, int zoom,
auto height = box_height_ * zoom;
auto surface = std::make_shared<Surface>(Screen::get()->getRenderSurfaceData(), width, height);
Screen::get()->setRenderSurfaceData(surface);
Screen::get()->clear(stringToColor("transparent"));
Screen::get()->clearSurface(stringToColor("transparent"));
write(0, 0, text, kerning);
Screen::get()->setRenderSurfaceData(nullptr);
@@ -162,7 +162,7 @@ std::shared_ptr<Surface> Text::writeDXToSurface(Uint8 flags, const std::string &
auto height = box_height_ + shadow_distance;
auto surface = std::make_shared<Surface>(Screen::get()->getRenderSurfaceData(), width, height);
Screen::get()->setRenderSurfaceData(surface);
Screen::get()->clear(stringToColor("transparent"));
Screen::get()->clearSurface(stringToColor("transparent"));
writeDX(flags, 0, 0, text, kerning, textColor, shadow_distance, shadow_color, lenght);
Screen::get()->setRenderSurfaceData(nullptr);

View File

@@ -23,8 +23,8 @@
// Constructor
Title::Title()
: surface_(Resource::get()->getSurface("title_logo.gif")),
sprite_(std::make_shared<SSprite>(surface_, 0, 0, surface_->getWidth(), surface_->getHeight())),
: title_logo_surface_(Resource::get()->getSurface("title_logo.gif")),
title_logo_sprite_(std::make_shared<SSprite>(title_logo_surface_, 0, 0, title_logo_surface_->getWidth(), title_logo_surface_->getHeight())),
bg_surface_(std::make_shared<Surface>(Screen::get()->getRenderSurfaceData(), options.game.width, options.game.height))
{
// Carga la surface con los gráficos de la pantalla de carga
@@ -33,6 +33,8 @@ Title::Title()
pLoadPal(Asset::get()->get("loading_screen_color.gif").c_str());
pSetSource(loading_screen_);
//title_logo_surface_->setSurfaceDataDest(bg_surface_->getSurfaceData());
// Inicializa variables
state_ = options.section.subsection == Subsection::TITLE_WITH_LOADING_SCREEN ? TitleState::SHOW_LOADING_SCREEN : TitleState::SHOW_MENU;
options.section.section = Section::TITLE;
@@ -246,7 +248,7 @@ void Title::render()
{
// Prepara para empezar a dibujar en la textura de juego
Screen::get()->start();
Screen::get()->clear(stringToColor("black"));
Screen::get()->clearSurface(stringToColor("black"));
if (state_ == TitleState::SHOW_MENU)
{
@@ -270,7 +272,7 @@ void Title::render()
pFlip(Screen::get()->getRenderer());
// Dibuja el logo del título
sprite_->render();
title_logo_sprite_->render();
}
// Vuelca el contenido del renderizador en pantalla
@@ -314,11 +316,10 @@ void Title::fillSurface()
Screen::get()->setRenderSurfaceData(bg_surface_);
// Rellena la textura de color
bg_surface_->setColor(255, 0xFF000000);
bg_surface_->clear(255);
Screen::get()->clearSurface(4);
// Pinta el gráfico del titulo a partir del sprite
sprite_->render();
title_logo_sprite_->render();
// Escribe el texto en la textura
auto text = Resource::get()->getText("smb2");
@@ -328,6 +329,7 @@ void Title::fillSurface()
text->writeDX(TEXT_CENTER | TEXT_COLOR, PLAY_AREA_CENTER_X, 13 * TEXT_SIZE, "2.ACHIEVEMENTS", 1, COLOR);
text->writeDX(TEXT_CENTER | TEXT_COLOR, PLAY_AREA_CENTER_X, 15 * TEXT_SIZE, "3.REDEFINE KEYS", 1, COLOR);
text->writeDX(TEXT_CENTER | TEXT_COLOR, PLAY_AREA_CENTER_X, 20 * TEXT_SIZE, "ESC.EXIT GAME", 1, COLOR);
text->writeColored(PLAY_AREA_CENTER_X, 30 * TEXT_SIZE, "ESC.EXIT GAME", COLOR);
// Devuelve el puntero del renderizador a su sitio
Screen::get()->setRenderSurfaceData(nullptr);
@@ -352,7 +354,7 @@ void Title::createCheevosTexture()
// Rellena la textura con color sólido
const Uint8 CHEEVOS_BG_COLOR = stringToColor("black");
Screen::get()->clear(CHEEVOS_BG_COLOR);
Screen::get()->clearSurface(CHEEVOS_BG_COLOR);
// Escribe la lista de logros en la textura
const std::string CHEEVOS_OWNER = "ACHIEVEMENTS";

View File

@@ -28,8 +28,8 @@ private:
};
// Objetos y punteros
std::shared_ptr<Surface> surface_; // Textura con los graficos
std::shared_ptr<SSprite> sprite_; // SSprite para manejar la surface
std::shared_ptr<Surface> title_logo_surface_; // Textura con los graficos
std::shared_ptr<SSprite> title_logo_sprite_; // SSprite para manejar la surface
std::shared_ptr<Surface> bg_surface_; // Textura para dibujar el fondo de la pantalla
std::shared_ptr<Surface> cheevos_surface_; // Textura con la lista de logros
std::shared_ptr<SSprite> cheevos_sprite_; // SSprite para manejar la surface con la lista de logros

View File

@@ -358,76 +358,6 @@ bool checkCollision(const SDL_Point &p, const LineDiagonal &l)
return true;
}
// Convierte una cadena a un color
Color stringToColor(Palette pal, const std::string &str)
{
// Mapas de colores para cada paleta
static const std::unordered_map<std::string, Color> zxSpectrumColors = {
{"black", {0x00, 0x00, 0x00}},
{"bright_black", {0x00, 0x00, 0x00}},
{"blue", {0x00, 0x00, 0xD8}},
{"bright_blue", {0x00, 0x00, 0xFF}},
{"red", {0xD8, 0x00, 0x00}},
{"bright_red", {0xFF, 0x00, 0x00}},
{"magenta", {0xD8, 0x00, 0xD8}},
{"bright_magenta", {0xFF, 0x00, 0xFF}},
{"green", {0x00, 0xD8, 0x00}},
{"bright_green", {0x00, 0xFF, 0x00}},
{"cyan", {0x00, 0xD8, 0xD8}},
{"bright_cyan", {0x00, 0xFF, 0xFF}},
{"yellow", {0xD8, 0xD8, 0x00}},
{"bright_yellow", {0xFF, 0xFF, 0x00}},
{"white", {0xD8, 0xD8, 0xD8}},
{"bright_white", {0xFF, 0xFF, 0xFF}}};
static const std::unordered_map<std::string, Color> zxArneColors = {
{"black", {0x00, 0x00, 0x00}},
{"bright_black", {0x3C, 0x35, 0x1F}},
{"blue", {0x31, 0x33, 0x90}},
{"bright_blue", {0x15, 0x59, 0xDB}},
{"red", {0xA7, 0x32, 0x11}},
{"bright_red", {0xD8, 0x55, 0x25}},
{"magenta", {0xA1, 0x55, 0x89}},
{"bright_magenta", {0xCD, 0x7A, 0x50}},
{"green", {0x62, 0x9A, 0x31}},
{"bright_green", {0x9C, 0xD3, 0x3C}},
{"cyan", {0x28, 0xA4, 0xCB}},
{"bright_cyan", {0x65, 0xDC, 0xD6}},
{"yellow", {0xE8, 0xBC, 0x50}},
{"bright_yellow", {0xF1, 0xE7, 0x82}},
{"white", {0xBF, 0xBF, 0xBD}},
{"bright_white", {0xF2, 0xF1, 0xED}}};
// Selecciona el mapa de colores adecuado según la paleta
const std::unordered_map<std::string, Color> *paletteMap = nullptr;
if (pal == Palette::ZXSPECTRUM)
{
paletteMap = &zxSpectrumColors;
}
else if (pal == Palette::ZXARNE)
{
paletteMap = &zxArneColors;
}
else
{
// Paleta desconocida, devolvemos negro por defecto
return {0x00, 0x00, 0x00};
}
// Busca el color en el mapa
auto it = paletteMap->find(str);
if (it != paletteMap->end())
{
return it->second;
}
else
{
// Si no se encuentra el color, devolvemos negro por defecto
return {0x00, 0x00, 0x00};
}
}
// Convierte una cadena a un indice de la paleta
Uint8 stringToColor(const std::string &str)
{
@@ -460,7 +390,7 @@ Uint8 stringToColor(const std::string &str)
else
{
// Si no se encuentra el color, devolvemos negro por defecto
return {0};
return 0;
}
}