El responsable de comprobar si se ha pulsado alguna tecla para cambiar el tamaño de la venta, el modo de pantalla completa o la activación de los shaders pasa a ser la clase screen

This commit is contained in:
2024-07-05 14:09:38 +02:00
parent 5e7212dfaa
commit 62f3c42e7b
14 changed files with 209 additions and 187 deletions

View File

@@ -8,13 +8,14 @@
#endif
// Constructor
Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options_t *options)
Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Input *input, options_t *options)
{
// Copia punteros
this->window = window;
this->renderer = renderer;
this->options = options;
this->asset = asset;
this->input = input;
this->options = options;
// Inicializa variables
SDL_GetRendererOutputSize(renderer, &windowWidth, &windowHeight);
@@ -80,7 +81,20 @@ void Screen::blit()
// Atenua la pantalla
doAttenuate();
#ifndef RASPI
#ifdef RASPI
// Vuelve a dejar el renderizador en modo normal
SDL_SetRenderTarget(renderer, nullptr);
// Borra el contenido previo
SDL_SetRenderDrawColor(renderer, borderColor.r, borderColor.g, borderColor.b, 0xFF);
SDL_RenderClear(renderer);
// Copia la textura de juego en el renderizador en la posición adecuada
SDL_RenderCopy(renderer, gameCanvas, nullptr, &dest);
// Muestra por pantalla el renderizador
SDL_RenderPresent(renderer);
#else
if (options->video.shaders)
{
shader::render();
@@ -100,19 +114,6 @@ void Screen::blit()
// Muestra por pantalla el renderizador
SDL_RenderPresent(renderer);
}
#else
// Vuelve a dejar el renderizador en modo normal
SDL_SetRenderTarget(renderer, nullptr);
// Borra el contenido previo
SDL_SetRenderDrawColor(renderer, borderColor.r, borderColor.g, borderColor.b, 0xFF);
SDL_RenderClear(renderer);
// Copia la textura de juego en el renderizador en la posición adecuada
SDL_RenderCopy(renderer, gameCanvas, nullptr, &dest);
// Muestra por pantalla el renderizador
SDL_RenderPresent(renderer);
#endif
}
@@ -200,7 +201,9 @@ void Screen::setVideoMode(int videoMode)
}
}
#ifndef RASPI
#ifdef RASPI
SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight);
#else
// Reinicia los shaders
if (options->video.shaders)
{
@@ -215,8 +218,6 @@ void Screen::setVideoMode(int videoMode)
{
SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight);
}
#else
SDL_RenderSetLogicalSize(renderer, windowWidth, windowHeight);
#endif
// Actualiza las opciones
@@ -369,6 +370,30 @@ void Screen::update()
updateShake();
}
// Comprueba las entradas
void Screen::checkInput()
{
if (input->checkInput(input_window_fullscreen, REPEAT_FALSE))
{
switchVideoMode();
}
else if (input->checkInput(input_window_dec_size, REPEAT_FALSE))
{
decWindowSize();
}
else if (input->checkInput(input_window_inc_size, REPEAT_FALSE))
{
incWindowSize();
}
else if (input->checkInput(input_video_shaders, REPEAT_FALSE))
{
switchShaders();
}
}
// Agita la pantalla
void Screen::shake()
{

View File

@@ -3,6 +3,7 @@
#include <SDL2/SDL.h>
#include "asset.h"
#include "utils.h"
#include "input.h"
#include "../const.h"
#include <vector>
@@ -19,6 +20,7 @@ private:
SDL_Window *window; // Ventana de la aplicación
SDL_Renderer *renderer; // El renderizador de la ventana
Asset *asset; // Objeto con el listado de recursos
Input *input; // Objeto para leer las entradas de teclado o mando
SDL_Texture *gameCanvas; // Textura para completar la ventana de juego hasta la pantalla completa
options_t *options; // Variable con todas las opciones del programa
@@ -81,7 +83,7 @@ private:
public:
// Constructor
Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options_t *options);
Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Input *input, options_t *options);
// Destructor
~Screen();
@@ -89,6 +91,9 @@ public:
// Actualiza la lógica de la clase
void update();
// Comprueba las entradas
void checkInput();
// Limpia la pantalla
void clean(color_t color = {0x00, 0x00, 0x00});