//----------------------------------------------------------------------------- // Purpose: // Input : *materialName - //----------------------------------------------------------------------------- void CLitSmokeEmitter::Init( const char *materialName, Vector sortOrigin ) { m_hSmokeMaterial = GetPMaterial( materialName ); IMaterial *pMaterial = ParticleMgr()->PMaterialToIMaterial( m_hSmokeMaterial ); if ( pMaterial ) { m_Renderer.Init( ParticleMgr(), pMaterial ); } SetSortOrigin( sortOrigin ); m_bInitted = true; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_SignalFlare::RestoreResources( void ) { if ( m_pParticle[0] == NULL ) { m_pParticle[0] = (SimpleParticle *) AddParticle( sizeof( SimpleParticle ), GetPMaterial( "effects/redflare" ), GetAbsOrigin() ); if ( m_pParticle[0] != NULL ) { m_pParticle[0]->m_uchColor[0] = m_pParticle[0]->m_uchColor[1] = m_pParticle[0]->m_uchColor[2] = 0; m_pParticle[0]->m_flRoll = random->RandomInt( 0, 360 ); m_pParticle[0]->m_flRollDelta = random->RandomFloat( 1.0f, 4.0f ); m_pParticle[0]->m_flLifetime = 0.0f; m_pParticle[0]->m_flDieTime = 10.0f; } else { assert(0); } } if ( m_pParticle[1] == NULL ) { m_pParticle[1] = (SimpleParticle *) AddParticle( sizeof( SimpleParticle ), GetPMaterial( "effects/yellowflare_noz" ), GetAbsOrigin() ); if ( m_pParticle[1] != NULL ) { m_pParticle[1]->m_uchColor[0] = m_pParticle[1]->m_uchColor[1] = m_pParticle[1]->m_uchColor[2] = 0; m_pParticle[1]->m_flRoll = random->RandomInt( 0, 360 ); m_pParticle[1]->m_flRollDelta = random->RandomFloat( 1.0f, 4.0f ); m_pParticle[1]->m_flLifetime = 0.0f; m_pParticle[1]->m_flDieTime = 10.0f; } else { assert(0); } } }
void CreateSpurtParticles( void ) { SimpleParticle *pParticle; PMaterialHandle hMaterial = GetPMaterial( "particle/particle_smokegrenade" ); // Smoke int numParticles = RandomInt( 1,2 ); for ( int i = 0; i < numParticles; i++ ) { pParticle = (SimpleParticle *) AddParticle( sizeof( SimpleParticle ), hMaterial, m_vSortOrigin ); if ( pParticle == NULL ) break; pParticle->m_flLifetime = 0.0f; pParticle->m_flDieTime = RandomFloat( 0.5, 1.0 ); // Random velocity around the angles forward Vector vecVelocity; vecVelocity.Random( -0.1f, 0.1f ); vecVelocity += m_vecSpurtForward; VectorNormalize( vecVelocity ); vecVelocity *= RandomFloat( 16.0f, 64.0f ); pParticle->m_vecVelocity = vecVelocity; // Randomize the color a little int color[3][2]; for( int i = 0; i < 3; ++i ) { color[i][0] = max( 0, m_SpurtColor[i] - 64 ); color[i][1] = min( 255, m_SpurtColor[i] + 64 ); } pParticle->m_uchColor[0] = random->RandomInt( color[0][0], color[0][1] ); pParticle->m_uchColor[1] = random->RandomInt( color[1][0], color[1][1] ); pParticle->m_uchColor[2] = random->RandomInt( color[2][0], color[2][1] ); pParticle->m_uchStartAlpha = m_SpurtColor[3]; pParticle->m_uchEndAlpha = 0; pParticle->m_uchStartSize = RandomInt( 1, 2 ); pParticle->m_uchEndSize = pParticle->m_uchStartSize*3; pParticle->m_flRoll = RandomFloat( 0, 360 ); pParticle->m_flRollDelta = RandomFloat( -4.0f, 4.0f ); } m_flLastParticleSpawnTime = gpGlobals->curtime + m_flSpawnRate; }