Ja torna a funcionar el borde
This commit is contained in:
@@ -79,6 +79,7 @@ Director::Director(int argc, const char *argv[])
|
||||
Screen::get()->setBorderColor(border_color);
|
||||
Resource::init();
|
||||
Notifier::init("", "8bithud");
|
||||
Screen::get()->setNotificationsEnabled(true);
|
||||
Input::init(Asset::get()->get("gamecontrollerdb.txt"));
|
||||
initInput();
|
||||
Debug::init();
|
||||
|
||||
@@ -145,16 +145,17 @@ void LoadingScreen::renderLoad()
|
||||
// Dibuja el efecto de carga en el borde
|
||||
void LoadingScreen::renderBorder()
|
||||
{
|
||||
// Pinta el borde de colro azul
|
||||
Uint8 color = stringToColor("blue");
|
||||
Screen::get()->clearSurface(color);
|
||||
// Obtiene la Surface del borde
|
||||
auto border = Screen::get()->getBorderSurface();
|
||||
|
||||
// Pinta el borde de color azul
|
||||
border->clear(stringToColor("blue"));
|
||||
|
||||
// Añade lineas amarillas
|
||||
color = stringToColor("yellow");
|
||||
const Uint8 COLOR = stringToColor("yellow");
|
||||
const int WIDTH = options.game.width + (options.video.border.width * 2);
|
||||
const int HEIGHT = options.game.height + (options.video.border.height * 2);
|
||||
bool draw_enabled = rand() % 2 == 0 ? true : false;
|
||||
auto surface = Screen::get()->getRendererSurface();
|
||||
|
||||
int row = 0;
|
||||
while (row < HEIGHT)
|
||||
@@ -164,7 +165,7 @@ void LoadingScreen::renderBorder()
|
||||
{
|
||||
for (int i = row; i < row + ROW_HEIGHT; ++i)
|
||||
{
|
||||
surface->drawLine(0, i, WIDTH, i, color);
|
||||
border->drawLine(0, i, WIDTH, i, COLOR);
|
||||
}
|
||||
}
|
||||
row += ROW_HEIGHT;
|
||||
@@ -192,9 +193,6 @@ void LoadingScreen::render()
|
||||
{
|
||||
if (options.video.border.enabled)
|
||||
{
|
||||
// Prepara para empezar a dibujar en la textura del borde
|
||||
Screen::get()->startDrawOnBorder();
|
||||
|
||||
// Dibuja el efecto de carga en el borde
|
||||
renderBorder();
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "screen.h" // for Screen
|
||||
#include "text.h" // for Text, loadTextFile
|
||||
#include "utils.h" // for getFileName, printWithDots, Color
|
||||
#include "room.h"
|
||||
struct JA_Music_t; // lines 12-12
|
||||
struct JA_Sound_t; // lines 13-13
|
||||
|
||||
@@ -436,7 +437,7 @@ void Resource::renderProgress()
|
||||
SDL_Rect rect_full = {X_PADDING, bar_position, full_bar_width, X_PADDING};
|
||||
surface->fillRect(&rect_full, stringToColor("white"));
|
||||
|
||||
Screen::get()->renderWithoutNotifier();
|
||||
Screen::get()->render();
|
||||
}
|
||||
|
||||
// Comprueba los eventos de la pantalla de carga
|
||||
|
||||
@@ -124,40 +124,22 @@ void Screen::start()
|
||||
setRendererSurface(nullptr);
|
||||
}
|
||||
|
||||
// Prepara para empezar a dibujar en la textura del borde
|
||||
void Screen::startDrawOnBorder()
|
||||
{
|
||||
}
|
||||
|
||||
// Vuelca el contenido del renderizador en pantalla
|
||||
void Screen::render()
|
||||
{
|
||||
// Renderiza sobre game_surface_ los overlays
|
||||
renderNotifications();
|
||||
|
||||
// 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)
|
||||
{
|
||||
gameCanvasToBorderCanvas();
|
||||
setRendererSurface(border_surface_);
|
||||
game_surface_->render(options.video.border.width, options.video.border.height);
|
||||
border_surface_->copyToTexture(renderer_, border_texture_);
|
||||
}
|
||||
|
||||
// Muestra el contenido por pantalla
|
||||
renderPresent();
|
||||
}
|
||||
|
||||
// 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)
|
||||
else
|
||||
{
|
||||
gameCanvasToBorderCanvas();
|
||||
game_surface_->copyToTexture(renderer_, game_texture_);
|
||||
}
|
||||
|
||||
// Muestra el contenido por pantalla
|
||||
@@ -232,11 +214,7 @@ bool Screen::incWindowZoom()
|
||||
void Screen::setBorderColor(Uint8 color)
|
||||
{
|
||||
border_color_ = color;
|
||||
auto temp = SDL_GetRenderTarget(renderer_);
|
||||
SDL_SetRenderTarget(renderer_, border_texture_);
|
||||
SDL_SetRenderDrawColor(renderer_, color, color, color, 0xFF);
|
||||
SDL_RenderClear(renderer_);
|
||||
SDL_SetRenderTarget(renderer_, temp);
|
||||
border_surface_->clear(border_color_);
|
||||
}
|
||||
|
||||
// Cambia el tipo de mezcla
|
||||
@@ -259,15 +237,12 @@ void Screen::toggleBorder()
|
||||
}
|
||||
|
||||
// Dibuja las notificaciones
|
||||
void Screen::renderNotifications() { Notifier::get()->render(); }
|
||||
|
||||
// Copia el gameCanvas en el borderCanvas
|
||||
void Screen::gameCanvasToBorderCanvas()
|
||||
void Screen::renderNotifications()
|
||||
{
|
||||
auto temp = SDL_GetRenderTarget(renderer_);
|
||||
SDL_SetRenderTarget(renderer_, border_texture_);
|
||||
SDL_RenderCopy(renderer_, game_texture_, nullptr, &game_rect_);
|
||||
SDL_SetRenderTarget(renderer_, temp);
|
||||
if (notifications_enabled_)
|
||||
{
|
||||
Notifier::get()->render();
|
||||
}
|
||||
}
|
||||
|
||||
// Muestra el contenido de Screen por pantalla
|
||||
|
||||
@@ -26,28 +26,26 @@ private:
|
||||
static Screen *screen_;
|
||||
|
||||
// Objetos y punteros
|
||||
SDL_Window *window_; // Ventana de la aplicación
|
||||
SDL_Renderer *renderer_; // El renderizador de la ventana
|
||||
SDL_Texture *game_texture_; // Textura donde se dibuja el juego
|
||||
SDL_Texture *border_texture_; // Textura donde se dibuja el borde del juego
|
||||
std::shared_ptr<Surface> game_surface_; // Surface principal para manejar game_surface_data_
|
||||
std::shared_ptr<Surface> border_surface_; // Surface para pintar el el borde de la pantalla
|
||||
SDL_Window *window_; // Ventana de la aplicación
|
||||
SDL_Renderer *renderer_; // El renderizador de la ventana
|
||||
SDL_Texture *game_texture_; // Textura donde se dibuja el juego
|
||||
SDL_Texture *border_texture_; // Textura donde se dibuja el borde del juego
|
||||
std::shared_ptr<Surface> game_surface_; // Surface principal para manejar game_surface_data_
|
||||
std::shared_ptr<Surface> border_surface_; // Surface para pintar el el borde de la pantalla
|
||||
std::shared_ptr<std::shared_ptr<Surface>> renderer_surface_; // Puntero a la Surface que actua
|
||||
|
||||
// Variables
|
||||
int window_width_; // Ancho de la pantalla o ventana
|
||||
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
|
||||
int window_width_; // Ancho de la pantalla o ventana
|
||||
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
|
||||
bool notifications_enabled_ = false; // indica si se muestran las notificaciones
|
||||
|
||||
// Dibuja las notificaciones
|
||||
void renderNotifications();
|
||||
|
||||
// Copia el gameCanvas en el borderCanvas
|
||||
void gameCanvasToBorderCanvas();
|
||||
|
||||
// Muestra el contenido de Screen por pantalla
|
||||
void renderPresent();
|
||||
|
||||
@@ -88,11 +86,9 @@ public:
|
||||
|
||||
// Prepara para empezar a dibujar en la textura de juego
|
||||
void start();
|
||||
void startDrawOnBorder();
|
||||
|
||||
// Vuelca el contenido del renderizador en pantalla
|
||||
void render();
|
||||
void renderWithoutNotifier();
|
||||
|
||||
// Actualiza la lógica de la clase
|
||||
void update();
|
||||
@@ -143,7 +139,11 @@ public:
|
||||
// Getters
|
||||
SDL_Renderer *getRenderer() { return renderer_; }
|
||||
std::shared_ptr<Surface> getRendererSurface() { return (*renderer_surface_); }
|
||||
std::shared_ptr<Surface> getBorderSurface() { return border_surface_; }
|
||||
|
||||
// Cambia la paleta
|
||||
void nextPalette();
|
||||
|
||||
// Establece la visibilidad de las notificaciones
|
||||
void setNotificationsEnabled(bool value) { notifications_enabled_ = value; }
|
||||
};
|
||||
Reference in New Issue
Block a user