//-----------------------------------------------------------------------------
// 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;
	}