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