mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-07 03:51:50 +00:00
feat: emitters random access & add ParticlesRenderer.gc()
This commit is contained in:
parent
8bfc7983da
commit
0cd5136fdb
3 changed files with 49 additions and 5 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue