void C_SteamJet::RenderParticles( CParticleRenderIterator *pIterator ) { const SteamJetParticle *pParticle = (const SteamJetParticle*)pIterator->GetFirst(); while ( pParticle ) { // Render. Vector tPos; TransformParticle(m_pParticleMgr->GetModelView(), pParticle->m_Pos, tPos); float sortKey = tPos.z; float lifetimeT = pParticle->m_Lifetime / (pParticle->m_DieTime + 0.001); float fRamp = lifetimeT * (STEAMJET_NUMRAMPS-1); int iRamp = (int)fRamp; float fraction = fRamp - iRamp; Vector vRampColor = m_Ramps[iRamp] + (m_Ramps[iRamp+1] - m_Ramps[iRamp]) * fraction; vRampColor[0] = min( 1.0f, vRampColor[0] ); vRampColor[1] = min( 1.0f, vRampColor[1] ); vRampColor[2] = min( 1.0f, vRampColor[2] ); #ifdef GE_DLL // Determine a linear alpha falloff based on our limits float alphamod = 1.0f; float fadetime = gpGlobals->curtime - m_flStartFadeTime; if ( m_bIsForExplosion && fadetime > 0 && m_flStartFadeTime > 0 ) alphamod = RemapValClamped( fadetime, 0, m_flFadeDuration, 1.0f, 0 ); float sinLifetime = sin(pParticle->m_Lifetime * 3.14159f / pParticle->m_DieTime) * alphamod; #else float sinLifetime = sin(pParticle->m_Lifetime * 3.14159f / pParticle->m_DieTime); #endif if ( m_nType == STEAM_HEATWAVE ) { RenderParticle_ColorSizePerturbNormal( pIterator->GetParticleDraw(), tPos, vRampColor, sinLifetime * (m_clrRender->a/255.0f), FLerp(m_StartSize, m_EndSize, pParticle->m_Lifetime)); } else { RenderParticle_ColorSizeAngle( pIterator->GetParticleDraw(), tPos, vRampColor, sinLifetime * (m_clrRender->a/255.0f), FLerp(pParticle->m_uchStartSize, pParticle->m_uchEndSize, pParticle->m_Lifetime), pParticle->m_flRoll ); } pParticle = (const SteamJetParticle*)pIterator->GetNext( sortKey ); } }
void C_SteamJet::RenderParticles( CParticleRenderIterator *pIterator ) { const SteamJetParticle *pParticle = (const SteamJetParticle*)pIterator->GetFirst(); while ( pParticle ) { // Render. Vector tPos; TransformParticle(m_pParticleMgr->GetModelView(), pParticle->m_Pos, tPos); float sortKey = tPos.z; float lifetimeT = pParticle->m_Lifetime / (pParticle->m_DieTime + 0.001); float fRamp = lifetimeT * (STEAMJET_NUMRAMPS-1); int iRamp = (int)fRamp; float fraction = fRamp - iRamp; Vector vRampColor = m_Ramps[iRamp] + (m_Ramps[iRamp+1] - m_Ramps[iRamp]) * fraction; vRampColor[0] = min( 1.0f, vRampColor[0] ); vRampColor[1] = min( 1.0f, vRampColor[1] ); vRampColor[2] = min( 1.0f, vRampColor[2] ); float sinLifetime = sin(pParticle->m_Lifetime * 3.14159f / pParticle->m_DieTime); if ( m_nType == STEAM_HEATWAVE ) { RenderParticle_ColorSizePerturbNormal( pIterator->GetParticleDraw(), tPos, vRampColor, sinLifetime * (m_clrRender->a/255.0f), FLerp(m_StartSize, m_EndSize, pParticle->m_Lifetime)); } else { RenderParticle_ColorSizeAngle( pIterator->GetParticleDraw(), tPos, vRampColor, sinLifetime * (m_clrRender->a/255.0f), FLerp(pParticle->m_uchStartSize, pParticle->m_uchEndSize, pParticle->m_Lifetime), pParticle->m_flRoll ); } pParticle = (const SteamJetParticle*)pIterator->GetNext( sortKey ); } }