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

48 lines
1.6 KiB
C++

// playfield.hpp - Fons del playfield (graella + sub-graella amb animació de creació)
// © 2026 JailDesigner
//
// La graella es construeix una sola vegada al constructor. El draw és stateless:
// rep un `creation_progress` global ∈ [0, 1] i cada línia computa quina porció
// li toca dibuixar segons el seu slot a la timeline.
//
// Disseny preparat per a futures capacitats:
// - Línies "vives" que reaccionen a explosions / pas de la nau (reaction_intensity).
// - Capes addicionals al fons (estrelles, gradients, scanlines).
#pragma once
#include <vector>
#include "core/rendering/render_context.hpp"
#include "core/types.hpp"
namespace Graphics {
class Playfield {
public:
explicit Playfield(Rendering::Renderer* renderer);
// Avança el timer intern de creació.
void update(float delta_time);
// Pinta la graella. La porció dibuixada de cada línia depèn del timer intern.
void draw() const;
private:
struct Line {
Vec2 start; // top (verticals) o left (horitzontals)
Vec2 end; // bottom (verticals) o right (horitzontals)
float brightness; // base (GRID_BRIGHTNESS o SUBGRID_BRIGHTNESS)
float spawn_time_s; // moment de naixement (verticals i horitzontals tenen ritmes independents)
};
void buildLines();
[[nodiscard]] auto computeLineProgress(const Line& line) const -> float;
Rendering::Renderer* renderer_;
std::vector<Line> lines_;
float elapsed_s_{0.0F};
};
} // namespace Graphics