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

53 lines
1.5 KiB
C++

// border.hpp - Border del playfield amb estat (desplaçaments i flash per impactes)
// © 2026 JailDesigner
//
// Substitueix el `drawMargins()` inline de GameScene. Cada un dels 4 costats
// té estat propi (desplaçament perpendicular outward + intensitat de flash blanc)
// que decau cap a 0. Esdeveniments externs (col·lisions contra els bounds, etc.)
// criden `bumpAt()` per generar reaccions.
#pragma once
#include <array>
#include <cstdint>
#include "core/rendering/render_context.hpp"
#include "core/types.hpp"
namespace Graphics {
class Border {
public:
explicit Border(Rendering::Renderer* renderer);
// Decae desplaçaments i flash cap a 0.
void update(float delta_time);
// Dibuixa els 4 costats amb el seu estat actual.
void draw() const;
// Aplica un bump al costat més proper al punt de contacte.
// strength ∈ [0, 1]; valors superiors es retallen.
void bumpAt(Vec2 contact_point, float strength);
private:
enum : std::uint8_t {
SIDE_TOP = 0,
SIDE_RIGHT = 1,
SIDE_BOTTOM = 2,
SIDE_LEFT = 3,
SIDE_COUNT = 4
};
struct SideState {
float displacement_px{0.0F}; // outward (sempre ≥ 0); el flash es deriva d'aquí
};
void applyBump(int side_idx, float strength);
Rendering::Renderer* renderer_;
std::array<SideState, SIDE_COUNT> sides_{};
};
} // namespace Graphics