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

@@ -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_;
}