Screen:: shake() ara accepta parametres
Coffee_machine: ara queda millor el efecte de caure i rebotar
This commit is contained in:
@@ -42,13 +42,13 @@ public:
|
|||||||
void initShaders(); // Inicializa los shaders
|
void initShaders(); // Inicializa los shaders
|
||||||
|
|
||||||
// --- Efectos visuales ---
|
// --- Efectos visuales ---
|
||||||
void shake() { shake_effect_.enable(src_rect_, dst_rect_); } // Agita la pantalla
|
void shake(int desp = 2, int delay = 3, int lenght = 8) { shake_effect_.enable(src_rect_, dst_rect_, desp, delay, lenght); } // Agita la pantalla
|
||||||
void flash(Color color, int lenght = 10, int delay = 0) { flash_effect_ = FlashEffect(true, lenght, delay, color); } // Pone la pantalla de color
|
void flash(Color color, int lenght = 10, int delay = 0) { flash_effect_ = FlashEffect(true, lenght, delay, color); } // Pone la pantalla de color
|
||||||
void toggleShaders(); // Alterna entre activar y desactivar los shaders
|
void toggleShaders(); // Alterna entre activar y desactivar los shaders
|
||||||
void toggleIntegerScale(); // Alterna entre activar y desactivar el escalado entero
|
void toggleIntegerScale(); // Alterna entre activar y desactivar el escalado entero
|
||||||
void toggleVSync(); // Alterna entre activar y desactivar el V-Sync
|
void toggleVSync(); // Alterna entre activar y desactivar el V-Sync
|
||||||
void setVSync(bool enabled); // Establece el estado del V-Sync
|
void setVSync(bool enabled); // Establece el estado del V-Sync
|
||||||
void attenuate(bool value) { attenuate_effect_ = value; } // Atenúa la pantalla
|
void attenuate(bool value) { attenuate_effect_ = value; } // Atenúa la pantalla
|
||||||
|
|
||||||
// --- Getters ---
|
// --- Getters ---
|
||||||
SDL_Renderer *getRenderer() { return renderer_; } // Obtiene el renderizador
|
SDL_Renderer *getRenderer() { return renderer_; } // Obtiene el renderizador
|
||||||
@@ -89,13 +89,14 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Efecto de flash en pantalla: pinta la pantalla de un color durante unos frames
|
||||||
struct FlashEffect
|
struct FlashEffect
|
||||||
{
|
{
|
||||||
bool enabled;
|
bool enabled; // Indica si el efecto está activo
|
||||||
int lenght;
|
int lenght; // Duración total del efecto en frames
|
||||||
int delay;
|
int delay; // Retraso antes de mostrar el flash
|
||||||
int counter;
|
int counter; // Contador de frames restantes
|
||||||
Color color;
|
Color color; // Color del flash
|
||||||
|
|
||||||
explicit FlashEffect(bool enabled = false, int lenght = 0, int delay = 0, Color color = Color(0xFF, 0xFF, 0xFF))
|
explicit FlashEffect(bool enabled = false, int lenght = 0, int delay = 0, Color color = Color(0xFF, 0xFF, 0xFF))
|
||||||
: enabled(enabled), lenght(lenght), delay(delay), counter(lenght), color(color) {}
|
: enabled(enabled), lenght(lenght), delay(delay), counter(lenght), color(color) {}
|
||||||
@@ -104,27 +105,38 @@ private:
|
|||||||
bool isRendarable() { return enabled && counter < lenght - delay; }
|
bool isRendarable() { return enabled && counter < lenght - delay; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Efecto de sacudida/agitación de pantalla: mueve la imagen para simular un temblor
|
||||||
struct ShakeEffect
|
struct ShakeEffect
|
||||||
{
|
{
|
||||||
int desp;
|
int desp; // Desplazamiento máximo de la sacudida (en píxeles)
|
||||||
int delay;
|
int delay; // Frames entre cada movimiento de sacudida
|
||||||
int counter;
|
int counter; // Contador de frames para el siguiente movimiento
|
||||||
int lenght;
|
int lenght; // Duración total del efecto en frames
|
||||||
int remaining;
|
int remaining; // Frames restantes de sacudida
|
||||||
int original_pos;
|
int original_pos; // Posición original de la imagen (x)
|
||||||
int original_width;
|
int original_width; // Ancho original de la imagen
|
||||||
bool enabled;
|
bool enabled; // Indica si el efecto está activo
|
||||||
|
|
||||||
explicit ShakeEffect(bool en = false, int dp = 2, int dl = 3, int cnt = 0, int len = 8, int rem = 0, int origPos = 0, int origWidth = 800)
|
explicit ShakeEffect(bool en = false, int dp = 2, int dl = 3, int cnt = 0, int len = 8, int rem = 0, int origPos = 0, int origWidth = 800)
|
||||||
: desp(dp), delay(dl), counter(cnt), lenght(len), remaining(rem), original_pos(origPos), original_width(origWidth), enabled(en) {}
|
: desp(dp), delay(dl), counter(cnt), lenght(len), remaining(rem), original_pos(origPos), original_width(origWidth), enabled(en) {}
|
||||||
|
|
||||||
void enable(SDL_FRect &src_rect, SDL_FRect &dst_rect)
|
// Activa el efecto de sacudida y guarda la posición y tamaño originales
|
||||||
|
void enable(SDL_FRect &src_rect, SDL_FRect &dst_rect, int new_desp = -1, int new_delay = -1, int new_lenght = -1)
|
||||||
{
|
{
|
||||||
if (!enabled)
|
if (!enabled)
|
||||||
{
|
{
|
||||||
enabled = true;
|
enabled = true;
|
||||||
original_pos = src_rect.x;
|
original_pos = src_rect.x;
|
||||||
original_width = src_rect.w;
|
original_width = src_rect.w;
|
||||||
|
|
||||||
|
// Usar nuevos valores si se proporcionan, sino mantener los actuales
|
||||||
|
if (new_desp != -1)
|
||||||
|
desp = new_desp;
|
||||||
|
if (new_delay != -1)
|
||||||
|
delay = new_delay;
|
||||||
|
if (new_lenght != -1)
|
||||||
|
lenght = new_lenght;
|
||||||
|
|
||||||
src_rect.w -= desp;
|
src_rect.w -= desp;
|
||||||
dst_rect.w = src_rect.w;
|
dst_rect.w = src_rect.w;
|
||||||
}
|
}
|
||||||
@@ -132,6 +144,7 @@ private:
|
|||||||
counter = delay;
|
counter = delay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Actualiza el estado del efecto de sacudida
|
||||||
void update(SDL_FRect &src_rect, SDL_FRect &dst_rect)
|
void update(SDL_FRect &src_rect, SDL_FRect &dst_rect)
|
||||||
{
|
{
|
||||||
if (enabled)
|
if (enabled)
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ Game::~Game()
|
|||||||
// [Modo DEMO] Vuelve a activar los sonidos
|
// [Modo DEMO] Vuelve a activar los sonidos
|
||||||
if (demo_.enabled)
|
if (demo_.enabled)
|
||||||
{
|
{
|
||||||
//Audio::get()->enableSound();
|
// Audio::get()->enableSound();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -673,7 +673,7 @@ void Game::updateItems()
|
|||||||
if (item->isOnFloor())
|
if (item->isOnFloor())
|
||||||
{
|
{
|
||||||
Audio::get()->playSound("title.wav");
|
Audio::get()->playSound("title.wav");
|
||||||
screen_->shake();
|
screen_->shake(1, 2, 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1652,7 +1652,7 @@ void Game::initDemo(int player_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Deshabilita los sonidos
|
// Deshabilita los sonidos
|
||||||
//Audio::get()->disableSound();
|
// Audio::get()->disableSound();
|
||||||
|
|
||||||
// Configura los marcadores
|
// Configura los marcadores
|
||||||
scoreboard_->setMode(SCOREBOARD_LEFT_PANEL, ScoreboardMode::DEMO);
|
scoreboard_->setMode(SCOREBOARD_LEFT_PANEL, ScoreboardMode::DEMO);
|
||||||
|
|||||||
Reference in New Issue
Block a user