feat: emitters random access & add ParticlesRenderer.gc()

This commit is contained in:
MihailRis
2024-11-04 14:41:52 +03:00
parent 8bfc7983da
commit 0cd5136fdb
3 changed files with 49 additions and 5 deletions
+15 -2
View File
@@ -5,6 +5,7 @@
#include <unordered_map>
#include "Emitter.hpp"
#include "typedefs.hpp"
class Texture;
class Assets;
@@ -18,9 +19,11 @@ class ParticlesRenderer {
const Assets& assets;
const GraphicsSettings* settings;
std::unordered_map<const Texture*, std::vector<Particle>> particles;
std::vector<std::unique_ptr<Emitter>> emitters;
std::unique_ptr<MainBatch> batch;
std::unordered_map<u64id_t, std::unique_ptr<Emitter>> emitters;
u64id_t nextEmitter = 1;
void renderParticles(const Camera& camera, float delta);
public:
ParticlesRenderer(
@@ -32,7 +35,17 @@ public:
void render(const Camera& camera, float delta);
void add(std::unique_ptr<Emitter> emitter);
u64id_t add(std::unique_ptr<Emitter> emitter);
/// @brief Perform garbage collection (remove extra dead emitters).
/// @note Emitters are deleting without GC when there's no particles with same
/// texture left.
/// @note Currently unused
void gc();
/// @brief Get emitter by UID
/// @return Emitter or nullptr
Emitter* getEmitter(u64id_t id) const;
static size_t visibleParticles;
static size_t aliveEmitters;