feat(playfield): refactor a Playfield amb animació de creació durant l'INIT_HUD
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
// 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)
|
||||
int slot; // posició a la timeline 0..total_slots-1
|
||||
};
|
||||
|
||||
void buildLines();
|
||||
[[nodiscard]] auto computeLineProgress(int slot) const -> float;
|
||||
|
||||
Rendering::Renderer* renderer_;
|
||||
std::vector<Line> lines_; // verticals primer (ordenats per x), després horitzontals (ordenats per y)
|
||||
int total_slots_{0};
|
||||
float spawn_interval_s_{0.0F}; // calculat a buildLines() perquè la última línia acabi a TOTAL_ANIMATION_DURATION_S
|
||||
float elapsed_s_{0.0F};
|
||||
};
|
||||
|
||||
} // namespace Graphics
|
||||
Reference in New Issue
Block a user