group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
TeslaBeamEffect.hpp
Go to the documentation of this file.
1
18
19#pragma once
20
22
23#include <cstdint>
24#include <glm/glm.hpp>
25#include <vector>
26
29{
30public:
39 void drive(uint32_t key, glm::vec3 origin, glm::vec3 target);
40
44 void update(float dt, glm::vec3 camForward);
45
47 [[nodiscard]] const ArcVertex* arcData() const { return arcVerts_.data(); }
48
50 [[nodiscard]] uint32_t arcCount() const { return static_cast<uint32_t>(arcVerts_.size()); }
51
53 [[nodiscard]] uint32_t activeBeamCount() const;
54
55private:
56 static constexpr int k_maxBeams = 4;
57 static constexpr int k_bezierSegs = 28;
58 static constexpr int k_branchSegs = 6;
59 static constexpr int k_maxBranches = 3;
60 static constexpr float k_fadeTime = 0.08f;
61 static constexpr float k_keepAlive = 0.06f;
62 static constexpr float k_bowFrac = 0.16f;
63 static constexpr float k_branchRetime = 0.05f;
64
66 struct Branch
67 {
68 float tStart;
69 float length;
70 float angle;
71 float seed;
72 };
73
75 struct Beam
76 {
77 uint32_t key = 0;
78 bool active = false;
79 glm::vec3 origin{0.0f};
80 glm::vec3 target{0.0f};
81
82 float age = 0.f;
83 float keepAlive = 0.f;
84 float time = 0.f;
85 float seed = 0.f;
86 float warpSeed = 0.f;
87
89 int branchCount = 0;
90 float branchTimer = 0.f;
91 };
92
94 std::vector<ArcVertex> arcVerts_;
95
96 static glm::vec3 evalBezier(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, glm::vec3 p3, float t);
97 static glm::vec3 evalBezierTangent(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, glm::vec3 p3, float t);
98 static void rerandomizeBranches(Beam& beam);
99
101 void appendArcStrip(const std::vector<glm::vec3>& pts, float radius, glm::vec4 color, glm::vec3 camForward);
102
103 Beam* findOrAllocBeam(uint32_t key);
104};
GPU-uploadable particle structs for all effect categories.
Sustained curved energy-arc beams, keyed by owner entity id.
Definition TeslaBeamEffect.hpp:29
static void rerandomizeBranches(Beam &beam)
Definition TeslaBeamEffect.cpp:79
static constexpr int k_branchSegs
Samples along each branch.
Definition TeslaBeamEffect.hpp:58
Beam * findOrAllocBeam(uint32_t key)
Definition TeslaBeamEffect.cpp:132
static constexpr float k_keepAlive
Grace before an undriven beam starts fading.
Definition TeslaBeamEffect.hpp:61
static glm::vec3 evalBezier(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, glm::vec3 p3, float t)
Definition TeslaBeamEffect.cpp:67
uint32_t activeBeamCount() const
Number of beams currently alive.
Definition TeslaBeamEffect.cpp:287
uint32_t arcCount() const
Number of arc vertices generated this frame.
Definition TeslaBeamEffect.hpp:50
static constexpr float k_fadeTime
Fade in/out window (s).
Definition TeslaBeamEffect.hpp:60
void appendArcStrip(const std::vector< glm::vec3 > &pts, float radius, glm::vec4 color, glm::vec3 camForward)
Append a camera-facing triangle-strip ribbon to arcVerts_.
Definition TeslaBeamEffect.cpp:93
void update(float dt, glm::vec3 camForward)
Advance animation, age out undriven beams, and rebuild arc verts.
Definition TeslaBeamEffect.cpp:175
static constexpr int k_maxBeams
Definition TeslaBeamEffect.hpp:56
static glm::vec3 evalBezierTangent(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, glm::vec3 p3, float t)
Definition TeslaBeamEffect.cpp:73
static constexpr int k_bezierSegs
Samples along the main arc.
Definition TeslaBeamEffect.hpp:57
void drive(uint32_t key, glm::vec3 origin, glm::vec3 target)
Refresh (or start) the beam owned by key for this frame.
Definition TeslaBeamEffect.cpp:153
Beam beams_[k_maxBeams]
Definition TeslaBeamEffect.hpp:93
static constexpr float k_bowFrac
Spine sag as a fraction of beam length.
Definition TeslaBeamEffect.hpp:62
const ArcVertex * arcData() const
Arc vertex array for GPU upload (nullptr if empty).
Definition TeslaBeamEffect.hpp:47
static constexpr int k_maxBranches
Definition TeslaBeamEffect.hpp:59
static constexpr float k_branchRetime
Branch re-randomise interval (s).
Definition TeslaBeamEffect.hpp:63
std::vector< ArcVertex > arcVerts_
Definition TeslaBeamEffect.hpp:94
Lightning arc vertex (pre-expanded triangle strip, uploaded as flat stream).
Definition ParticleTypes.hpp:67
State for a single sustained, curved beam.
Definition TeslaBeamEffect.hpp:76
Branch branches[k_maxBranches]
Definition TeslaBeamEffect.hpp:88
glm::vec3 target
Definition TeslaBeamEffect.hpp:80
float keepAlive
Counts down while undriven (drives fade-out).
Definition TeslaBeamEffect.hpp:83
bool active
Definition TeslaBeamEffect.hpp:78
uint32_t key
Definition TeslaBeamEffect.hpp:77
glm::vec3 origin
Definition TeslaBeamEffect.hpp:79
float time
fBm animation clock.
Definition TeslaBeamEffect.hpp:84
float branchTimer
Definition TeslaBeamEffect.hpp:90
int branchCount
Definition TeslaBeamEffect.hpp:89
float warpSeed
Definition TeslaBeamEffect.hpp:86
float age
Time since creation (drives fade-in).
Definition TeslaBeamEffect.hpp:82
float seed
Definition TeslaBeamEffect.hpp:85
One forked branch diverging from the main arc.
Definition TeslaBeamEffect.hpp:67
float seed
Independent fBm seed.
Definition TeslaBeamEffect.hpp:71
float tStart
Position along main arc [0,1].
Definition TeslaBeamEffect.hpp:68
float length
Length as fraction of main bolt length.
Definition TeslaBeamEffect.hpp:69
float angle
Divergence from tangent (radians).
Definition TeslaBeamEffect.hpp:70