diff options
Diffstat (limited to 'src/objects/ParticleObject.h')
-rw-r--r-- | src/objects/ParticleObject.h | 83 |
1 files changed, 76 insertions, 7 deletions
diff --git a/src/objects/ParticleObject.h b/src/objects/ParticleObject.h index 192d3703..a0d99b69 100644 --- a/src/objects/ParticleObject.h +++ b/src/objects/ParticleObject.h @@ -1,6 +1,9 @@ #pragma once - #include "Placeable.h" +#include "AudioManager.h" + +#define MAX_PARTICLEOBJECTS 100 +#define MAX_AUDIOHYDRANTS 8 enum eParticleObjectType { @@ -26,13 +29,79 @@ enum eParticleObjectType POBJECT_CATALINAS_SHOTGUNFLASH, }; +enum eParticleObjectState +{ + POBJECTSTATE_INITIALISED = 0, + POBJECTSTATE_UPDATE_CLOSE, + POBJECTSTATE_UPDATE_FAR, + POBJECTSTATE_FREE, +}; + +enum tParticleType; +class CParticle; + class CParticleObject : CPlaceable { public: - static void AddObject(uint16 type, const CVector &pos, uint8 remove); - static void AddObject(uint16 type, const CVector &pos, float size, uint8 remove); - static void AddObject(uint16 type, const CVector &pos, const CVector &dir, float size, uint8 remove); - static void AddObject(uint16 type, const CVector &pos, const CVector &dir, float size, uint32, const RwRGBA &col, uint8 remove); - static void Initialise(); - static void UpdateAll(); + CParticleObject *m_pNext; + CParticleObject *m_pPrev; + CParticle *m_pParticle; + uint32 m_nRemoveTimer; + eParticleObjectType m_Type; + tParticleType m_ParticleType; + uint8 m_nNumEffectCycles; + uint8 m_nSkipFrames; + uint16 m_nFrameCounter; + uint16 m_nState; + char _pad0[2]; + CVector m_vecTarget; + float m_fRandVal; + float m_fSize; + CRGBA m_Color; + uint8 m_bRemove; + int8 m_nCreationChance; + char _pad1[2]; + + static CParticleObject *&pCloseListHead; + static CParticleObject *&pFarListHead; + static CParticleObject *&pUnusedListHead; + + CParticleObject(); + ~CParticleObject(); + + static void Initialise(void); + + static CParticleObject *AddObject(uint16 type, CVector const &pos, uint8 remove); + static CParticleObject *AddObject(uint16 type, CVector const &pos, float size, uint8 remove); + static CParticleObject *AddObject(uint16 type, CVector const &pos, CVector const &target, float size, uint8 remove); + static CParticleObject *AddObject(uint16 type, CVector const &pos, CVector const &target, float size, uint32 lifeTime, RwRGBA const &color, uint8 remove); + + void RemoveObject(void); + + static void UpdateAll(void); + void UpdateClose(void); + void UpdateFar(void); + + static bool SaveParticle(uint8 *buffer, uint32 *length); + static bool LoadParticle(uint8 *buffer, uint32 length); + + static void RemoveAllParticleObjects(void); + static void MoveToList(CParticleObject **from, CParticleObject **to, CParticleObject *obj); }; + +extern CParticleObject (&gPObjectArray)[MAX_PARTICLEOBJECTS]; + +class CAudioHydrant +{ +public: + int32 AudioEntity; + CParticleObject *pParticleObject; + + CAudioHydrant() : + AudioEntity(AEHANDLE_NONE), + pParticleObject(NULL) + { } + + static bool Add (CParticleObject *particleobject); + static void Remove(CParticleObject *particleobject); +};
\ No newline at end of file |