Movidos los efectos shake y flash de la clase game a la clase screen
This commit is contained in:
@@ -20,20 +20,20 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, options
|
||||
borderHeight = options->video.border.height * 2;
|
||||
dest = {0, 0, 0, 0};
|
||||
borderColor = {0, 0, 0};
|
||||
fade.enabled = false;
|
||||
fade.counter = 0;
|
||||
fade.lenght = 0;
|
||||
fade.color = {0xFF, 0xFF, 0xFF};
|
||||
flash.enabled = false;
|
||||
flash.counter = 0;
|
||||
flash.lenght = 0;
|
||||
flash.color = {0xFF, 0xFF, 0xFF};
|
||||
shake.desp = 1;
|
||||
shake.delay = 3;
|
||||
shake.counter = 0;
|
||||
shake.lenght = 8;
|
||||
shake.remaining = 0;
|
||||
shake.origin = 0;
|
||||
fadeEffect.enabled = false;
|
||||
fadeEffect.counter = 0;
|
||||
fadeEffect.lenght = 0;
|
||||
fadeEffect.color = {0xFF, 0xFF, 0xFF};
|
||||
flashEffect.enabled = false;
|
||||
flashEffect.counter = 0;
|
||||
flashEffect.lenght = 0;
|
||||
flashEffect.color = {0xFF, 0xFF, 0xFF};
|
||||
shakeEffect.desp = 1;
|
||||
shakeEffect.delay = 3;
|
||||
shakeEffect.counter = 0;
|
||||
shakeEffect.lenght = 8;
|
||||
shakeEffect.remaining = 0;
|
||||
shakeEffect.origin = 0;
|
||||
|
||||
iniFade();
|
||||
|
||||
@@ -178,8 +178,8 @@ void Screen::setVideoMode(int videoMode)
|
||||
options->video.window.width = windowWidth;
|
||||
options->video.window.height = windowHeight;
|
||||
|
||||
// Recalcula los valores de los efectos
|
||||
setShake();
|
||||
// Actualiza variables
|
||||
shakeEffect.origin = dest.x;
|
||||
}
|
||||
|
||||
// Camibia entre pantalla completa y ventana
|
||||
@@ -252,13 +252,13 @@ void Screen::switchBorder()
|
||||
// Activa el fade
|
||||
void Screen::setFade()
|
||||
{
|
||||
fade.enabled = true;
|
||||
fadeEffect.enabled = true;
|
||||
}
|
||||
|
||||
// Comprueba si ha terminado el fade
|
||||
bool Screen::fadeEnded()
|
||||
{
|
||||
if (fade.enabled || fade.counter > 0)
|
||||
if (fadeEffect.enabled || fadeEffect.counter > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -269,21 +269,21 @@ bool Screen::fadeEnded()
|
||||
// Inicializa las variables para el fade
|
||||
void Screen::iniFade()
|
||||
{
|
||||
fade.enabled = false;
|
||||
fade.counter = 0;
|
||||
fade.lenght = 200;
|
||||
fadeEffect.enabled = false;
|
||||
fadeEffect.counter = 0;
|
||||
fadeEffect.lenght = 200;
|
||||
}
|
||||
|
||||
// Actualiza el fade
|
||||
void Screen::updateFade()
|
||||
{
|
||||
if (!fade.enabled)
|
||||
if (!fadeEffect.enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
fade.counter++;
|
||||
if (fade.counter > fade.lenght)
|
||||
fadeEffect.counter++;
|
||||
if (fadeEffect.counter > fadeEffect.lenght)
|
||||
{
|
||||
iniFade();
|
||||
}
|
||||
@@ -292,14 +292,14 @@ void Screen::updateFade()
|
||||
// Dibuja el fade
|
||||
void Screen::renderFade()
|
||||
{
|
||||
if (!fade.enabled)
|
||||
if (!fadeEffect.enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const SDL_Rect rect = {0, 0, gameCanvasWidth, gameCanvasHeight};
|
||||
color_t color = {0, 0, 0};
|
||||
const float step = (float)fade.counter / (float)fade.lenght;
|
||||
const float step = (float)fadeEffect.counter / (float)fadeEffect.lenght;
|
||||
const int alpha = 0 + (255 - 0) * step;
|
||||
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, alpha);
|
||||
SDL_RenderFillRect(renderer, &rect);
|
||||
@@ -325,65 +325,65 @@ void Screen::update()
|
||||
}
|
||||
|
||||
// Agita la pantalla
|
||||
void Screen::setShake()
|
||||
void Screen::shake()
|
||||
{
|
||||
shake.remaining = shake.lenght;
|
||||
shake.counter = shake.delay;
|
||||
shake.origin = dest.x;
|
||||
shakeEffect.remaining = shakeEffect.lenght;
|
||||
shakeEffect.counter = shakeEffect.delay;
|
||||
shakeEffect.origin = dest.x;
|
||||
}
|
||||
|
||||
// Actualiza la logica para agitar la pantalla
|
||||
void Screen::updateShake()
|
||||
{
|
||||
if (shake.remaining > 0)
|
||||
if (shakeEffect.remaining > 0)
|
||||
{
|
||||
if (shake.counter > 0)
|
||||
if (shakeEffect.counter > 0)
|
||||
{
|
||||
shake.counter--;
|
||||
shakeEffect.counter--;
|
||||
}
|
||||
else
|
||||
{
|
||||
shake.counter = shake.delay;
|
||||
const int desp = shake.remaining % 2 == 0 ? shake.desp * (-1) : shake.desp;
|
||||
dest.x = shake.origin + desp;
|
||||
shake.remaining--;
|
||||
shakeEffect.counter = shakeEffect.delay;
|
||||
const int desp = shakeEffect.remaining % 2 == 0 ? shakeEffect.desp * (-1) : shakeEffect.desp;
|
||||
dest.x = shakeEffect.origin + desp;
|
||||
shakeEffect.remaining--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dest.x = shake.origin;
|
||||
dest.x = shakeEffect.origin;
|
||||
}
|
||||
}
|
||||
|
||||
// Pone la pantalla de color
|
||||
void Screen::setFlash(color_t color, int lenght)
|
||||
void Screen::flash(color_t color, int lenght)
|
||||
{
|
||||
flash.enabled = true;
|
||||
flash.counter = 0;
|
||||
flash.lenght = lenght;
|
||||
flash.color = color;
|
||||
flashEffect.enabled = true;
|
||||
flashEffect.counter = 0;
|
||||
flashEffect.lenght = lenght;
|
||||
flashEffect.color = color;
|
||||
}
|
||||
|
||||
// Actualiza y dibuja el efecto de flash en la pantalla
|
||||
void Screen::doFlash()
|
||||
{
|
||||
if (flash.enabled)
|
||||
if (flashEffect.enabled)
|
||||
{
|
||||
// Dibuja el color del flash en la textura
|
||||
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
|
||||
SDL_SetRenderTarget(renderer, gameCanvas);
|
||||
SDL_SetRenderDrawColor(renderer, flash.color.r, flash.color.g, flash.color.b, 0xFF);
|
||||
SDL_SetRenderDrawColor(renderer, flashEffect.color.r, flashEffect.color.g, flashEffect.color.b, 0xFF);
|
||||
SDL_RenderClear(renderer);
|
||||
SDL_SetRenderTarget(renderer, temp);
|
||||
|
||||
// Actualiza la lógica del efecto
|
||||
if (flash.counter < flash.lenght)
|
||||
if (flashEffect.counter < flashEffect.lenght)
|
||||
{
|
||||
flash.counter++;
|
||||
flashEffect.counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
flash.enabled = false;
|
||||
flashEffect.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user