// curtain.hpp - Cortinilla negra per a transicions d'escena // © 2026 JailDesigner // // Tela negra a pantalla completa que es mou SEMPRE cap avall: // - cover(): cau des de dalt fins a tapar-ho tot (queda negre). // - reveal(): segueix caient i surt per baix, deixant veure l'escena. // Una escena la posseeix, l'actualitza cada frame i la dibuixa l'ÚLTIM (per // damunt de tot). En repòs (no arrencada o reveal acabada) el draw() és no-op. #pragma once #include "core/rendering/render_context.hpp" namespace Graphics { class Curtain { public: explicit Curtain(Rendering::Renderer* renderer); // Tela que cau des de dalt fins a tapar tota la pantalla en 'duration' s. void cover(float duration); // Tela que segueix caient i surt per baix (destapa) en 'duration' s. void reveal(float duration); // Avança el temporitzador intern. void update(float delta_time); // Dibuixa la tela negra a la seva posició vertical actual. No-op si no // queda res visible. void draw() const; // Cert quan el moviment actual ha acabat (o no s'ha arrencat mai). [[nodiscard]] auto isDone() const -> bool; private: // Posició actual del caire superior de la tela (píxels lògics). [[nodiscard]] auto topY() const -> float; Rendering::Renderer* renderer_; float from_{0.0F}; float to_{0.0F}; float duration_{0.0F}; float elapsed_{0.0F}; bool active_{false}; }; } // namespace Graphics