#pragma once //------------------------------------------------------------------ // Iwa_ParticlesManager for Marnie // based on ParticlesManager by Digital Video //------------------------------------------------------------------ #ifndef IWA_PARTICLES_CONTAINER #define IWA_PARTICLES_CONTAINER #include "tsmartpointer.h" #include "trenderresourcemanager.h" #include "trandom.h" #include "iwa_particles.h" #include #include //----------------------------------------------------------------------- // Forward declarations class Iwa_Particle; class TRandom; #include "iwa_particlesengine.h" //----------------------------------------------------------------------- class Iwa_ParticlesManager final : public TRenderResourceManager { T_RENDER_RESOURCE_MANAGER public: struct FxData; struct FrameData { FxData *m_fxData; double m_frame; TRandom m_random; std::list m_particles; bool m_calculated; int m_maxTrail; int m_totalParticles; /*- しきつめ情報 -*/ QList m_particleOrigins; FrameData(FxData *fxData); ~FrameData(); void buildMaxTrail(); void clear(); }; struct FxData final : public TSmartObject { DECLARE_CLASS_CODE QThreadStorage m_frames; FxData(); }; public: Iwa_ParticlesManager(); ~Iwa_ParticlesManager(); static Iwa_ParticlesManager *instance(); FrameData *data(unsigned long fxId); bool isCached(unsigned long fxId); private: std::map m_fxs; QMutex m_mutex; int m_renderStatus; void onRenderStatusStart(int renderStatus) override; }; #endif