diff --git a/source/screen.h b/source/screen.h index a001d30..dffce5c 100644 --- a/source/screen.h +++ b/source/screen.h @@ -42,13 +42,13 @@ public: void initShaders(); // Inicializa los shaders // --- Efectos visuales --- - void shake() { shake_effect_.enable(src_rect_, dst_rect_); } // 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 toggleShaders(); // Alterna entre activar y desactivar los shaders - void toggleIntegerScale(); // Alterna entre activar y desactivar el escalado entero - void toggleVSync(); // Alterna entre activar y desactivar el V-Sync - void setVSync(bool enabled); // Establece el estado del V-Sync - void attenuate(bool value) { attenuate_effect_ = value; } // Atenúa 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 toggleShaders(); // Alterna entre activar y desactivar los shaders + void toggleIntegerScale(); // Alterna entre activar y desactivar el escalado entero + void toggleVSync(); // Alterna entre activar y desactivar el V-Sync + void setVSync(bool enabled); // Establece el estado del V-Sync + void attenuate(bool value) { attenuate_effect_ = value; } // Atenúa la pantalla // --- Getters --- 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 { - bool enabled; - int lenght; - int delay; - int counter; - Color color; + bool enabled; // Indica si el efecto está activo + int lenght; // Duración total del efecto en frames + int delay; // Retraso antes de mostrar el flash + int counter; // Contador de frames restantes + Color color; // Color del flash 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) {} @@ -104,27 +105,38 @@ private: bool isRendarable() { return enabled && counter < lenght - delay; } }; + // Efecto de sacudida/agitación de pantalla: mueve la imagen para simular un temblor struct ShakeEffect { - int desp; - int delay; - int counter; - int lenght; - int remaining; - int original_pos; - int original_width; - bool enabled; + int desp; // Desplazamiento máximo de la sacudida (en píxeles) + int delay; // Frames entre cada movimiento de sacudida + int counter; // Contador de frames para el siguiente movimiento + int lenght; // Duración total del efecto en frames + int remaining; // Frames restantes de sacudida + int original_pos; // Posición original de la imagen (x) + int original_width; // Ancho original de la imagen + 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) : 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) { enabled = true; original_pos = src_rect.x; 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; dst_rect.w = src_rect.w; } @@ -132,6 +144,7 @@ private: counter = delay; } + // Actualiza el estado del efecto de sacudida void update(SDL_FRect &src_rect, SDL_FRect &dst_rect) { if (enabled) diff --git a/source/sections/game.cpp b/source/sections/game.cpp index 888e6c3..b0dec14 100644 --- a/source/sections/game.cpp +++ b/source/sections/game.cpp @@ -102,7 +102,7 @@ Game::~Game() // [Modo DEMO] Vuelve a activar los sonidos if (demo_.enabled) { - //Audio::get()->enableSound(); + // Audio::get()->enableSound(); } else { @@ -673,7 +673,7 @@ void Game::updateItems() if (item->isOnFloor()) { 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 - //Audio::get()->disableSound(); + // Audio::get()->disableSound(); // Configura los marcadores scoreboard_->setMode(SCOREBOARD_LEFT_PANEL, ScoreboardMode::DEMO);