17#include <glm/vec3.hpp>
56 glm::vec3
tint = {1.0f, 1.0f, 1.0f};
78 return slotIsGrenade == typeIsGrenade;
94 assert(
false &&
"nextGrenadeType called on non-grenade WeaponType");
102 assert(
isGrenadeType(type) &&
"getGrenadeConfig requires a grenade WeaponType");
108 static constexpr std::array<GrenadeConfig, 3> k_grenadeConfigs{{
111 .throwSpeed = 1500.0f,
112 .throwPitchOffset = 0.35f,
113 .throwCooldown = 0.4f,
115 .bounceRestitution = 0.5f,
120 .explosionRadius = 200.0f,
121 .damageFalloffExp = 2.5f,
122 .selfDamageMult = 0.4f,
123 .maxKnockback = 500.0f,
124 .knockbackFalloffExp = 2.0f,
126 .tint = {0.4f, 1.0f, 0.4f},
130 .throwSpeed = 1200.0f,
131 .throwPitchOffset = 0.44f,
132 .throwCooldown = 0.4f,
134 .bounceRestitution = 0.0f,
138 .fireRadius = 250.0f,
139 .fireDuration = 5.0f,
142 .tint = {1.0f, 0.5f, 0.1f},
146 .throwSpeed = 1500.0f,
147 .throwPitchOffset = 0.35f,
148 .throwCooldown = 0.4f,
150 .bounceRestitution = 0.0f,
155 .explosionRadius = 350.0f,
156 .damageFalloffExp = 1.0f,
157 .selfDamageMult = 1.0f,
158 .maxKnockback = 1100.0f,
159 .knockbackFalloffExp = 1.5f,
161 .tint = {0.4f, 0.6f, 1.0f},
165 const std::size_t k_idx =
static_cast<std::size_t
>(type) -
static_cast<std::size_t
>(
WeaponType::HEGrenade);
166 return k_grenadeConfigs[k_idx];
bool isGrenadeType(WeaponType type)
True if type is a grenade (covered by getGrenadeConfig).
Definition GrenadeConfig.hpp:60
WeaponType nextGrenadeType(WeaponType type)
Cycle to the next grenade type. HE → Molotov → Impulse → HE.
Definition GrenadeConfig.hpp:82
const GrenadeConfig & getGrenadeConfig(WeaponType type)
Returns the config for a grenade WeaponType.
Definition GrenadeConfig.hpp:100
bool canAcceptType(WeaponSlot slot, WeaponType type)
Slot/type compatibility predicate for pickups.
Definition GrenadeConfig.hpp:74
GrenadeDetonationKind
How a grenade detonates.
Definition GrenadeConfig.hpp:21
@ FireField
Spawn a FireField entity for damage-over-time (Molotov).
Definition GrenadeConfig.hpp:23
@ Explosion
queueExplosion() with damage + knockback (HE, Impulse).
Definition GrenadeConfig.hpp:22
Weapon state component for armed entities.
WeaponSlot
Identifier for one of the player's weapon slots.
Definition WeaponState.hpp:28
@ GRENADE
Exclusive grenade slot — only accepts grenade types (see canAcceptType).
Definition WeaponState.hpp:31
WeaponType
Weapon type — determines tracer style, damage, sound, and impact effects.
Definition WeaponState.hpp:12
@ Impulse
Sticky 1s fuse, big knockback, no damage (movement tool).
Definition WeaponState.hpp:19
@ HEGrenade
Bouncy grenade with 3s fuse, lethal explosion.
Definition WeaponState.hpp:17
@ Molotov
Impact-detonate, leaves a fire field (damage over time).
Definition WeaponState.hpp:18
Pending explosion to process this tick.
Definition Explosion.hpp:11
A burning area on the ground that damages players standing in it.
Definition FireField.hpp:14
All tuning for one grenade type.
Definition GrenadeConfig.hpp:28
float selfDamageMult
Definition GrenadeConfig.hpp:46
float throwPitchOffset
Upward rotation applied to eye dir (rad, ~20°).
Definition GrenadeConfig.hpp:31
float explosionRadius
Definition GrenadeConfig.hpp:44
float throwCooldown
Min seconds between throws.
Definition GrenadeConfig.hpp:32
float damage
Definition GrenadeConfig.hpp:43
float bounceRestitution
0 = no bounce, 0.5 = lossy, 1.0 = elastic.
Definition GrenadeConfig.hpp:36
glm::vec3 tint
RGB multiplier for projectile rendering.
Definition GrenadeConfig.hpp:56
GrenadeDetonationKind detonation
Definition GrenadeConfig.hpp:41
float maxKnockback
Definition GrenadeConfig.hpp:47
float knockbackFalloffExp
Definition GrenadeConfig.hpp:48
float damageFalloffExp
Definition GrenadeConfig.hpp:45
float fireRadius
Definition GrenadeConfig.hpp:50
float throwSpeed
Initial speed along throw direction (u/s).
Definition GrenadeConfig.hpp:30
float fireDps
Definition GrenadeConfig.hpp:52
bool sticky
If true, freezes velocity on first surface hit.
Definition GrenadeConfig.hpp:37
float maxLifeTime
Hard timeout safety (s).
Definition GrenadeConfig.hpp:38
int modelId
Reuses rocket model for v1.
Definition GrenadeConfig.hpp:55
float fireDuration
Definition GrenadeConfig.hpp:51
float fuseTime
Seconds; <0 means impact-detonate (no fuse).
Definition GrenadeConfig.hpp:35