Añadido efecto de atenuación a la clase screen
Al pausar el juego se atenua la pantalla
This commit is contained in:
@@ -36,6 +36,7 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options
|
|||||||
shakeEffect.lenght = 8;
|
shakeEffect.lenght = 8;
|
||||||
shakeEffect.remaining = 0;
|
shakeEffect.remaining = 0;
|
||||||
shakeEffect.origin = 0;
|
shakeEffect.origin = 0;
|
||||||
|
attenuateEffect = false;
|
||||||
|
|
||||||
iniFade();
|
iniFade();
|
||||||
|
|
||||||
@@ -74,6 +75,9 @@ void Screen::blit()
|
|||||||
// Actualiza y dibuja el efecto de flash en la pantalla
|
// Actualiza y dibuja el efecto de flash en la pantalla
|
||||||
doFlash();
|
doFlash();
|
||||||
|
|
||||||
|
// Atenua la pantalla
|
||||||
|
doAttenuate();
|
||||||
|
|
||||||
if (options->video.shaders)
|
if (options->video.shaders)
|
||||||
{
|
{
|
||||||
shader::render();
|
shader::render();
|
||||||
@@ -402,9 +406,28 @@ void Screen::doFlash()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Atenua la pantalla
|
||||||
|
void Screen::doAttenuate()
|
||||||
|
{
|
||||||
|
if (attenuateEffect)
|
||||||
|
{
|
||||||
|
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
|
||||||
|
SDL_SetRenderTarget(renderer, gameCanvas);
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 64);
|
||||||
|
SDL_RenderFillRect(renderer, nullptr);
|
||||||
|
SDL_SetRenderTarget(renderer, temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Activa/desactiva los shaders
|
// Activa/desactiva los shaders
|
||||||
void Screen::switchShaders()
|
void Screen::switchShaders()
|
||||||
{
|
{
|
||||||
options->video.shaders = !options->video.shaders;
|
options->video.shaders = !options->video.shaders;
|
||||||
setVideoMode(options->video.mode);
|
setVideoMode(options->video.mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Atenua la pantalla
|
||||||
|
void Screen::attenuate(bool value)
|
||||||
|
{
|
||||||
|
attenuateEffect = value;
|
||||||
|
}
|
||||||
@@ -31,6 +31,7 @@ private:
|
|||||||
int borderHeight; // Anltura del borde
|
int borderHeight; // Anltura del borde
|
||||||
SDL_Rect dest; // Coordenadas donde se va a dibujar la textura del juego sobre la pantalla o ventana
|
SDL_Rect dest; // Coordenadas donde se va a dibujar la textura del juego sobre la pantalla o ventana
|
||||||
color_t borderColor; // Color del borde añadido a la textura de juego para rellenar la pantalla
|
color_t borderColor; // Color del borde añadido a la textura de juego para rellenar la pantalla
|
||||||
|
bool attenuateEffect; // Indica si la pantalla ha de estar atenuada
|
||||||
|
|
||||||
struct effect_t
|
struct effect_t
|
||||||
{
|
{
|
||||||
@@ -75,6 +76,9 @@ private:
|
|||||||
// Actualiza y dibuja el efecto de flash en la pantalla
|
// Actualiza y dibuja el efecto de flash en la pantalla
|
||||||
void doFlash();
|
void doFlash();
|
||||||
|
|
||||||
|
// Atenua la pantalla
|
||||||
|
void doAttenuate();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options_t *options);
|
Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options_t *options);
|
||||||
@@ -139,6 +143,9 @@ public:
|
|||||||
|
|
||||||
// Activa/desactiva los shaders
|
// Activa/desactiva los shaders
|
||||||
void switchShaders();
|
void switchShaders();
|
||||||
|
|
||||||
|
// Atenua la pantalla
|
||||||
|
void attenuate(bool value);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -2744,7 +2744,7 @@ void Game::checkGameInput()
|
|||||||
|
|
||||||
else if (input->checkInput(input_pause, REPEAT_FALSE))
|
else if (input->checkInput(input_pause, REPEAT_FALSE))
|
||||||
{
|
{
|
||||||
paused = !paused;
|
pause(!paused);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE))
|
else if (input->checkInput(input_window_fullscreen, REPEAT_FALSE))
|
||||||
@@ -3241,12 +3241,12 @@ void Game::checkEvents()
|
|||||||
{
|
{
|
||||||
if (eventHandler->window.event == SDL_WINDOWEVENT_FOCUS_LOST)
|
if (eventHandler->window.event == SDL_WINDOWEVENT_FOCUS_LOST)
|
||||||
{
|
{
|
||||||
paused = true;
|
pause(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eventHandler->window.event == SDL_WINDOWEVENT_FOCUS_GAINED)
|
if (eventHandler->window.event == SDL_WINDOWEVENT_FOCUS_GAINED)
|
||||||
{
|
{
|
||||||
paused = false;
|
pause(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3353,3 +3353,10 @@ void Game::updateScoreboard()
|
|||||||
scoreboard->setHiScore(hiScore);
|
scoreboard->setHiScore(hiScore);
|
||||||
scoreboard->setHiScoreName(hiScoreName);
|
scoreboard->setHiScoreName(hiScoreName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pausa el juego
|
||||||
|
void Game::pause(bool value)
|
||||||
|
{
|
||||||
|
paused = value;
|
||||||
|
screen->attenuate(paused);
|
||||||
|
}
|
||||||
@@ -468,6 +468,9 @@ private:
|
|||||||
// Dibuja los elementos de la zona de juego en su textura
|
// Dibuja los elementos de la zona de juego en su textura
|
||||||
void fillCanvas();
|
void fillCanvas();
|
||||||
|
|
||||||
|
// Pausa el juego
|
||||||
|
void pause(bool value);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, param_t *param, options_t *options, section_t *section);
|
Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, param_t *param, options_t *options, section_t *section);
|
||||||
|
|||||||
Reference in New Issue
Block a user