mirror of
https://gitlab.com/GaryOderNichts/re3-wiiu.git
synced 2024-11-30 04:54:15 +01:00
107 lines
2.9 KiB
C++
107 lines
2.9 KiB
C++
#pragma once
|
|
#include "Placeable.h"
|
|
#include "AudioManager.h"
|
|
|
|
#define MAX_PARTICLEOBJECTS 100
|
|
#define MAX_AUDIOHYDRANTS 8
|
|
|
|
enum eParticleObjectType
|
|
{
|
|
POBJECT_PAVEMENT_STEAM,
|
|
POBJECT_PAVEMENT_STEAM_SLOWMOTION,
|
|
POBJECT_WALL_STEAM,
|
|
POBJECT_WALL_STEAM_SLOWMOTION,
|
|
POBJECT_DARK_SMOKE,
|
|
POBJECT_FIRE_HYDRANT,
|
|
POBJECT_CAR_WATER_SPLASH,
|
|
POBJECT_PED_WATER_SPLASH,
|
|
POBJECT_SPLASHES_AROUND,
|
|
POBJECT_SMALL_FIRE,
|
|
POBJECT_BIG_FIRE,
|
|
POBJECT_DRY_ICE,
|
|
POBJECT_DRY_ICE_SLOWMOTION,
|
|
POBJECT_FIRE_TRAIL,
|
|
POBJECT_SMOKE_TRAIL,
|
|
POBJECT_FIREBALL_AND_SMOKE,
|
|
POBJECT_ROCKET_TRAIL,
|
|
POBJECT_EXPLOSION_ONCE,
|
|
POBJECT_CATALINAS_GUNFLASH,
|
|
POBJECT_CATALINAS_SHOTGUNFLASH,
|
|
};
|
|
|
|
enum eParticleObjectState
|
|
{
|
|
POBJECTSTATE_INITIALISED = 0,
|
|
POBJECTSTATE_UPDATE_CLOSE,
|
|
POBJECTSTATE_UPDATE_FAR,
|
|
POBJECTSTATE_FREE,
|
|
};
|
|
|
|
enum tParticleType;
|
|
class CParticle;
|
|
|
|
class CParticleObject : public CPlaceable
|
|
{
|
|
public:
|
|
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);
|
|
}; |