//----------------------------------------------------------------------------- // Purpose: // Input : &data - //----------------------------------------------------------------------------- void CombineBallExplosionCallback( const CEffectData &data ) { Vector normal(0,0,1); // Throw sparks FX_ElectricSpark( data.m_vOrigin, 4, 1, &normal ); }
void CEffectsClient::Sparks( const Vector &position, int nMagnitude, int nTrailLength, const Vector *pVecDir ) { CPVSFilter filter( position ); if ( !SuppressTE( filter ) ) { FX_ElectricSpark( position, nMagnitude, nTrailLength, pVecDir ); } }
//----------------------------------------------------------------------------- // Purpose: Electric sparks effect //----------------------------------------------------------------------------- void BuildSparksElectricCallback( const CEffectData &data ) { Vector vecOrigin = data.m_vOrigin; Vector vecNormal = data.m_vNormal; // Sparks FX_ElectricSpark( vecOrigin, 2, 4, &vecNormal ); }
//----------------------------------------------------------------------------- // Purpose: // Input : &data - //----------------------------------------------------------------------------- void CrosshairLoadCallback2( const CEffectData &data ) { IClientRenderable *pRenderable = data.GetRenderable( ); if ( !pRenderable ) return; Vector position; QAngle angles; // If we found the attachment, emit sparks there if ( pRenderable->GetAttachment( data.m_nAttachmentIndex, position, angles ) ) { FX_ElectricSpark( position, 1.0f, 1.0f, NULL ); } }
//----------------------------------------------------------------------------- // Purpose: // Input : &data - //----------------------------------------------------------------------------- void CombineBallImpactCallback( const CEffectData &data ) { // Quick flash FX_AddQuad( data.m_vOrigin, data.m_vNormal, data.m_flRadius * 10.0f, 0, 0.75f, 1.0f, 0.0f, 0.4f, random->RandomInt( 0, 360 ), 0, Vector( 1.0f, 1.0f, 1.0f ), 0.25f, "effects/combinemuzzle1_nocull", (FXQUAD_BIAS_SCALE|FXQUAD_BIAS_ALPHA) ); // Lingering burn FX_AddQuad( data.m_vOrigin, data.m_vNormal, data.m_flRadius * 2.0f, data.m_flRadius * 4.0f, 0.75f, 1.0f, 0.0f, 0.4f, random->RandomInt( 0, 360 ), 0, Vector( 1.0f, 1.0f, 1.0f ), 0.5f, "effects/combinemuzzle2_nocull", (FXQUAD_BIAS_SCALE|FXQUAD_BIAS_ALPHA) ); // Throw sparks FX_ElectricSpark( data.m_vOrigin, 2, 1, &data.m_vNormal ); }
//----------------------------------------------------------------------------- // Purpose: // Input : &pos - // &dir - // type - //----------------------------------------------------------------------------- void FX_GaussExplosion( const Vector &pos, const Vector &dir, int type ) { Vector vDir; vDir[0] = dir[0] + random->RandomFloat( -1.0f, 1.0f ); vDir[1] = dir[1] + random->RandomFloat( -1.0f, 1.0f ); vDir[2] = dir[2] + random->RandomFloat( -1.0f, 1.0f ); VectorNormalize( vDir ); int i; #if defined(_XBOX) || defined(_X360) // // XBox version // CSmartPtr<CTrailParticles> pSparkEmitter = CTrailParticles::Create( "FX_GaussExplosion" ); if ( pSparkEmitter == NULL ) { Assert(0); return; } if ( g_Material_Spark == NULL ) { g_Material_Spark = pSparkEmitter->GetPMaterial( "effects/spark" ); } pSparkEmitter->SetSortOrigin( pos ); pSparkEmitter->m_ParticleCollision.SetGravity( 800.0f ); pSparkEmitter->SetFlag( bitsPARTICLE_TRAIL_VELOCITY_DAMPEN ); pSparkEmitter->GetBinding().SetBBox( pos - Vector( 32, 32, 32 ), pos + Vector( 32, 32, 32 ) ); int numSparks = random->RandomInt( 8, 16 ); TrailParticle *pParticle; // Dump out sparks for ( i = 0; i < numSparks; i++ ) { pParticle = (TrailParticle *) pSparkEmitter->AddParticle( sizeof(TrailParticle), g_Material_Spark, pos ); if ( pParticle == NULL ) return; pParticle->m_flLifetime = 0.0f; vDir.Random( -0.6f, 0.6f ); vDir += dir; VectorNormalize( vDir ); pParticle->m_flWidth = random->RandomFloat( 1.0f, 4.0f ); pParticle->m_flLength = random->RandomFloat( 0.01f, 0.1f ); pParticle->m_flDieTime = random->RandomFloat( 0.25f, 0.5f ); pParticle->m_vecVelocity = vDir * random->RandomFloat( 128, 512 ); Color32Init( pParticle->m_color, 255, 255, 255, 255 ); } // End cap SimpleParticle particle; particle.m_Pos = pos; particle.m_flLifetime = 0.0f; particle.m_flDieTime = 0.1f; particle.m_vecVelocity.Init(); particle.m_flRoll = random->RandomInt( 0, 360 ); particle.m_flRollDelta = 0.0f; particle.m_uchColor[0] = 255; particle.m_uchColor[1] = 255; particle.m_uchColor[2] = 255; particle.m_uchStartAlpha = 255; particle.m_uchEndAlpha = 255; particle.m_uchStartSize = random->RandomInt( 24, 32 ); particle.m_uchEndSize = 0; AddSimpleParticle( &particle, ParticleMgr()->GetPMaterial( "effects/yellowflare" ) ); #else // // PC version // CSmartPtr<CTrailParticles> pSparkEmitter = CTrailParticles::Create( "FX_ElectricSpark" ); if ( !pSparkEmitter ) { Assert(0); return; } PMaterialHandle hMaterial = pSparkEmitter->GetPMaterial( "effects/spark" ); pSparkEmitter->SetSortOrigin( pos ); pSparkEmitter->m_ParticleCollision.SetGravity( 800.0f ); pSparkEmitter->SetFlag( bitsPARTICLE_TRAIL_VELOCITY_DAMPEN|bitsPARTICLE_TRAIL_COLLIDE ); //Setup our collision information pSparkEmitter->m_ParticleCollision.Setup( pos, &vDir, 0.8f, 128, 512, 800, 0.3f ); int numSparks = random->RandomInt( 16, 32 ); TrailParticle *pParticle; // Dump out sparks for ( i = 0; i < numSparks; i++ ) { pParticle = (TrailParticle *) pSparkEmitter->AddParticle( sizeof(TrailParticle), hMaterial, pos ); if ( pParticle == NULL ) return; pParticle->m_flLifetime = 0.0f; vDir.Random( -0.6f, 0.6f ); vDir += dir; VectorNormalize( vDir ); pParticle->m_flWidth = random->RandomFloat( 1.0f, 4.0f ); pParticle->m_flLength = random->RandomFloat( 0.01f, 0.1f ); pParticle->m_flDieTime = random->RandomFloat( 0.25f, 1.0f ); pParticle->m_vecVelocity = vDir * random->RandomFloat( 128, 512 ); Color32Init( pParticle->m_color, 255, 255, 255, 255 ); } FX_ElectricSpark( pos, 1, 1, &vDir ); #endif }
//----------------------------------------------------------------------------- // Purpose: // Input : &pos - // &dir - // type - //----------------------------------------------------------------------------- void FX_GaussExplosion(const Vector &pos, const Vector &dir, int type) { Vector vDir; vDir[0] = dir[0] + random->RandomFloat(-1.0f, 1.0f); vDir[1] = dir[1] + random->RandomFloat(-1.0f, 1.0f); vDir[2] = dir[2] + random->RandomFloat(-1.0f, 1.0f); VectorNormalize(vDir); int i; // // PC version // CSmartPtr<CTrailParticles> pSparkEmitter = CTrailParticles::Create("FX_ElectricSpark"); if (!pSparkEmitter) { Assert(0); return; } PMaterialHandle hMaterial = pSparkEmitter->GetPMaterial("effects/spark"); pSparkEmitter->SetSortOrigin(pos); pSparkEmitter->m_ParticleCollision.SetGravity(800.0f); pSparkEmitter->SetFlag(bitsPARTICLE_TRAIL_VELOCITY_DAMPEN | bitsPARTICLE_TRAIL_COLLIDE); //Setup our collision information pSparkEmitter->m_ParticleCollision.Setup(pos, &vDir, 0.8f, 128, 512, 800, 0.3f); int numSparks = random->RandomInt(16, 32); TrailParticle *pParticle; // Dump out sparks for (i = 0; i < numSparks; i++) { pParticle = (TrailParticle *) pSparkEmitter->AddParticle(sizeof(TrailParticle), hMaterial, pos); if (pParticle == NULL) return; pParticle->m_flLifetime = 0.0f; vDir.Random(-0.6f, 0.6f); vDir += dir; VectorNormalize(vDir); pParticle->m_flWidth = random->RandomFloat(1.0f, 4.0f); pParticle->m_flLength = random->RandomFloat(0.01f, 0.1f); pParticle->m_flDieTime = random->RandomFloat(0.25f, 1.0f); pParticle->m_vecVelocity = vDir * random->RandomFloat(128, 512); Color32Init(pParticle->m_color, 255, 255, 255, 255); } FX_ElectricSpark(pos, 1, 1, &vDir); }