#pragma once #include "ParticleMgr.h" class CEntity; class CParticle { enum { RAND_TABLE_SIZE = 20, SIN_COS_TABLE_SIZE = 1024 }; public: CVector m_vecPosition; CVector m_vecVelocity; CVector m_vecScreenPosition; UInt32 m_nTimeWhenWillBeDestroyed; UInt32 m_nTimeWhenColorWillBeChanged; Float m_fZGround; CVector m_vecParticleMovementOffset; Int16 m_nCurrentZRotation; UInt16 m_nZRotationTimer; Float m_fCurrentZRadius; UInt16 m_nZRadiusTimer; char _pad0[2]; Float m_fSize; Float m_fExpansionRate; UInt16 m_nFadeToBlackTimer; UInt16 m_nFadeAlphaTimer; UInt8 m_nColorIntensity; UInt8 m_nAlpha; UInt16 m_nCurrentFrame; Int16 m_nAnimationSpeedTimer; Int16 m_nRotationStep; Int16 m_nRotation; RwRGBA m_Color; char _pad1[2]; CParticle *m_pNext; CParticle() { ; } ~CParticle() { ; } //static Float ms_afRandTable[RAND_TABLE_SIZE]; static Float (&ms_afRandTable)[RAND_TABLE_SIZE]; static CParticle *m_pUnusedListHead; /* static Float m_SinTable[SIN_COS_TABLE_SIZE]; static Float m_CosTable[SIN_COS_TABLE_SIZE]; */ static Float (&m_SinTable)[SIN_COS_TABLE_SIZE]; static Float (&m_CosTable)[SIN_COS_TABLE_SIZE]; static void ReloadConfig(); static void Initialise(); static void Shutdown(); static CParticle *AddParticle(tParticleType type, CVector const &vecPos, CVector const &vecDir, CEntity *pEntity = NULL, Float fSize = 0.0f, Int32 nRotationSpeed = 0, Int32 nRotation = 0, Int32 nCurFrame = 0, Int32 nLifeSpan = 0); static CParticle *AddParticle(tParticleType type, CVector const &vecPos, CVector const &vecDir, CEntity *pEntity, Float fSize, RwRGBA const &color, Int32 nRotationSpeed = 0, Int32 nRotation = 0, Int32 nCurFrame = 0, Int32 nLifeSpan = 0); static void Update(); static void Render(); static void RemovePSystem(tParticleType type); static void RemoveParticle(CParticle *pParticle, CParticle *pPrevParticle, tParticleSystemData *pPSystemData); static inline void _Next(CParticle *&pParticle, CParticle *&pPrevParticle, tParticleSystemData *pPSystemData, Bool bRemoveParticle) { if ( bRemoveParticle ) { RemoveParticle(pParticle, pPrevParticle, pPSystemData); if ( pPrevParticle ) pParticle = pPrevParticle->m_pNext; else pParticle = pPSystemData->m_pParticles; } else { pPrevParticle = pParticle; pParticle = pParticle->m_pNext; } } static void AddJetExplosion(CVector const &vecPos, Float fPower, Float fSize); static void AddYardieDoorSmoke(CVector const &vecPos, CMatrix const &matMatrix); }; VALIDATE_SIZE(CParticle, 0x68);