//----------------------------------------------------------------------------- // Purpose: // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool C_WeaponPhysCannon::SetupEmitter( void ) { if ( !m_pLocalEmitter.IsValid() ) { m_pLocalEmitter = CLocalSpaceEmitter::Create( "physpowerup", GetRefEHandle(), LookupAttachment( "core" ) ); if ( m_pLocalEmitter.IsValid() == false ) return false; } if ( !m_pAttractor.IsValid() ) { m_pAttractor = CParticleAttractor::Create( vec3_origin, "physpowerup_att" ); if ( m_pAttractor.IsValid() == false ) return false; } if ( !m_pEmitter.IsValid() ) { m_pEmitter = CSimpleEmitter::Create( "physpowerup_glow" ); if ( m_pEmitter.IsValid() == false ) return false; } return true; }
CBaseNetworkable::~CBaseNetworkable() { Assert( m_pPev ); // Not sure if this check is really necessary. It's in here // as a sanity check so I can catch networkables that aren't // calling AttachEdict. gEntList.RemoveEntity( GetRefEHandle() ); DetachEdict(); }
void C_ASW_Sentry_Top::ProcessMuzzleFlashEvent() { // attach muzzle flash particle system effect int iAttachment = GetMuzzleAttachment(); if ( iAttachment > 0 ) { float flScale = GetMuzzleFlashScale(); FX_ASW_MuzzleEffectAttached( flScale, GetRefEHandle(), iAttachment, NULL, false ); //EjectParticleBrass( "weapon_shell_casing_rifle", iAttachment ); //#endif } BaseClass::ProcessMuzzleFlashEvent(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponCrossbow::DoLoadEffect() { SetSkin(BOLT_SKIN_GLOW); CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( !pOwner ) return; CEffectData data; data.m_nAttachmentIndex = 1; #ifdef GAME_DLL data.m_nEntIndex = entindex(); CPASFilter filter(data.m_vOrigin); filter.RemoveRecipient(pOwner); te->DispatchEffect(filter, 0.0, data.m_vOrigin, "CrossbowLoad", data); #else CBaseViewModel *pViewModel = pOwner->GetViewModel(); if ( pViewModel != NULL ) { if ( ::input->CAM_IsThirdPerson() ) data.m_hEntity = pViewModel->GetRefEHandle(); else data.m_hEntity = GetRefEHandle(); DispatchEffect("CrossbowLoad", data); } #endif //Tony; switched this up, always attach it to the weapon, not the view model!! #ifndef CLIENT_DLL CSprite *pBlast = CSprite::SpriteCreate( CROSSBOW_GLOW_SPRITE2, GetAbsOrigin(), false ); if ( pBlast ) { pBlast->SetAttachment(this, 1); pBlast->SetTransparency(kRenderTransAdd, 255, 255, 255, 255, kRenderFxNone ); pBlast->SetBrightness(128); pBlast->SetScale(0.2f); pBlast->FadeOutFromSpawn(); } #endif }
void C_BaseNetworkable::Term() { // Detach from the server list. if ( m_ClientHandle != ClientEntityList().InvalidHandle() ) { // Remove from the think list. ClientThinkList()->RemoveThinkable( m_ClientHandle ); ClientEntityList().RemoveEntity( GetRefEHandle() ); index = 0xFFFF; // RemoveEntity should have done this. Assert( m_ClientHandle == ClientEntityList().InvalidHandle() ); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponCrossbow::DoLoadEffect( void ) { SetSkin( BOLT_SKIN_GLOW ); CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( pOwner == NULL ) return; //Tony; change this up a bit; on the server, dispatch an effect but don't send it to the client who fires //on the client, create an effect either in the view model, or on the world model if first person. CEffectData data; data.m_nAttachmentIndex = 1; data.m_vOrigin = pOwner->GetAbsOrigin(); CPASFilter filter( data.m_vOrigin ); #ifdef GAME_DLL filter.RemoveRecipient( pOwner ); data.m_nEntIndex = entindex(); #else CBaseViewModel *pViewModel = pOwner->GetViewModel(); if ( ShouldDrawUsingViewModel() && pViewModel != NULL ) data.m_hEntity = pViewModel->GetRefEHandle(); else data.m_hEntity = GetRefEHandle(); #endif DispatchEffect( "CrossbowLoad", data, filter ); #ifndef CLIENT_DLL CSprite *pBlast = CSprite::SpriteCreate( CROSSBOW_GLOW_SPRITE2, GetAbsOrigin(), false ); if ( pBlast ) { pBlast->SetAttachment( this, 1 ); pBlast->SetTransparency( kRenderTransAdd, 255, 255, 255, 255, kRenderFxNone ); pBlast->SetBrightness( 128 ); pBlast->SetScale( 0.2f ); pBlast->FadeOutFromSpawn(); } #endif }
void CDAViewModel::FireObsoleteEvent( const Vector& origin, const QAngle& angles, int event, const char *options ) { CSDKPlayer* pOwner = ToSDKPlayer(GetOwner()); if (!pOwner) return; Vector attachOrigin; QAngle attachAngles; switch( event ) { // Obsolete. Use the AE_CL_CREATE_PARTICLE_EFFECT event instead, which uses the artist driven particle system & editor. case AE_CLIENT_EFFECT_ATTACH: { int iAttachment = -1; int iParam = 0; char token[128]; char effectFunc[128]; const char *p = options; p = nexttoken(token, p, ' '); if( token ) Q_strncpy( effectFunc, token, sizeof(effectFunc) ); p = nexttoken(token, p, ' '); bool bResult = false; if( token ) { if (pOwner->IsInThirdPerson() && pOwner->GetActiveSDKWeapon()) { iAttachment = pOwner->GetActiveSDKWeapon()->LookupAttachment(token); bResult = pOwner->GetActiveSDKWeapon()->GetAttachment( iAttachment, attachOrigin, attachAngles ); } else { iAttachment = LookupAttachment(token); bResult = GetAttachment( iAttachment, attachOrigin, attachAngles ); } } p = nexttoken(token, p, ' '); if( token ) iParam = atoi(token); if (bResult) { // Fill out the generic data CEffectData data; data.m_vOrigin = attachOrigin; data.m_vAngles = attachAngles; AngleVectors( attachAngles, &data.m_vNormal ); data.m_hEntity = GetRefEHandle(); data.m_nAttachmentIndex = iAttachment + 1; data.m_fFlags = iParam; DispatchEffect( effectFunc, data ); } } break; } }
void C_PhysPropClientside::ImpactTrace( trace_t *pTrace, int iDamageType, const char *pCustomImpactName ) { VPROF( "C_PhysPropClientside::ImpactTrace" ); IPhysicsObject *pPhysicsObject = VPhysicsGetObject(); if( !pPhysicsObject ) return; Vector dir = pTrace->endpos - pTrace->startpos; int iDamage = 0; if ( iDamageType == DMG_BLAST ) { iDamage = VectorLength( dir ); dir *= 500; // adjust impact strenght // apply force at object mass center pPhysicsObject->ApplyForceCenter( dir ); } else { Vector hitpos; VectorMA( pTrace->startpos, pTrace->fraction, dir, hitpos ); VectorNormalize( dir ); // guess avg damage if ( iDamageType == DMG_BULLET ) { iDamage = 30; } else { iDamage = 50; } dir *= 4000; // adjust impact strenght // apply force where we hit it pPhysicsObject->ApplyForceOffset( dir, hitpos ); // Build the impact data CEffectData data; data.m_vOrigin = pTrace->endpos; data.m_vStart = pTrace->startpos; data.m_nSurfaceProp = pTrace->surface.surfaceProps; data.m_nDamageType = iDamageType; data.m_nHitBox = pTrace->hitbox; data.m_hEntity = GetRefEHandle(); // Send it on its way if ( !pCustomImpactName ) { DispatchEffect( "Impact", data ); } else { DispatchEffect( pCustomImpactName, data ); } } // Clone( dir ); // debug code OnTakeDamage( iDamage ); }