72 lines
2.6 KiB
C++
72 lines
2.6 KiB
C++
// effects.hpp - Constants per a efectes visuals (fireworks, etc.)
|
||
// © 2026 JailDesigner
|
||
|
||
#pragma once
|
||
|
||
#include <SDL3/SDL.h>
|
||
|
||
namespace Defaults::FX::Glow {
|
||
|
||
// Neon glow per outline gruixut, aplicat automàticament per renderShape.
|
||
// Els gruixos d'halo són RÀTIOS del bounding_radius de la shape (escalat
|
||
// per scale), de manera que un pentàgon (radi 20) té halo gros i una bala
|
||
// (radi 3) té halo subtil. El core (últim pass) usa el gruix de línia
|
||
// global (1.5px) — no escala amb la shape.
|
||
//
|
||
// Cap superior: si la shape és molt gran (logos del títol, intro), el
|
||
// bounding_radius es satura a aquest valor — així cap shape té més
|
||
// glow que el pentàgon (referència de gameplay).
|
||
constexpr float MAX_REFERENCE_RADIUS = 20.0F;
|
||
|
||
struct Pass {
|
||
float thickness_ratio; // % del bounding_radius*scale. <0 → usa core (gruix global)
|
||
float alpha;
|
||
};
|
||
constexpr Pass PASSES[] = {
|
||
{.thickness_ratio = 0.55F, .alpha = 0.07F},
|
||
{.thickness_ratio = 0.35F, .alpha = 0.14F},
|
||
{.thickness_ratio = 0.20F, .alpha = 0.28F},
|
||
{.thickness_ratio = -1.0F, .alpha = 1.0F}, // core: línia "real"
|
||
};
|
||
|
||
} // namespace Defaults::FX::Glow
|
||
|
||
namespace Defaults::FX::Firework {
|
||
|
||
// Color per defecte. La caller pot fer override (p.ex. heretar del pare),
|
||
// però per defecte no l'heretem — feel més neutre/lluminós.
|
||
constexpr SDL_Color DEFAULT_COLOR = {.r = 255, .g = 255, .b = 255, .a = 255};
|
||
|
||
// Velocitat inicial radial al spawn (px/s) i variació entre punts.
|
||
constexpr float SPEED = 250.0F;
|
||
constexpr float SPEED_VARIATION = 30.0F; // ±
|
||
|
||
// Quantitat de línies per burst (per defecte).
|
||
constexpr int N_POINTS = 100;
|
||
|
||
// Distribució angular: jitter aleatori sobre el repartiment uniforme.
|
||
constexpr float ANGULAR_JITTER_DEG = 12.0F;
|
||
|
||
// Fase 1 (creixement): la línia neix amb longitud 0 i creix fins a max.
|
||
constexpr float GROW_DURATION = 0.08F; // s
|
||
constexpr float MAX_LENGTH = 25.0F; // px
|
||
|
||
// Fricció lineal (px/s²). Negativa per frenar.
|
||
constexpr float FRICTION = -180.0F;
|
||
|
||
// Llindar de mort: per sota d'aquesta longitud (px) o brillor, la
|
||
// partícula es marca inactiva.
|
||
constexpr float MIN_LENGTH = 0.5F;
|
||
constexpr float MIN_BRIGHTNESS = 0.02F;
|
||
|
||
// Brillor inicial per defecte.
|
||
constexpr float INITIAL_BRIGHTNESS = 1.0F;
|
||
|
||
// Restitució en rebot contra els límits del PLAYAREA (mateix patró que debris).
|
||
constexpr float RESTITUTION_BOUNDS = 0.7F;
|
||
|
||
// Mida del pool. 8 punts × ~25 bursts simultanis.
|
||
constexpr int POOL_SIZE = 2000;
|
||
|
||
} // namespace Defaults::FX::Firework
|