group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
TracerEffect.hpp
Go to the documentation of this file.
1
3
4#pragma once
5
9
10#include <array>
11#include <cstdint>
12#include <glm/glm.hpp>
13#include <unordered_map>
14
20{
21public:
25 void update(float dt, Registry& registry);
26
30 void attach(entt::entity e, Registry& registry);
31
34 void detach(entt::entity e);
35
40 void spawnRifleTracer(glm::vec3 origin, glm::vec3 dir, float range);
41
42 [[nodiscard]] const TracerParticle* data() const { return pool_.rawData(); }
43 [[nodiscard]] uint32_t count() const { return pool_.liveCount(); }
44
45private:
46 static constexpr uint32_t k_maxTracers = 512;
47
48 enum class RuntimeKind : uint8_t
49 {
53 };
54
56 {
58 entt::entity entity = entt::null;
59 glm::vec3 origin{};
60 glm::vec3 dir{0.0f, 0.0f, 1.0f};
61 float distance = 0.0f;
62 float speed = 0.0f;
63 float trailLength = 0.0f;
64 float age = 0.0f;
65 };
66
68 std::array<RuntimeState, k_maxTracers> runtime_{};
69
70 // Maps entity -> index into pool (for fast detach / per-entity update)
71 std::unordered_map<uint32_t, uint32_t> entityToIdx_;
72
73 void killTracer(uint32_t idx);
74 void updateRifleTracer(uint32_t idx, float dt);
75
76 static constexpr float k_streakLength = 200.f;
77 static constexpr float k_fadeTime = 0.15f;
78 static constexpr float k_rifleVisualSpeed = 8000.f;
79 static constexpr float k_rifleTrailLength = 140.f;
80 static constexpr float k_rifleSpawnLead = 75.f;
81 static constexpr float k_rifleRadius = 2.35f;
82};
Fixed-capacity particle pool with O(1) swap-remove.
GPU-uploadable particle structs for all effect categories.
Shared ECS registry type alias for the game engine.
entt::registry Registry
Shared ECS registry type alias.
Definition Registry.hpp:11
Manages oriented-capsule tracers for fast-bullet projectile entities.
Definition TracerEffect.hpp:20
static constexpr float k_streakLength
Visual streak length in world units.
Definition TracerEffect.hpp:76
void updateRifleTracer(uint32_t idx, float dt)
Definition TracerEffect.cpp:115
const TracerParticle * data() const
Definition TracerEffect.hpp:42
void update(float dt, Registry &registry)
Update all live tracers.
Definition TracerEffect.cpp:139
void spawnRifleTracer(glm::vec3 origin, glm::vec3 dir, float range)
Spawn a visual-only rifle bullet that travels along a hitscan path.
Definition TracerEffect.cpp:53
void killTracer(uint32_t idx)
Definition TracerEffect.cpp:98
std::array< RuntimeState, k_maxTracers > runtime_
Definition TracerEffect.hpp:68
ParticlePool< TracerParticle, k_maxTracers > pool_
Definition TracerEffect.hpp:67
void attach(entt::entity e, Registry &registry)
Attach a new tracer to a projectile entity.
Definition TracerEffect.cpp:24
static constexpr uint32_t k_maxTracers
Definition TracerEffect.hpp:46
RuntimeKind
Definition TracerEffect.hpp:49
@ RifleProjectile
Definition TracerEffect.hpp:52
@ Entity
Definition TracerEffect.hpp:51
@ None
Definition TracerEffect.hpp:50
static constexpr float k_rifleSpawnLead
Definition TracerEffect.hpp:80
static constexpr float k_rifleVisualSpeed
Definition TracerEffect.hpp:78
static constexpr float k_fadeTime
Seconds to fade after entity death.
Definition TracerEffect.hpp:77
void detach(entt::entity e)
Detach the tracer from an entity (entity dying); tracer fades out.
Definition TracerEffect.cpp:84
uint32_t count() const
Definition TracerEffect.hpp:43
std::unordered_map< uint32_t, uint32_t > entityToIdx_
Definition TracerEffect.hpp:71
static constexpr float k_rifleTrailLength
Definition TracerEffect.hpp:79
static constexpr float k_rifleRadius
Definition TracerEffect.hpp:81
Fixed-capacity particle pool with O(1) swap-remove.
Definition ParticlePool.hpp:22
Definition TracerEffect.hpp:56
RuntimeKind kind
Definition TracerEffect.hpp:57
entt::entity entity
Definition TracerEffect.hpp:58
float speed
Definition TracerEffect.hpp:62
glm::vec3 origin
Definition TracerEffect.hpp:59
float trailLength
Definition TracerEffect.hpp:63
float distance
Definition TracerEffect.hpp:61
float age
Definition TracerEffect.hpp:64
glm::vec3 dir
Definition TracerEffect.hpp:60
Oriented capsule streak for fast-bullet tracers (R301 style).
Definition ParticleTypes.hpp:32