// 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