canvi de pc
This commit is contained in:
@@ -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_;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user