// 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 #include #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 sides_{}; }; } // namespace Graphics