49 lines
1.5 KiB
C++
49 lines
1.5 KiB
C++
// 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
|