1 #pragma once 2 3 #ifndef PARTICLES_CONTAINER 4 #define PARTICLES_CONTAINER 5 6 #include "tsmartpointer.h" 7 #include "trenderresourcemanager.h" 8 #include "trandom.h" 9 #include "particles.h" 10 11 #include <QThreadStorage> 12 #include <QMutex> 13 14 //----------------------------------------------------------------------- 15 16 // Forward declarations 17 class Particle; 18 class TRandom; 19 20 //----------------------------------------------------------------------- 21 22 class ParticlesManager final : public TRenderResourceManager { 23 T_RENDER_RESOURCE_MANAGER 24 25 public: 26 struct FxData; 27 28 struct FrameData { 29 FxData *m_fxData; 30 double m_frame; 31 TRandom m_random; 32 std::list<Particle> m_particles; 33 bool m_calculated; 34 int m_maxTrail; 35 int m_totalParticles; 36 37 FrameData(FxData *fxData); 38 ~FrameData(); 39 40 void buildMaxTrail(); 41 void clear(); 42 }; 43 44 struct FxData final : public TSmartObject { 45 DECLARE_CLASS_CODE 46 47 QThreadStorage<FrameData *> m_frames; 48 49 FxData(); 50 }; 51 52 public: 53 ParticlesManager(); 54 ~ParticlesManager(); 55 56 static ParticlesManager *instance(); 57 58 FrameData *data(unsigned long fxId); 59 60 private: 61 std::map<unsigned long, FxData *> m_fxs; 62 QMutex m_mutex; 63 64 int m_renderStatus; 65 66 void onRenderStatusStart(int renderStatus) override; 67 }; 68 69 #endif 70