44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
// screen_fade.hpp - Fosa a/desde negre per a transicions d'escena
|
|
// © 2026 JailDesigner
|
|
//
|
|
// Rect negre a pantalla completa amb l'alpha animat linealment. L'escena que el
|
|
// posseeix l'actualitza cada frame i el dibuixa l'ÚLTIM (per damunt de tot). En
|
|
// repòs (default-construït o fosa acabada amb alpha 0) el draw() és un no-op.
|
|
|
|
#pragma once
|
|
|
|
#include "core/rendering/render_context.hpp"
|
|
|
|
namespace Graphics {
|
|
|
|
class ScreenFade {
|
|
public:
|
|
explicit ScreenFade(Rendering::Renderer* renderer);
|
|
|
|
// Arrenca una fosa lineal d'alpha 'from' a 'to' en 'duration' segons.
|
|
void start(float from, float to, float duration);
|
|
|
|
// Avança el temporitzador intern.
|
|
void update(float delta_time);
|
|
|
|
// Dibuixa el rect negre a pantalla completa amb l'alpha actual.
|
|
// No fa res si l'alpha és ~0 (estalvia el pushRect).
|
|
void draw() const;
|
|
|
|
// Cert quan la fosa ha acabat (o no s'ha arrencat mai).
|
|
[[nodiscard]] auto isDone() const -> bool;
|
|
|
|
// Alpha actual ∈ [0, 1].
|
|
[[nodiscard]] auto alpha() const -> float;
|
|
|
|
private:
|
|
Rendering::Renderer* renderer_;
|
|
float from_{0.0F};
|
|
float to_{0.0F};
|
|
float duration_{0.0F};
|
|
float elapsed_{0.0F};
|
|
bool active_{false};
|
|
};
|
|
|
|
} // namespace Graphics
|