38 void update(
float dt, glm::vec3 camForward);
45 void spawn(glm::vec3 origin, glm::vec3 hitPos,
WeaponType wt, glm::vec3 camForward);
53 [[nodiscard]] uint32_t
arcCount()
const {
return static_cast<uint32_t
>(arcVerts_.size()); }
61 [[nodiscard]] uint32_t
beamCount()
const {
return 0; }
65 static constexpr int k_maxBeams = 4;
66 static constexpr int k_bezierSegs = 32;
67 static constexpr int k_branchSegs = 7;
68 static constexpr int k_maxBranches = 5;
69 static constexpr float k_beamLifetime = 0.22f;
70 static constexpr float k_interpDuration = 0.08f;
94 glm::vec3 origin, hitPos;
97 glm::vec3 cp1Curr, cp2Curr;
98 glm::vec3 cp1Prev, cp2Prev;
103 float noiseSeed = 0.f;
104 float warpSeed = 0.f;
106 Branch branches[k_maxBranches]{};
108 float branchTimer = 0.f;
109 static constexpr float k_branchRetime = 0.045f;
111 ReturnStroke returnStrokes[3]{};
113 float lifetime = 0.f;
117 BezierBeam beams_[k_maxBeams]{};
118 std::vector<ArcVertex> arcVerts_;
123 static glm::vec3 evalBezier(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, glm::vec3 p3,
float t);
126 static glm::vec3 evalBezierTangent(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, glm::vec3 p3,
float t);
129 static void randomizeCP(glm::vec3 origin, glm::vec3 hitPos, glm::vec3 camForward, glm::vec3& cp1, glm::vec3& cp2);
132 static void rerandomizeBranches(BezierBeam& beam, glm::vec3 camForward);
139 void appendArcStrip(
const std::vector<glm::vec3>& pts,
float radius, glm::vec4 color, glm::vec3 camForward);
GPU-uploadable particle structs for all effect categories.
Projectile component and weapon/surface type enumerations.
WeaponType
Weapon type — determines tracer style, damage, sound, and impact effects.
Definition Projectile.hpp:11
Hitscan energy beam using fBm (fractional Brownian motion) path deviation.
Definition HitscanEffect.hpp:33
const ArcVertex * arcData() const
Get pointer to the arc vertex array for GPU upload.
Definition HitscanEffect.hpp:49
void update(float dt, glm::vec3 camForward)
Update all active beams, rebuilding arc vertex data each frame.
Definition HitscanEffect.cpp:236
uint32_t activeBeamCount() const
Get the number of active beams.
Definition HitscanEffect.cpp:394
uint32_t beamCount() const
Definition HitscanEffect.hpp:61
void spawn(glm::vec3 origin, glm::vec3 hitPos, WeaponType wt, glm::vec3 camForward)
Fire a beam.
Definition HitscanEffect.cpp:189
const HitscanBeam * beamData() const
Definition HitscanEffect.hpp:60
uint32_t arcCount() const
Get the number of arc vertices currently generated.
Definition HitscanEffect.hpp:53
Lightning arc vertex (pre-expanded triangle strip, uploaded as flat stream).
Definition ParticleTypes.hpp:58
Hitscan energy beam (main glowing quad).
Definition ParticleTypes.hpp:46