37 lines
1.4 KiB
C++
37 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <memory> // Para shared_ptr
|
|
#include <vector> // Para vector
|
|
|
|
class Surface;
|
|
|
|
// Efecto de revelado pixel a pixel por filas, de arriba a abajo.
|
|
// Cada fila se revela en num_steps pasos, con píxeles aleatorios en cada paso.
|
|
class PixelReveal {
|
|
public:
|
|
// Constructor
|
|
PixelReveal(int width, int height, float pixels_per_second, float step_duration, int num_steps = 4);
|
|
|
|
// Destructor definido en el .cpp para que unique_ptr<Surface> funcione con forward declaration
|
|
~PixelReveal();
|
|
|
|
// Actualiza el estado del revelado según el tiempo transcurrido
|
|
void update(float time_active);
|
|
|
|
// Dibuja la máscara de revelado en la posición indicada
|
|
void render(int dst_x, int dst_y) const;
|
|
|
|
// Indica si el revelado ha completado todas las filas
|
|
[[nodiscard]] bool isComplete() const;
|
|
|
|
private:
|
|
std::shared_ptr<Surface> cover_surface_; // Máscara negra que se va haciendo transparente
|
|
std::vector<std::vector<int>> reveal_order_; // Orden aleatorio de columnas por fila
|
|
std::vector<int> row_step_; // Paso actual de revelado por fila (0..num_steps_)
|
|
int width_;
|
|
int height_;
|
|
float pixels_per_second_; // Filas reveladas por segundo
|
|
float step_duration_; // Segundos por paso dentro de una fila
|
|
int num_steps_; // Número de pasos de revelado por fila
|
|
};
|