#pragma once #include // Para shared_ptr #include // 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 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 cover_surface_; // Máscara negra que se va haciendo transparente std::vector> reveal_order_; // Orden aleatorio de columnas por fila std::vector 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 };