mirror of
https://git.rip/DMCA_FUCKER/re3.git
synced 2024-11-05 10:35:54 +00:00
miami pobj
This commit is contained in:
parent
6cf698badd
commit
d4004805f5
|
@ -591,7 +591,8 @@ void CGame::ShutDownForRestart(void)
|
|||
CStreaming::ms_disableStreaming = false;
|
||||
CRadar::RemoveRadarSections();
|
||||
FrontEndMenuManager.UnloadTextures();
|
||||
CParticleObject::RemoveAllParticleObjects();
|
||||
CParticleObject::RemoveAllExpireableParticleObjects();
|
||||
//CWaterCreatures::RemoveAll(); //TODO VC
|
||||
CSetPieces::Init();
|
||||
CPedType::Shutdown();
|
||||
CSpecialFX::Shutdown();
|
||||
|
|
|
@ -686,15 +686,12 @@ CEntity::AddSteamsFromGround(CVector *unused)
|
|||
case 4:
|
||||
CParticleObject::AddObject(POBJECT_DARK_SMOKE, pos, effect->particle.dir, effect->particle.scale, false);
|
||||
break;
|
||||
// TODO(MIAMI): enable this once we have the particle objects
|
||||
/*
|
||||
case 5:
|
||||
CParticleObject::AddObject(POBJECT_WATER_FOUNTAIN_VERT, pos, effect->particle.dir, effect->particle.scale, false);
|
||||
break;
|
||||
case 6:
|
||||
CParticleObject::AddObject(POBJECT_WATER_FOUNTAIN_HORIZ, pos, effect->particle.dir, effect->particle.scale, false);
|
||||
break;
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -162,226 +162,240 @@ CParticleObject::AddObject(uint16 type, CVector const &pos, CVector const &targe
|
|||
pobj->m_fSize = size;
|
||||
pobj->m_fRandVal = 0.0f;
|
||||
|
||||
if ( type <= POBJECT_CATALINAS_SHOTGUNFLASH )
|
||||
switch ( type )
|
||||
{
|
||||
switch ( type )
|
||||
case POBJECT_PAVEMENT_STEAM:
|
||||
{
|
||||
case POBJECT_PAVEMENT_STEAM:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
#ifdef PC_PARTICLE
|
||||
pobj->m_nSkipFrames = 3;
|
||||
#else
|
||||
pobj->m_nSkipFrames = 1;
|
||||
#endif
|
||||
pobj->m_nCreationChance = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_PAVEMENT_STEAM_SLOWMOTION:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY_SLOWMOTION;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_WALL_STEAM:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
#ifdef PC_PARTICLE
|
||||
pobj->m_nSkipFrames = 3;
|
||||
#else
|
||||
pobj->m_nSkipFrames = 1;
|
||||
#endif
|
||||
pobj->m_nCreationChance = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_WALL_STEAM_SLOWMOTION:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY_SLOWMOTION;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_DARK_SMOKE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
#ifdef PC_PARTICLE
|
||||
pobj->m_nSkipFrames = 3;
|
||||
#else
|
||||
pobj->m_nSkipFrames = 1;
|
||||
#endif
|
||||
pobj->m_nCreationChance = 8;
|
||||
pobj->m_Color = CRGBA(16, 16, 16, 255);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_FIRE_HYDRANT:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_WATER_HYDRANT;
|
||||
pobj->m_nNumEffectCycles = 4;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.3f);
|
||||
pobj->m_nRemoveTimer = CTimer::GetTimeInMilliseconds() + 5000;
|
||||
CAudioHydrant::Add(pobj);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_CAR_WATER_SPLASH:
|
||||
case POBJECT_PED_WATER_SPLASH:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_CAR_SPLASH;
|
||||
pobj->m_nNumEffectCycles = 0;
|
||||
#ifdef PC_PARTICLE
|
||||
pobj->m_nSkipFrames = 1;
|
||||
#else
|
||||
pobj->m_nSkipFrames = 3;
|
||||
#endif
|
||||
pobj->m_nCreationChance = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_SPLASHES_AROUND:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_SPLASH;
|
||||
#ifdef PC_PARTICLE
|
||||
pobj->m_nNumEffectCycles = 15;
|
||||
#else
|
||||
pobj->m_nNumEffectCycles = 30;
|
||||
#endif
|
||||
pobj->m_nSkipFrames = 2;
|
||||
pobj->m_nCreationChance = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_SMALL_FIRE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FLAME;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
#ifdef PC_PARTICLE
|
||||
pobj->m_nSkipFrames = 2;
|
||||
#else
|
||||
pobj->m_nSkipFrames = 1;
|
||||
#endif
|
||||
pobj->m_nCreationChance = 2;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_BIG_FIRE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FLAME;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
#ifdef PC_PARTICLE
|
||||
pobj->m_nSkipFrames = 2;
|
||||
#else
|
||||
pobj->m_nSkipFrames = 1;
|
||||
#endif
|
||||
pobj->m_nCreationChance = 4;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_DRY_ICE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_SMOKE;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_DRY_ICE_SLOWMOTION:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_SMOKE_SLOWMOTION;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_FIRE_TRAIL:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_EXPLOSION_MEDIUM;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
#ifdef PC_PARTICLE
|
||||
pobj->m_nSkipFrames = 3;
|
||||
#else
|
||||
pobj->m_nSkipFrames = 1;
|
||||
#endif
|
||||
pobj->m_nCreationChance = 2;
|
||||
pobj->m_fRandVal = 0.01f;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_SMOKE_TRAIL:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FIREBALL_SMOKE;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 2;
|
||||
pobj->m_fRandVal = 0.02f;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_FIREBALL_AND_SMOKE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FLAME;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 2;
|
||||
pobj->m_fRandVal = 0.1f;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_ROCKET_TRAIL:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FLAME;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 2;
|
||||
pobj->m_nCreationChance = 8;
|
||||
pobj->m_fRandVal = 0.1f;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_EXPLOSION_ONCE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_EXPLOSION_LARGE;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_nRemoveTimer = CTimer::GetTimeInMilliseconds();
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_CATALINAS_GUNFLASH:
|
||||
case POBJECT_CATALINAS_SHOTGUNFLASH:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_GUNFLASH_NOANIM;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_nRemoveTimer = CTimer::GetTimeInMilliseconds();
|
||||
pobj->m_vecTarget.Normalise();
|
||||
break;
|
||||
}
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 3;
|
||||
pobj->m_nCreationChance = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_PAVEMENT_STEAM_SLOWMOTION:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY_SLOWMOTION;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_WALL_STEAM:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 3;
|
||||
pobj->m_nCreationChance = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_WALL_STEAM_SLOWMOTION:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY_SLOWMOTION;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_DARK_SMOKE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_STEAM_NY;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 3;
|
||||
pobj->m_nCreationChance = 8;
|
||||
pobj->m_Color = CRGBA(16, 16, 16, 255);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_WATER_FOUNTAIN_VERT:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_WATER_HYDRANT;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.1f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_WATER_FOUNTAIN_HORIZ:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_WATER_HYDRANT;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_FIRE_HYDRANT:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_WATER_HYDRANT;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.3f);
|
||||
pobj->m_nRemoveTimer = CTimer::GetTimeInMilliseconds() + 5000;
|
||||
CAudioHydrant::Add(pobj);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_CAR_WATER_SPLASH:
|
||||
case POBJECT_PED_WATER_SPLASH:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_CAR_SPLASH;
|
||||
pobj->m_nNumEffectCycles = 0;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_SPLASHES_AROUND:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_SPLASH;
|
||||
pobj->m_nNumEffectCycles = 15;
|
||||
pobj->m_nSkipFrames = 2;
|
||||
pobj->m_nCreationChance = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_SMALL_FIRE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FLAME;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 2;
|
||||
pobj->m_nCreationChance = 2;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_BIG_FIRE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FLAME;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 2;
|
||||
pobj->m_nCreationChance = 4;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_DRY_ICE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_SMOKE;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_DRY_ICE_SLOWMOTION:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_SMOKE_SLOWMOTION;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_vecTarget = CVector(0.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_FIRE_TRAIL:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_EXPLOSION_MEDIUM;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 3;
|
||||
pobj->m_nCreationChance = 2;
|
||||
pobj->m_fRandVal = 0.01f;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_SMOKE_TRAIL:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FIREBALL_SMOKE;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 2;
|
||||
pobj->m_fRandVal = 0.02f;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_FIREBALL_AND_SMOKE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FLAME;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_fRandVal = 0.1f;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_ROCKET_TRAIL:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_FLAME;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 2;
|
||||
pobj->m_nCreationChance = 8;
|
||||
pobj->m_fRandVal = 0.1f;
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_EXPLOSION_ONCE:
|
||||
{
|
||||
pobj->m_ParticleType = PARTICLE_EXPLOSION_LARGE;
|
||||
pobj->m_nNumEffectCycles = 1;
|
||||
pobj->m_nSkipFrames = 1;
|
||||
pobj->m_nCreationChance = 0;
|
||||
pobj->m_nRemoveTimer = CTimer::GetTimeInMilliseconds();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return pobj;
|
||||
}
|
||||
|
||||
CParticleObject *
|
||||
CParticleObject::AddObject(tParticleType type, CVector const &pos, CVector const &target, float size, uint32 lifeTime, uint8 numEffectCycles, uint8 skipFrames, uint16 creationChance, uint8 remove)
|
||||
{
|
||||
CParticleObject *pobj = pUnusedListHead;
|
||||
|
||||
ASSERT(pobj != NULL);
|
||||
|
||||
if ( pobj == NULL )
|
||||
{
|
||||
printf("Error: No particle objects available!\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
MoveToList(&pUnusedListHead, &pCloseListHead, pobj);
|
||||
|
||||
pobj->m_nState = POBJECTSTATE_UPDATE_CLOSE;
|
||||
pobj->m_Type = (eParticleObjectType)-1;
|
||||
pobj->m_ParticleType = type;
|
||||
|
||||
pobj->SetPosition(pos);
|
||||
pobj->m_vecTarget = target;
|
||||
|
||||
pobj->m_nNumEffectCycles = numEffectCycles;
|
||||
pobj->m_nSkipFrames = skipFrames;
|
||||
pobj->m_nCreationChance = creationChance;
|
||||
pobj->m_nFrameCounter = 0;
|
||||
|
||||
pobj->m_bRemove = remove;
|
||||
|
||||
if ( lifeTime != 0 )
|
||||
pobj->m_nRemoveTimer = CTimer::GetTimeInMilliseconds() + lifeTime;
|
||||
else
|
||||
pobj->m_nRemoveTimer = 0;
|
||||
|
||||
pobj->m_Color.alpha = 0;
|
||||
|
||||
pobj->m_fSize = size;
|
||||
pobj->m_fRandVal = 0.0f;
|
||||
|
||||
return pobj;
|
||||
}
|
||||
|
||||
void
|
||||
CParticleObject::RemoveObject(void)
|
||||
{
|
||||
|
@ -631,7 +645,6 @@ void CParticleObject::UpdateClose(void)
|
|||
|
||||
case POBJECT_PED_WATER_SPLASH:
|
||||
{
|
||||
#ifdef PC_PARTICLE
|
||||
CRGBA colorsmoke(255, 255, 255, 196);
|
||||
|
||||
CVector pos = this->GetPosition();
|
||||
|
@ -733,69 +746,12 @@ void CParticleObject::UpdateClose(void)
|
|||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.4f, 1.0f), this->m_Color);
|
||||
}
|
||||
#else
|
||||
CVector pos;
|
||||
CVector vel;
|
||||
|
||||
for ( int32 i = -2; i < 2; i++ )
|
||||
{
|
||||
pos = this->GetPosition();
|
||||
pos += CVector(-0.75f, 0.5f * float(i), 0.0f);
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.x += -1.5 * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.y += float(i) * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_PED_SPLASH, pos, vel, NULL, 0.8f, this->m_Color);
|
||||
|
||||
pos = this->GetPosition();
|
||||
pos += CVector(0.75f, 0.5f * float(i), 0.0f);
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.x += 1.5f * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.y += float(i) * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_PED_SPLASH, pos, vel, NULL, 0.8f, this->m_Color);
|
||||
|
||||
pos = this->GetPosition();
|
||||
pos += CVector(0.5f * float(i), -0.75, 0.0f);
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.x += float(i) * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.y += -1.5f * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_PED_SPLASH, pos, vel, NULL, 0.8f, this->m_Color);
|
||||
|
||||
|
||||
pos = this->GetPosition();
|
||||
pos += CVector(0.5f * float(i), 0.75, 0.0f);
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.x += float(i) * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.y += 1.5f * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_PED_SPLASH, pos, vel, NULL, 0.8f, this->m_Color);
|
||||
}
|
||||
|
||||
|
||||
for ( int32 i = 0; i < 4; i++ )
|
||||
{
|
||||
pos = this->GetPosition();
|
||||
|
||||
pos.x += CGeneral::GetRandomNumberInRange(-1.5f, 1.5f);
|
||||
pos.y += CGeneral::GetRandomNumberInRange(-1.5f, 1.5f);
|
||||
pos.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
CParticle::AddParticle(PARTICLE_PED_SPLASH, pos, vel, NULL, 0.8f, this->m_Color);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_CAR_WATER_SPLASH:
|
||||
{
|
||||
#ifdef PC_PARTICLE
|
||||
CRGBA colorsmoke(255, 255, 255, 196);
|
||||
|
||||
CVector pos = this->GetPosition();
|
||||
|
@ -890,65 +846,7 @@ void CParticleObject::UpdateClose(void)
|
|||
splashvel.z += CGeneral::GetRandomNumberInRange(0.26f, 0.53f);
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, splashpos, splashvel, NULL, 0.0f, this->m_Color);
|
||||
}
|
||||
#else
|
||||
CVector pos;
|
||||
CVector vel;
|
||||
|
||||
for ( int32 i = -3; i < 4; i++ )
|
||||
{
|
||||
pos = this->GetPosition();
|
||||
pos += CVector(-1.5f, 0.5f * float(i), 0.0f);
|
||||
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.x += -3.0f * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.y += float(i) * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, pos, vel, NULL, 0.0f, this->m_Color);
|
||||
|
||||
|
||||
pos = this->GetPosition();
|
||||
pos += CVector(1.5f, 0.5f * float(i), 0.0f);
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.x += 3.0f * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.y += float(i) * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, pos, vel, NULL, 0.0f, this->m_Color);
|
||||
|
||||
|
||||
pos = this->GetPosition();
|
||||
pos += CVector(0.5f * float(i), -1.5f, 0.0f);
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.x += float(i) * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.y += -3.0f * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, pos, vel, NULL, 0.0f, this->m_Color);
|
||||
|
||||
|
||||
pos = this->GetPosition();
|
||||
pos += CVector(0.5f * float(i), 1.5f, 0.0f);
|
||||
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.x += float(i) * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.y += 3.0f * CGeneral::GetRandomNumberInRange(0.001f, 0.006f);
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, pos, vel, NULL, 0.0f, this->m_Color);
|
||||
}
|
||||
|
||||
for ( int32 i = 0; i < 8; i++ )
|
||||
{
|
||||
pos = this->GetPosition();
|
||||
pos.x += CGeneral::GetRandomNumberInRange(-3.0f, 3.0f);
|
||||
pos.y += CGeneral::GetRandomNumberInRange(-3.0f, 3.0f);
|
||||
|
||||
vel = this->m_vecTarget;
|
||||
vel.z += CGeneral::GetRandomNumberInRange(0.03f, 0.06f);
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, pos, vel, NULL, 0.0f, this->m_Color);
|
||||
}
|
||||
#endif
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -979,63 +877,107 @@ void CParticleObject::UpdateClose(void)
|
|||
break;
|
||||
}
|
||||
|
||||
case POBJECT_CATALINAS_GUNFLASH:
|
||||
case POBJECT_FIRE_HYDRANT:
|
||||
{
|
||||
CRGBA flashcolor(120, 120, 120, 255);
|
||||
|
||||
CVector vel = this->m_vecTarget;
|
||||
CVector pos = this->GetPosition();
|
||||
|
||||
float size = 1.0f;
|
||||
if ( this->m_fSize != 0.0f )
|
||||
size = this->m_fSize;
|
||||
CVector vel = this->m_vecTarget;
|
||||
|
||||
CParticle::AddParticle(PARTICLE_GUNFLASH, pos, CVector(0.0f, 0.0f, 0.0f), NULL, 0.12f*size, flashcolor);
|
||||
|
||||
pos += size * (0.06f * vel);
|
||||
CParticle::AddParticle(PARTICLE_GUNFLASH, pos, CVector(0.0f, 0.0f, 0.0f), NULL, 0.08f*size, flashcolor);
|
||||
|
||||
pos += size * (0.04f * vel);
|
||||
CParticle::AddParticle(PARTICLE_GUNFLASH, pos, CVector(0.0f, 0.0f, 0.0f), NULL, 0.04f*size, flashcolor);
|
||||
|
||||
CVector smokepos = this->GetPosition();
|
||||
CVector smokevel = 0.1f * vel;
|
||||
CParticle::AddParticle(PARTICLE_GUNSMOKE2, smokepos, smokevel, NULL, 0.005f*size);
|
||||
if ( (TheCamera.GetPosition() - pos).Magnitude() > 5.0f )
|
||||
{
|
||||
for ( int32 i = 0; i < 1; i++ )
|
||||
{
|
||||
int32 angle = 180 * i;
|
||||
|
||||
float fCos = CParticle::Cos(angle);
|
||||
float fSin = CParticle::Sin(angle);
|
||||
|
||||
CVector splashpos, splashvel;
|
||||
|
||||
splashpos = pos + CVector(0.01f*fCos, 0.01f*fSin, 0.0f);
|
||||
splashvel = vel + CVector(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(0.004f, 0.008f));
|
||||
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.005f, 0.0075f), this->m_Color, 0, 0, 1, 300);
|
||||
|
||||
splashpos = pos + CVector(0.01f*fCos, 0.01f*-fSin, 0.0f);
|
||||
splashvel = vel + CVector(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(0.004f, 0.008f));
|
||||
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.005f, 0.0075f), this->m_Color, 0, 0, 1, 300);
|
||||
|
||||
splashpos = pos + CVector(0.01f*-fCos, 0.01f*fSin, 0.0f);
|
||||
splashvel = vel + CVector(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(0.004f, 0.008f));
|
||||
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.005f, 0.0075f), this->m_Color, 0, 0, 1, 300);
|
||||
|
||||
splashpos = pos + CVector(0.01f*-fCos, 0.01f*-fSin, 0.0f);
|
||||
splashvel = vel + CVector(0.0f, 0.0f, CGeneral::GetRandomNumberInRange(0.004f, 0.008f));
|
||||
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.005f, 0.0075f), this->m_Color, 0, 0, 1, 300);
|
||||
}
|
||||
for ( int32 i = 0; i < this->m_nNumEffectCycles; i++ )
|
||||
{
|
||||
CParticle::AddParticle(this->m_ParticleType, pos, vel, NULL, 0.0f, this->m_Color);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_CATALINAS_SHOTGUNFLASH:
|
||||
case POBJECT_WATER_FOUNTAIN_VERT:
|
||||
{
|
||||
CRGBA flashcolor(120, 120, 120, 255);
|
||||
|
||||
CVector pos = this->GetPosition();
|
||||
CVector vel = this->m_vecTarget;
|
||||
|
||||
float size = 1.0f;
|
||||
if ( this->m_fSize != 0.0f )
|
||||
size = this->m_fSize;
|
||||
for ( int32 i = 0; i < 2; i++ )
|
||||
{
|
||||
int32 angle = 180 * i;
|
||||
|
||||
float fCos = CParticle::Cos(angle);
|
||||
float fSin = CParticle::Sin(angle);
|
||||
|
||||
CVector splashpos, splashvel;
|
||||
|
||||
splashpos = pos + CVector(0.015f*fCos, 0.015f*fSin, 0.0f);
|
||||
splashvel = vel + CVector(0.015f*fCos, 0.015f*fSin, CGeneral::GetRandomNumberInRange(0.004f, 0.008f));
|
||||
|
||||
CParticle::AddParticle(PARTICLE_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.001f, 0.005f), this->m_Color, 0, 0, 1, 1000);
|
||||
|
||||
splashpos = pos + CVector(0.015f*fCos, 0.015f*-fSin, 0.0f);
|
||||
splashvel = vel + CVector(0.015f*fCos, 0.015f*-fSin, CGeneral::GetRandomNumberInRange(0.004f, 0.008f));
|
||||
|
||||
CParticle::AddParticle(PARTICLE_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.001f, 0.005f), this->m_Color, 0, 0, 1, 1000);
|
||||
|
||||
splashpos = pos + CVector(0.015f*-fCos, 0.015f*fSin, 0.0f);
|
||||
splashvel = vel + CVector(0.015f*-fCos, 0.015f*fSin, CGeneral::GetRandomNumberInRange(0.004f, 0.008f));
|
||||
|
||||
CParticle::AddParticle(PARTICLE_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.001f, 0.005f), this->m_Color, 0, 0, 1, 1000);
|
||||
|
||||
splashpos = pos + CVector(0.015f*-fCos, 0.015f*-fSin, 0.0f);
|
||||
splashvel = vel + CVector(0.015f*-fCos, 0.015f*-fSin, CGeneral::GetRandomNumberInRange(0.004f, 0.008f));
|
||||
|
||||
CParticle::AddParticle(PARTICLE_SPLASH, splashpos, splashvel, NULL,
|
||||
CGeneral::GetRandomNumberInRange(0.001f, 0.005f), this->m_Color, 0, 0, 1, 1000);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case POBJECT_WATER_FOUNTAIN_HORIZ:
|
||||
{
|
||||
CVector pos = this->GetPosition();
|
||||
|
||||
CVector velstep = size * (0.1f * vel);
|
||||
CVector flashpos = pos;
|
||||
CVector vel = this->m_vecTarget;
|
||||
|
||||
flashpos += velstep;
|
||||
CParticle::AddParticle(PARTICLE_GUNFLASH, flashpos, CVector(0.0f, 0.0f, 0.0f), NULL, 0.0f, flashcolor);
|
||||
for ( int32 i = 0; i < 3; i++ )
|
||||
{
|
||||
CParticle::AddParticle(PARTICLE_CAR_SPLASH, pos, vel, NULL, 0.001f, this->m_Color, 0, 0, 1, 1000);
|
||||
}
|
||||
|
||||
flashpos += velstep;
|
||||
CParticle::AddParticle(PARTICLE_GUNFLASH, flashpos, CVector(0.0f, 0.0f, 0.0f), NULL, 0.15f*size, flashcolor);
|
||||
|
||||
flashpos += velstep;
|
||||
CParticle::AddParticle(PARTICLE_GUNFLASH, flashpos, CVector(0.0f, 0.0f, 0.0f), NULL, 0.2f*size, flashcolor);
|
||||
|
||||
|
||||
CParticle::AddParticle(PARTICLE_GUNFLASH, pos, CVector(0.0f, 0.0f, 0.0f), NULL, 0.0f, flashcolor);
|
||||
|
||||
CVector smokepos = this->GetPosition();
|
||||
CVector smokevel = 0.1f*vel;
|
||||
CParticle::AddParticle(PARTICLE_GUNSMOKE2, smokepos, smokevel, NULL, 0.1f*size);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1201,6 +1143,48 @@ CParticleObject::LoadParticle(uint8 *buffer, uint32 length)
|
|||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
CParticleObject::RemoveAllExpireableParticleObjects(void)
|
||||
{
|
||||
{
|
||||
CParticleObject *pobj = pCloseListHead;
|
||||
CParticleObject *nextpobj;
|
||||
if ( pobj != NULL )
|
||||
{
|
||||
do
|
||||
{
|
||||
nextpobj = pobj->m_pNext;
|
||||
if ( pobj->m_nRemoveTimer != 0 )
|
||||
{
|
||||
MoveToList(&pCloseListHead, &pUnusedListHead, pobj);
|
||||
pobj->m_nState = POBJECTSTATE_FREE;
|
||||
}
|
||||
pobj = nextpobj;
|
||||
}
|
||||
while ( nextpobj != NULL );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
CParticleObject *pobj = pFarListHead;
|
||||
CParticleObject *nextpobj;
|
||||
if ( pobj != NULL )
|
||||
{
|
||||
do
|
||||
{
|
||||
nextpobj = pobj->m_pNext;
|
||||
if ( pobj->m_nRemoveTimer != 0 )
|
||||
{
|
||||
MoveToList(&pFarListHead, &pUnusedListHead, pobj);
|
||||
pobj->m_nState = POBJECTSTATE_FREE;
|
||||
}
|
||||
pobj = nextpobj;
|
||||
}
|
||||
while ( nextpobj != NULL );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CParticleObject::RemoveAllParticleObjects(void)
|
||||
{
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
#include "ParticleType.h"
|
||||
#include "Placeable.h"
|
||||
|
||||
#define MAX_PARTICLEOBJECTS 100
|
||||
#define MAX_PARTICLEOBJECTS 70
|
||||
#define MAX_AUDIOHYDRANTS 8
|
||||
|
||||
enum eParticleObjectType
|
||||
{
|
||||
POBJECT_PAVEMENT_STEAM,
|
||||
POBJECT_PAVEMENT_STEAM = 0,
|
||||
POBJECT_PAVEMENT_STEAM_SLOWMOTION,
|
||||
POBJECT_WALL_STEAM,
|
||||
POBJECT_WALL_STEAM_SLOWMOTION,
|
||||
|
@ -22,6 +22,8 @@ enum eParticleObjectType
|
|||
POBJECT_BIG_FIRE,
|
||||
POBJECT_DRY_ICE,
|
||||
POBJECT_DRY_ICE_SLOWMOTION,
|
||||
POBJECT_WATER_FOUNTAIN_VERT,
|
||||
POBJECT_WATER_FOUNTAIN_HORIZ,
|
||||
POBJECT_FIRE_TRAIL,
|
||||
POBJECT_SMOKE_TRAIL,
|
||||
POBJECT_FIREBALL_AND_SMOKE,
|
||||
|
@ -69,12 +71,13 @@ public:
|
|||
~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);
|
||||
|
||||
|
||||
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);
|
||||
static CParticleObject *AddObject(tParticleType type, CVector const &pos, CVector const &target, float size, uint32 lifeTime, uint8 numEffectCycles, uint8 skipFrames, uint16 creationChance, uint8 remove);
|
||||
|
||||
void RemoveObject(void);
|
||||
|
||||
static void UpdateAll(void);
|
||||
|
@ -84,6 +87,7 @@ public:
|
|||
static bool SaveParticle(uint8 *buffer, uint32 *length);
|
||||
static bool LoadParticle(uint8 *buffer, uint32 length);
|
||||
|
||||
static void RemoveAllExpireableParticleObjects(void);
|
||||
static void RemoveAllParticleObjects(void);
|
||||
static void MoveToList(CParticleObject **from, CParticleObject **to, CParticleObject *obj);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue