Files
orni-attack/source/core/defaults/effects.hpp
T

88 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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 (radius 20) té halo gros i una bala
// (radius 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"
};
// Glow per a línies "raw" (sense shape). Gruixos absoluts (px), no
// ratios — una línia individual no té bounding radius. Útil per a
// partícules de firework, sparks, etc.
namespace Line {
struct Pass {
float thickness; // px. <0 → usa el thickness passat pel caller (core)
float alpha;
};
constexpr Pass PASSES[] = {
{.thickness = 18.0F, .alpha = 0.10F},
{.thickness = 12.0F, .alpha = 0.20F},
{.thickness = 6.0F, .alpha = 0.40F},
{.thickness = -1.0F, .alpha = 1.0F}, // core: línia "real"
};
} // namespace Line
} // 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