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

@@ -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();
@@ -53,7 +54,7 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer)
// Crea la textura donde se dibujan los graficos del juego
game_texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, options.game.width, options.game.height);
//game_texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, options.game.width, options.game.height);
// game_texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, options.game.width, options.game.height);
if (!game_texture_)
{
// Registrar el error si está habilitado
@@ -65,7 +66,7 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer)
// Crea la textura donde se dibuja el borde que rodea el area de juego
border_texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
//border_texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
// border_texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
if (!border_texture_)
{
// Registrar el error si está habilitado
@@ -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);
}
@@ -125,7 +126,7 @@ void Screen::render()
game_surface_->copyToTexture(renderer_, game_texture_);
// Renderiza sobre gameCanvas los overlays
//renderNotifications();
// renderNotifications();
// Si está el borde activo, vuelca gameCanvas sobre borderCanvas
if (options.video.border.enabled)
@@ -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)
{
@@ -373,4 +377,17 @@ void Screen::resetShaders()
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_));
}