diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/dod/fx_dod_knifeslash.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/dod/fx_dod_knifeslash.cpp')
| -rw-r--r-- | game/client/dod/fx_dod_knifeslash.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/game/client/dod/fx_dod_knifeslash.cpp b/game/client/dod/fx_dod_knifeslash.cpp new file mode 100644 index 0000000..e08b11f --- /dev/null +++ b/game/client/dod/fx_dod_knifeslash.cpp @@ -0,0 +1,72 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Game-specific impact effect hooks +// +//============================================================================= +#include "cbase.h" +#include "decals.h" +#include "iefx.h" +#include "fx_impact.h" +#include "tempent.h" +#include "c_te_effect_dispatch.h" +#include "c_te_legacytempents.h" + +void KnifeSlash( const CEffectData &data ) +{ + trace_t tr; + Vector vecOrigin, vecStart, vecShotDir; + int iMaterial, iDamageType, iHitbox; + short nSurfaceProp; + + C_BaseEntity *pEntity = ParseImpactData( data, &vecOrigin, &vecStart, &vecShotDir, nSurfaceProp, iMaterial, iDamageType, iHitbox ); + + if( pEntity == NULL ) + return; + + int decalNumber = decalsystem->GetDecalIndexForName( GetImpactDecal( pEntity, iMaterial, iDamageType ) ); + if ( decalNumber == -1 ) + return; + + // vector perpendicular to the slash direction + // so we can align the slash decal to that + Vector vecPerp; + AngleVectors( data.m_vAngles, NULL, &vecPerp, NULL ); + + const ConVar *decals =cvar->FindVar( "r_decals" ); + + if ( decals && decals->GetInt() ) + { + if ( (pEntity->entindex() == 0) && (iHitbox != 0) ) + { + // Setup our shot information + Vector shotDir = vecOrigin - vecStart; + float flLength = VectorNormalize( shotDir ); + Vector traceExt; + VectorMA( vecStart, flLength + 8.0f, shotDir, traceExt ); + + // Special case for world entity with hitbox (that's a static prop): + // In this case, we've hit a static prop. Decal it! + staticpropmgr->AddDecalToStaticProp( vecStart, traceExt, iHitbox - 1, decalNumber, true, tr ); + } + else + { + effects->DecalShoot( decalNumber, + pEntity->entindex(), + pEntity->GetModel(), + pEntity->GetAbsOrigin(), + pEntity->GetAbsAngles(), + vecOrigin, + &vecPerp, + 0 ); + } + + } + + if( Impact( vecOrigin, vecStart, iMaterial, iDamageType, iHitbox, pEntity, tr, data.m_fFlags ) ) + { + // Check for custom effects based on the Decal index + PerformCustomEffects( vecOrigin, tr, vecShotDir, iMaterial, 1.0 ); + } +} + +DECLARE_CLIENT_EFFECT( "KnifeSlash", KnifeSlash ); |