JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
ParticleSystem.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <cstdint>
7#include <vector>
8
10#include "Core/Ecs/Entity.h"
11#include "Core/Math/Vector2.h"
12
18
19namespace core {
20
21class World;
22
26inline constexpr std::uint64_t DEFAULT_PARTICLE_SEED = 0x504152544943454CULL;
27
30inline constexpr int MAX_PARTICLES = 256;
31
34inline constexpr float LANDING_MIN_IMPACT_SPEED = 4.0f;
37inline constexpr float LANDING_MAX_IMPACT_SPEED = 14.0f;
39inline constexpr int LANDING_DUST_MIN_COUNT = 3;
41inline constexpr int LANDING_DUST_MAX_COUNT = 10;
42
50 int count = 0;
52 float speedMin = 0.0f;
54 float speedMax = 0.0f;
56 float lifeMin = 0.0f;
58 float lifeMax = 0.0f;
61 float spreadRadians = 0.0f;
62};
63
86public:
88 explicit ParticleSystem(std::uint64_t seed = DEFAULT_PARTICLE_SEED) noexcept;
89
98 void update(World& world, float fixedDelta);
99
115 void spawn(World& world, const ParticleEffect& effect, Vector2 origin, Vector2 direction,
116 ParticleKind kind);
117
130 void emitDashTrail(World& world, Vector2 position, float facing);
131
143 void emitLanding(World& world, Vector2 position, float impactSpeed);
144
148 void emitDeath(World& world, Vector2 position);
149
151 void clear(World& world);
152
154 [[nodiscard]] int aliveCount() const noexcept {
155 return static_cast<int>(_order.size());
156 }
157
158private:
161 [[nodiscard]] Entity reserveSlot(World& world);
162
163 std::uint64_t _baseSeed;
166 std::uint64_t _stepIndex = 0;
169 std::vector<Entity> _order;
170};
171
172} // namespace core
Identifiant d'entité de l'ECS : handle générationnel (index + génération).
Composant de particule visuelle, simulée au pas fixe (LOT-53, EX-REN-008).
Vecteur 2D à composantes flottantes, propre à Core (sans dépendance DirectX).
void update(World &world, float fixedDelta)
Avance toutes les particules vivantes d'un pas fixe.
Definition ParticleSystem.cpp:104
void spawn(World &world, const ParticleEffect &effect, Vector2 origin, Vector2 direction, ParticleKind kind)
Émet les particules d'un effet, à partir d'une origine et d'une direction de base.
Definition ParticleSystem.cpp:55
Entity reserveSlot(World &world)
Réserve l'emplacement d'une nouvelle particule : recycle la plus ancienne (front de _order) si le bud...
Definition ParticleSystem.cpp:42
void emitLanding(World &world, Vector2 position, float impactSpeed)
Bouffée de poussière à l'atterrissage, d'intensité fonction de la vitesse d'impact.
Definition ParticleSystem.cpp:79
ParticleSystem(std::uint64_t seed=DEFAULT_PARTICLE_SEED) noexcept
Definition ParticleSystem.cpp:40
int aliveCount() const noexcept
Definition ParticleSystem.h:154
std::uint64_t _stepIndex
Numéro de pas courant, incrémenté par update() – entre dans la graine de chaque particule émise (core...
Definition ParticleSystem.h:166
void emitDashTrail(World &world, Vector2 position, float facing)
Traînée de dash (émission continue, pas ponctuelle, LOT-53 TACHE-02).
Definition ParticleSystem.cpp:72
void emitDeath(World &world, Vector2 position)
Éclatement à la mort du personnage : rafale en cercle complet.
Definition ParticleSystem.cpp:99
void clear(World &world)
Détruit toutes les particules vivantes (rechargement de niveau, LOT-53 TACHE-02).
Definition ParticleSystem.cpp:123
std::vector< Entity > _order
Entités-particules vivantes, dans leur ordre d'émission (la plus ancienne en tête) : source de vérité...
Definition ParticleSystem.h:169
std::uint64_t _baseSeed
Definition ParticleSystem.h:163
Point d'entrée unique de la simulation : possède les entités, les composants et les systèmes.
Definition World.h:35
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
constexpr int MAX_PARTICLES
Nombre maximal de particules simultanément vivantes (EX-NFR-005) : au-delà, spawn() recycle les plus ...
Definition ParticleSystem.h:30
constexpr float LANDING_MAX_IMPACT_SPEED
Vitesse d'impact au-delà de laquelle l'intensité de la poussière plafonne (LANDING_DUST_MAX_ COUNT) :...
Definition ParticleSystem.h:37
constexpr float LANDING_MIN_IMPACT_SPEED
Vitesse d'impact (LOT-53 TACHE-02) en-dessous de laquelle un atterrissage ne produit aucune poussière...
Definition ParticleSystem.h:34
constexpr int LANDING_DUST_MAX_COUNT
Nombre de particules de poussière au plafond LANDING_MAX_IMPACT_SPEED (intensité maximale).
Definition ParticleSystem.h:41
ParticleKind
Effet visuel à l'origine d'une particule – tag opaque pour Core, exploité par le rendu (HMI) pour cho...
Definition Particle.h:20
constexpr int LANDING_DUST_MIN_COUNT
Nombre de particules de poussière au seuil LANDING_MIN_IMPACT_SPEED (intensité minimale).
Definition ParticleSystem.h:39
constexpr std::uint64_t DEFAULT_PARTICLE_SEED
Graine par défaut de core::ParticleSystem – fixe et documentée, jamais l'horloge système (EX-NFR-002)...
Definition ParticleSystem.h:26
Handle générationnel identifiant une entité de l'ECS.
Definition Entity.h:24
Données décrivant un effet de particules : combien, à quelle vitesse, pendant combien de temps,...
Definition ParticleSystem.h:48
float lifeMin
Durée de vie minimale, en secondes.
Definition ParticleSystem.h:56
float speedMin
Vitesse initiale minimale, en unités monde par seconde.
Definition ParticleSystem.h:52
int count
Nombre de particules émises par appel à ParticleSystem::spawn.
Definition ParticleSystem.h:50
float speedMax
Vitesse initiale maximale (>= speedMin).
Definition ParticleSystem.h:54
float spreadRadians
Demi-angle de dispersion autour de la direction de base, en radians (π = cercle complet,...
Definition ParticleSystem.h:61
float lifeMax
Durée de vie maximale (>= lifeMin).
Definition ParticleSystem.h:58
Vecteur bidimensionnel en coordonnées monde (composantes float).
Definition Vector2.h:21