Files
orni-attack/source/core/graphics/curtain.hpp
T

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