本文整理汇总了C++中DispatchParticleEffect函数的典型用法代码示例。如果您正苦于以下问题:C++ DispatchParticleEffect函数的具体用法?C++ DispatchParticleEffect怎么用?C++ DispatchParticleEffect使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DispatchParticleEffect函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: VectorNormalize
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void CWeaponStriderBuster::OnFlechetteAttach( Vector &vecFlechetteVelocity )
{
if ( m_bLaunched )
{
Vector vecForce = vecFlechetteVelocity;
VectorNormalize( vecForce );
vecForce *= 1000;
vecForce.z = -5000;
VPhysicsGetObject()->ApplyForceCenter( vecForce );
}
if ( !GetParent() || !GetParent()->ClassMatches( g_iszVehicle ) )
{
if ( !m_bNoseDiving )
{
//m_hGlowTrail->StopParticleSystem();
StopParticleEffects( this );
if( m_iBusterFlags & STRIDERBUSTER_FLAG_KNOCKED_OFF_STRIDER )
{
DispatchParticleEffect( "striderbuster_shotdown_trail", PATTACH_ABSORIGIN_FOLLOW, this );
}
else
{
DispatchParticleEffect( "striderbuster_flechette_attached", PATTACH_ABSORIGIN_FOLLOW, this );
}
}
m_bNoseDiving = true;
}
m_nAttachedFlechettes++;
}
示例2: SpawnSquashedGrub
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CAntlionGrub::Squash( CBaseEntity *pOther, bool bDealDamage, bool bSpawnBlood )
{
// If we're already squashed, then don't bother doing it again!
if ( GetEffects() & EF_NODRAW )
return;
SpawnSquashedGrub();
AddEffects( EF_NODRAW );
AddSolidFlags( FSOLID_NOT_SOLID );
// Stop being attached to us
if ( m_hGlowSprite )
{
FadeGlow();
m_hGlowSprite->SetParent( NULL );
}
EmitSound( "NPC_Antlion_Grub.Die" );
EmitSound( "NPC_Antlion_Grub.Squish" );
// if vort stepped on me, maybe he wants to say something
if ( pOther && FClassnameIs( pOther, "npc_vortigaunt" ) )
{
Assert(dynamic_cast<CNPC_Vortigaunt *>(pOther));
static_cast<CNPC_Vortigaunt *>(pOther)->OnSquishedGrub(this);
}
SetTouch( NULL );
//if ( bSpawnBlood )
{
// Temp squash effect
Vector vecForward, vecUp;
AngleVectors( GetAbsAngles(), &vecForward, NULL, &vecUp );
// Start effects at either end of the grub
Vector vecSplortPos = GetAbsOrigin() + vecForward * 14.0f;
DispatchParticleEffect( "GrubSquashBlood", vecSplortPos, GetAbsAngles() );
vecSplortPos = GetAbsOrigin() - vecForward * 16.0f;
Vector vecDir = -vecForward;
QAngle vecAngles;
VectorAngles( vecDir, vecAngles );
DispatchParticleEffect( "GrubSquashBlood", vecSplortPos, vecAngles );
MakeSquashDecals( GetAbsOrigin() + vecForward * 32.0f );
MakeSquashDecals( GetAbsOrigin() - vecForward * 32.0f );
}
// Deal deadly damage to ourself
if ( bDealDamage )
{
CTakeDamageInfo info( pOther, pOther, Vector( 0, 0, -1 ), GetAbsOrigin(), GetHealth()+1, DMG_CRUSH );
TakeDamage( info );
}
}
示例3: ASW_GiveAmmo
int ASW_GiveAmmo( CASW_Marine *pMarine, float flCount, const char *pszAmmoName, CBaseEntity *pAmmoEntity, bool bSuppressSound = false )
{
int iAmmoType = GetAmmoDef()->Index(pszAmmoName);
if ( iAmmoType == -1 )
{
Msg("ERROR: Attempting to give unknown ammo type (%s)\n",pszAmmoName);
return 0;
}
int amount = pMarine->GiveAmmo( flCount, iAmmoType, bSuppressSound );
if ( amount == 0 )
amount = pMarine->GiveAmmoToAmmoBag( flCount, iAmmoType, bSuppressSound );
if ( amount > 0 )
{
pMarine->TookAmmoPickup( pAmmoEntity );
// Check the ammo type... for some doing a spilling bullet effect isn't fictionally appropriate
if ( iAmmoType != GetAmmoDef()->Index( "ASW_F" ) && iAmmoType != GetAmmoDef()->Index( "ASW_ML" ) && iAmmoType != GetAmmoDef()->Index( "ASW_TG" ) && iAmmoType != GetAmmoDef()->Index( "ASW_GL" ) )
{
// Do effects
int iAmmoCost = CASW_Ammo_Drop_Shared::GetAmmoUnitCost( iAmmoType );
if ( iAmmoCost < 20 )
{
pAmmoEntity->EmitSound( "ASW_Ammobag.Pickup_sml" );
DispatchParticleEffect( "ammo_satchel_take_sml", pAmmoEntity->GetAbsOrigin() + Vector( 0, 0, 4 ), vec3_angle );
}
else if ( iAmmoCost < 75 )
{
pAmmoEntity->EmitSound( "ASW_Ammobag.Pickup_med" );
DispatchParticleEffect( "ammo_satchel_take_med", pAmmoEntity->GetAbsOrigin() + Vector( 0, 0, 4 ), vec3_angle );
}
else
{
pAmmoEntity->EmitSound( "ASW_Ammobag.Pickup_lrg" );
DispatchParticleEffect( "ammo_satchel_take_lrg", pAmmoEntity->GetAbsOrigin() + Vector( 0, 0, 4 ), vec3_angle );
}
}
IGameEvent * event = gameeventmanager->CreateEvent( "ammo_pickup" );
if ( event )
{
CASW_Player *pPlayer = pMarine->GetCommander();
event->SetInt( "userid", ( pPlayer ? pPlayer->GetUserID() : 0 ) );
event->SetInt( "entindex", pMarine->entindex() );
gameeventmanager->FireEvent( event );
}
}
return amount;
}
示例4: StartAttackOffSound
void CASW_Weapon_Chainsaw::EndAttack( void )
{
if ( m_fireState != FIRE_OFF )
{
StartAttackOffSound();
#ifdef CLIENT_DLL
DispatchParticleEffect( "mining_laser_exhaust", PATTACH_POINT_FOLLOW, this, "eject1" );
#endif
}
StopChainsawSound();
SetWeaponIdleTime( gpGlobals->curtime + 2.0 );
m_flNextPrimaryAttack = gpGlobals->curtime + GetWeaponInfo()->m_flFireRate;
m_flNextSecondaryAttack = gpGlobals->curtime + GetWeaponInfo()->m_flFireRate;
SetFiringState(FIRE_OFF);
ClearIsFiring();
DestroyEffect();
}
示例5: BloodImpactCallback
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void BloodImpactCallback( const CEffectData & data )
{
bool bFoundBlood = false;
// Find which sort of blood we are
for ( int i = 0; i < ARRAYSIZE( bloodCallbacks ); i++ )
{
if ( bloodCallbacks[i].nColor == data.m_nColor )
{
QAngle vecAngles;
VectorAngles( -data.m_vNormal, vecAngles );
DispatchParticleEffect( bloodCallbacks[i].lpszParticleSystemName, data.m_vOrigin, vecAngles );
bFoundBlood = true;
break;
}
}
if ( bFoundBlood == false )
{
Vector vecPosition;
vecPosition = data.m_vOrigin;
// Fetch the blood color.
colorentry_t color;
GetBloodColor( data.m_nColor, color );
FX_BloodBulletImpact( vecPosition, data.m_vNormal, data.m_flScale, color.r, color.g, color.b );
}
}
示例6: GetOwnerEntity
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWeaponStriderBuster::Detonate( void )
{
CBaseEntity *pVictim = GetOwnerEntity();
if ( !m_bDud && pVictim )
{
// Kill the strider (with magic effect)
CBasePlayer *pPlayer = AI_GetSinglePlayer();
CTakeDamageInfo info( pPlayer, this, RandomVector( -100.0f, 100.0f ), GetAbsOrigin(), pVictim->GetHealth(), DMG_GENERIC );
pVictim->TakeDamage( info );
gamestats->Event_WeaponHit( ToBasePlayer( pPlayer ), true, GetClassname(), info );
// Tracker 62293: There's a bug where the inflictor/attacker are reversed when calling TakeDamage above so the player never gets
// credit for the strider buster kills. The code has a bunch of assumptions lower level, so it's safer to just fix it here by
// crediting a kill to the player directly.
gamestats->Event_PlayerKilledOther( pPlayer, pVictim, info );
}
m_OnDetonate.FireOutput( this, this );
// Explode
if ( !m_bDud )
{
CreateDestroyedEffect();
EmitSound( "Weapon_StriderBuster.Detonate" );
}
else
{
DispatchParticleEffect( "striderbuster_explode_dummy_core", GetAbsOrigin(), GetAbsAngles() );
EmitSound( "Weapon_StriderBuster.Dud_Detonate" );
}
// Go to bits!
Shatter( pVictim );
}
示例7: PerformCustomEffects
void PerformCustomEffects( const Vector &vecOrigin, trace_t &tr, const Vector &shotDir, int iMaterial, int iScale, int nFlags )
{
// Throw out the effect if any of these are true
if ( tr.surface.flags & (SURF_SKY|SURF_NODRAW|SURF_HINT|SURF_SKIP) )
return;
if ( cl_new_impact_effects.GetInt() )
{
PerformNewCustomEffects( vecOrigin, tr, shotDir, iMaterial, iScale, nFlags );
return;
}
bool bNoFlecks = !r_drawflecks.GetBool();
if ( !bNoFlecks )
{
bNoFlecks = ( ( nFlags & FLAGS_CUSTIOM_EFFECTS_NOFLECKS ) != 0 );
}
// Cement and wood have dust and flecks
if ( ( iMaterial == CHAR_TEX_CONCRETE ) || ( iMaterial == CHAR_TEX_TILE ) )
{
FX_DebrisFlecks( vecOrigin, &tr, iMaterial, iScale, bNoFlecks );
}
else if ( iMaterial == CHAR_TEX_WOOD )
{
FX_DebrisFlecks( vecOrigin, &tr, iMaterial, iScale, bNoFlecks );
}
else if ( ( iMaterial == CHAR_TEX_DIRT ) || ( iMaterial == CHAR_TEX_SAND ) )
{
FX_DustImpact( vecOrigin, &tr, iScale );
}
else if ( iMaterial == CHAR_TEX_ANTLION )
{
FX_AntlionImpact( vecOrigin, &tr );
}
else if ( ( iMaterial == CHAR_TEX_METAL ) || ( iMaterial == CHAR_TEX_VENT ) )
{
Vector reflect;
float dot = shotDir.Dot( tr.plane.normal );
reflect = shotDir + ( tr.plane.normal * ( dot*-2.0f ) );
reflect[0] += random->RandomFloat( -0.2f, 0.2f );
reflect[1] += random->RandomFloat( -0.2f, 0.2f );
reflect[2] += random->RandomFloat( -0.2f, 0.2f );
FX_MetalSpark( vecOrigin, reflect, tr.plane.normal, iScale );
}
else if ( iMaterial == CHAR_TEX_COMPUTER )
{
Vector offset = vecOrigin + ( tr.plane.normal * 1.0f );
g_pEffects->Sparks( offset );
}
else if ( iMaterial == CHAR_TEX_WARPSHIELD )
{
QAngle vecAngles;
VectorAngles( -shotDir, vecAngles );
DispatchParticleEffect( "warp_shield_impact", vecOrigin, vecAngles );
}
}
示例8: Particle_Test_Start
void Particle_Test_Start( CBasePlayer* pPlayer, const char *name, bool bStart )
{
if ( !pPlayer )
return;
int iAttachType = GetAttachTypeFromString( particle_test_attach_mode.GetString() );
if ( iAttachType < 0 )
{
Warning( "Invalid attach type specified for particle_test in cvar 'particle_test_attach_mode.\n" );
return;
}
int iAttachmentIndex = particle_test_attach_attachment.GetInt();
const char *pszParticleFile = particle_test_file.GetString();
CBaseEntity *pEntity = NULL;
while ( (pEntity = GetNextCommandEntity( pPlayer, name, pEntity )) != NULL )
{
/*
Fire the test particle system on this entity
*/
DispatchParticleEffect(
pszParticleFile,
(ParticleAttachment_t)iAttachType,
pEntity,
iAttachmentIndex,
true ); // stops existing particle systems
}
}
示例9: UTIL_TraceLine
void CASW_Boomer_Blob::DoExplosion( )
{
// scorch the ground
trace_t tr;
UTIL_TraceLine ( GetAbsOrigin(), GetAbsOrigin() + Vector( 0, 0, -80 ), MASK_SHOT, this, COLLISION_GROUP_NONE, &tr);
if ( m_bMaster )
{
if ( ( tr.m_pEnt != GetWorldEntity() ) || ( tr.hitbox != 0 ) )
{
// non-world needs smaller decals
if( tr.m_pEnt && !tr.m_pEnt->IsNPC() )
{
UTIL_DecalTrace( &tr, "SmallScorch" );
}
}
else
{
UTIL_DecalTrace( &tr, "Scorch" );
}
UTIL_ASW_ScreenShake( GetAbsOrigin(), 7.0f, 45.0f, 0.5f, 150, SHAKE_START );
}
// explosion effects
DispatchParticleEffect( "boomer_drop_explosion", GetAbsOrigin(), Vector( m_DmgRadius, 0.0f, 0.0f ), QAngle( 0.0f, 0.0f, 0.0f ) );
EmitSound( "ASW_Boomer_Grenade.Explode" );
// damage to nearby things
ASWGameRules()->RadiusDamage( CTakeDamageInfo( this, m_hFirer.Get(), m_flDamage, DMG_BLAST ), GetAbsOrigin(), m_DmgRadius, CLASS_NONE, NULL );
}
示例10: GetAbsOrigin
void CASW_Grenade_PRifle::CreateEffects( void )
{
CEffectData data;
data.m_vOrigin = GetAbsOrigin();
CPASFilter filter( data.m_vOrigin );
filter.SetIgnorePredictionCull(true);
DispatchParticleEffect( "prifle_grenade_fx", PATTACH_ABSORIGIN_FOLLOW, this, "fuse", false, -1, &filter );
/*
int nAttachment = LookupAttachment( "fuse" );
m_pGlowTrail = CSpriteTrail::SpriteTrailCreate( "sprites/bluelaser1.vmt", GetLocalOrigin(), false );
if ( m_pGlowTrail != NULL )
{
m_pGlowTrail->FollowEntity( this );
m_pGlowTrail->SetAttachment( this, nAttachment );
m_pGlowTrail->SetTransparency( kRenderTransAdd, 255, 255, 255, asw_grentrail_brightness.GetInt(), kRenderFxNone );
m_pGlowTrail->SetStartWidth( asw_grentrail_width.GetFloat() );
m_pGlowTrail->SetEndWidth( asw_grentrail_widthend.GetFloat() );
m_pGlowTrail->SetLifeTime( asw_grentrail_lifetime.GetFloat() );
m_pGlowTrail->SetMinFadeLength(asw_grentrail_fade.GetFloat());
}
*/
}
示例11: DispatchParticleEffect
void CWeaponDrainGrenade::Explode( CBaseCombatCharacter* pAttacker,
CBaseEntity* pInflictor,
CBaseEntity* pIgnore,
Vector vecPosition,
float flDamage,
float flRadius,
float flDrainFocus )
{
#if !defined( CLIENT_DLL )
//CSoundEnt::InsertSound ( SOUND_COMBAT, vecPosition, 1024, 3.0 );
CTakeDamageInfo info;
info.CFSet( pInflictor, pAttacker, vec3_origin, vecPosition, flDamage, DMG_BLAST, WEAPON_NONE, &vecPosition, false );
info.SetDrainFocus( flDrainFocus );
DispatchParticleEffect("grenade_explosion", vecPosition, vec3_angle, pIgnore);
//TODO: Figure out sound.
CPASAttenuationFilter filter( this );
filter.UsePredictionRules();
EmitSound( filter, entindex(), "Numen.FireAoE" );
//CSoundEnt::InsertSound ( SOUND_COMBAT, GetAbsOrigin(), BASEGRENADE_EXPLOSION_VOLUME, 3.0 );
RadiusDamage( info, vecPosition, flRadius );
#endif //!defined( CLIENT_DLL )
}
示例12: CC_DispatchParticle
void CC_DispatchParticle( const CCommand& args )
{
C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer();
if ( !pLocalPlayer )
return;
if ( args.ArgC() < 2 )
{
DevMsg( "Use: dispatch_particle {particle_name} {surface_offset_distance}\n" );
return;
}
float flSurfaceOffsetDistance = 0.f;
if ( args.ArgC() == 3 )
{
flSurfaceOffsetDistance = atof( args[2] );
}
Vector vForward;
pLocalPlayer->GetVectors( &vForward, NULL, NULL );
trace_t tr;
UTIL_TraceLine( pLocalPlayer->EyePosition(), pLocalPlayer->EyePosition() + vForward * 3000, MASK_SOLID_BRUSHONLY, NULL, &tr );
Vector vTargetDeathPos = tr.endpos;
DispatchParticleEffect( args[1], vTargetDeathPos + flSurfaceOffsetDistance * tr.plane.normal, vec3_angle );
}
示例13: AddEffects
//-----------------------------------------------------------------------------
// Purpose:
// Input : &info -
//-----------------------------------------------------------------------------
void CGrubNugget::Event_Killed( const CTakeDamageInfo &info )
{
AddEffects( EF_NODRAW );
DispatchParticleEffect( "antlion_spit_player", GetAbsOrigin(), QAngle( -90, 0, 0 ) );
EmitSound( "NPC_Antlion_Grub.Explode" );
BaseClass::Event_Killed( info );
}
示例14: VectorAngles
//-----------------------------------------------------------------------------
// Purpose:
// Input : &info -
// &vecDir -
// *ptr -
//-----------------------------------------------------------------------------
void CAntlionGrub::TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr )
{
QAngle vecAngles;
VectorAngles( -vecDir, vecAngles );
DispatchParticleEffect( "GrubBlood", ptr->endpos, vecAngles );
BaseClass::TraceAttack( info, vecDir, ptr );
}
示例15: ResetSequence
void CASW_Boomer_Blob::CheckNearbyTargets( )
{
// see if an alien is nearby
if ( gpGlobals->curtime >= m_fEarliestAOEDetonationTime )
{
if ( !m_bModelOpening && gpGlobals->curtime >= (m_fDetonateTime - ASW_BOOMER_WARN_DELAY) )
{
// we are one second from detonating, commit to detonating and start the opening sequence
// regardless of anyone nearby
m_bModelOpening = true;
ResetSequence( LookupSequence( "MortarBugProjectile_Opening" ) );
CEffectData data;
data.m_vOrigin = GetAbsOrigin();
CPASFilter filter( data.m_vOrigin );
filter.SetIgnorePredictionCull(true);
DispatchParticleEffect( "boomer_grenade_open", PATTACH_ABSORIGIN_FOLLOW, this, -1, false, -1, &filter );
}
// if we exceeded the detonation time, just detonate
if ( gpGlobals->curtime >= m_fDetonateTime )
{
Detonate();
return;
}
// if the model is opening, do the animation advance
if ( m_bModelOpening )
{
StudioFrameAdvance();
SetNextThink( gpGlobals->curtime );
return;
}
float flRadius = asw_boomer_blob_radius_check_scale.GetFloat() * m_DmgRadius;
Vector vecSrc = GetAbsOrigin();
CBaseEntity *pEntity = NULL;
for ( CEntitySphereQuery sphere( vecSrc, flRadius ); ( pEntity = sphere.GetCurrentEntity() ) != NULL; sphere.NextEntity() )
{
if ( !pEntity || !pEntity->IsPlayer() )
continue;
// give them a 2 second warning before detonation
m_fDetonateTime = MIN( m_fDetonateTime, m_fDetonateTime + ASW_BOOMER_WARN_DELAY );
}
}
if ( m_fDetonateTime <= gpGlobals->curtime + asw_boomer_blob_radius_check_interval.GetFloat() )
{
SetThink( &CASW_Boomer_Blob::Detonate );
SetNextThink( m_fDetonateTime );
}
else
{
SetThink( &CASW_Boomer_Blob::CheckNearbyTargets );
SetNextThink( gpGlobals->curtime + asw_boomer_blob_radius_check_interval.GetFloat() );
}
}