diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/shared/sdk/sdk_fx_shared.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/shared/sdk/sdk_fx_shared.cpp')
| -rw-r--r-- | mp/src/game/shared/sdk/sdk_fx_shared.cpp | 448 |
1 files changed, 224 insertions, 224 deletions
diff --git a/mp/src/game/shared/sdk/sdk_fx_shared.cpp b/mp/src/game/shared/sdk/sdk_fx_shared.cpp index f81f63b4..e7ceb02f 100644 --- a/mp/src/game/shared/sdk/sdk_fx_shared.cpp +++ b/mp/src/game/shared/sdk/sdk_fx_shared.cpp @@ -1,224 +1,224 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-//=============================================================================//
-
-#include "cbase.h"
-#include "sdk_fx_shared.h"
-#include "weapon_sdkbase.h"
-
-#ifndef CLIENT_DLL
- #include "ilagcompensationmanager.h"
-#endif
-
-#ifdef CLIENT_DLL
-
-#include "fx_impact.h"
-#include "c_sdk_player.h"
-
- // this is a cheap ripoff from CBaseCombatWeapon::WeaponSound():
- void FX_WeaponSound(
- int iPlayerIndex,
- WeaponSound_t sound_type,
- const Vector &vOrigin,
- CSDKWeaponInfo *pWeaponInfo )
- {
-
- // If we have some sounds from the weapon classname.txt file, play a random one of them
- const char *shootsound = pWeaponInfo->aShootSounds[ sound_type ];
- if ( !shootsound || !shootsound[0] )
- return;
-
- CBroadcastRecipientFilter filter; // this is client side only
- if ( !te->CanPredict() )
- return;
-
- CBaseEntity::EmitSound( filter, iPlayerIndex, shootsound, &vOrigin );
- }
-
- class CGroupedSound
- {
- public:
- string_t m_SoundName;
- Vector m_vPos;
- };
-
- CUtlVector<CGroupedSound> g_GroupedSounds;
-
-
- // Called by the ImpactSound function.
- void ShotgunImpactSoundGroup( const char *pSoundName, const Vector &vEndPos )
- {
- // Don't play the sound if it's too close to another impact sound.
- for ( int i=0; i < g_GroupedSounds.Count(); i++ )
- {
- CGroupedSound *pSound = &g_GroupedSounds[i];
-
- if ( vEndPos.DistToSqr( pSound->m_vPos ) < 300*300 )
- {
- if ( Q_stricmp( pSound->m_SoundName, pSoundName ) == 0 )
- return;
- }
- }
-
- // Ok, play the sound and add it to the list.
- CLocalPlayerFilter filter;
- C_BaseEntity::EmitSound( filter, NULL, pSoundName, &vEndPos );
-
- int j = g_GroupedSounds.AddToTail();
- g_GroupedSounds[j].m_SoundName = pSoundName;
- g_GroupedSounds[j].m_vPos = vEndPos;
- }
-
-
- void StartGroupingSounds()
- {
- Assert( g_GroupedSounds.Count() == 0 );
- SetImpactSoundRoute( ShotgunImpactSoundGroup );
- }
-
-
- void EndGroupingSounds()
- {
- g_GroupedSounds.Purge();
- SetImpactSoundRoute( NULL );
- }
-
-#else
-
- #include "sdk_player.h"
- #include "te_firebullets.h"
-
- // Server doesn't play sounds anyway.
- void StartGroupingSounds() {}
- void EndGroupingSounds() {}
- void FX_WeaponSound ( int iPlayerIndex,
- WeaponSound_t sound_type,
- const Vector &vOrigin,
- CSDKWeaponInfo *pWeaponInfo ) {};
-
-#endif
-
-
-
-// This runs on both the client and the server.
-// On the server, it only does the damage calculations.
-// On the client, it does all the effects.
-void FX_FireBullets(
- int iPlayerIndex,
- const Vector &vOrigin,
- const QAngle &vAngles,
- int iWeaponID,
- int iMode,
- int iSeed,
- float flSpread
- )
-{
- bool bDoEffects = true;
-
-#ifdef CLIENT_DLL
- C_SDKPlayer *pPlayer = ToSDKPlayer( ClientEntityList().GetBaseEntity( iPlayerIndex ) );
-#else
- CSDKPlayer *pPlayer = ToSDKPlayer( UTIL_PlayerByIndex( iPlayerIndex) );
-#endif
-
- const char * weaponAlias = WeaponIDToAlias( iWeaponID );
-
- if ( !weaponAlias )
- {
- DevMsg("FX_FireBullets: weapon alias for ID %i not found\n", iWeaponID );
- return;
- }
-
- char wpnName[128];
- Q_snprintf( wpnName, sizeof( wpnName ), "weapon_%s", weaponAlias );
- WEAPON_FILE_INFO_HANDLE hWpnInfo = LookupWeaponInfoSlot( wpnName );
-
- if ( hWpnInfo == GetInvalidWeaponInfoHandle() )
- {
- DevMsg("FX_FireBullets: LookupWeaponInfoSlot failed for weapon %s\n", wpnName );
- return;
- }
-
- CSDKWeaponInfo *pWeaponInfo = static_cast< CSDKWeaponInfo* >( GetFileWeaponInfoFromHandle( hWpnInfo ) );
-
-#ifdef CLIENT_DLL
- // Do the firing animation event.
- if ( pPlayer && !pPlayer->IsDormant() )
- {
- if ( iMode == Primary_Mode )
- pPlayer->m_PlayerAnimState->DoAnimationEvent( PLAYERANIMEVENT_FIRE_GUN_PRIMARY );
- else
- pPlayer->m_PlayerAnimState->DoAnimationEvent( PLAYERANIMEVENT_FIRE_GUN_SECONDARY );
- }
-#else
- // if this is server code, send the effect over to client as temp entity
- // Dispatch one message for all the bullet impacts and sounds.
- TE_FireBullets(
- iPlayerIndex,
- vOrigin,
- vAngles,
- iWeaponID,
- iMode,
- iSeed,
- flSpread
- );
-
- bDoEffects = false; // no effects on server
-#endif
-
- iSeed++;
-
- int iDamage = pWeaponInfo->m_iDamage;
- int iAmmoType = pWeaponInfo->iAmmoType;
-
- WeaponSound_t sound_type = SINGLE;
-
- if ( bDoEffects)
- {
- FX_WeaponSound( iPlayerIndex, sound_type, vOrigin, pWeaponInfo );
- }
-
-
- // Fire bullets, calculate impacts & effects
-
- if ( !pPlayer )
- return;
-
- StartGroupingSounds();
-
-#if !defined (CLIENT_DLL)
- // Move other players back to history positions based on local player's lag
- lagcompensation->StartLagCompensation( pPlayer, pPlayer->GetCurrentCommand() );
-#endif
-
- for ( int iBullet=0; iBullet < pWeaponInfo->m_iBullets; iBullet++ )
- {
- RandomSeed( iSeed ); // init random system with this seed
-
- // Get circular gaussian spread.
- float x, y;
- x = RandomFloat( -0.5, 0.5 ) + RandomFloat( -0.5, 0.5 );
- y = RandomFloat( -0.5, 0.5 ) + RandomFloat( -0.5, 0.5 );
-
- iSeed++; // use new seed for next bullet
-
- pPlayer->FireBullet(
- vOrigin,
- vAngles,
- flSpread,
- iDamage,
- iAmmoType,
- pPlayer,
- bDoEffects,
- x,y );
- }
-
-#if !defined (CLIENT_DLL)
- lagcompensation->FinishLagCompensation( pPlayer );
-#endif
-
- EndGroupingSounds();
-}
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "sdk_fx_shared.h" +#include "weapon_sdkbase.h" + +#ifndef CLIENT_DLL + #include "ilagcompensationmanager.h" +#endif + +#ifdef CLIENT_DLL + +#include "fx_impact.h" +#include "c_sdk_player.h" + + // this is a cheap ripoff from CBaseCombatWeapon::WeaponSound(): + void FX_WeaponSound( + int iPlayerIndex, + WeaponSound_t sound_type, + const Vector &vOrigin, + CSDKWeaponInfo *pWeaponInfo ) + { + + // If we have some sounds from the weapon classname.txt file, play a random one of them + const char *shootsound = pWeaponInfo->aShootSounds[ sound_type ]; + if ( !shootsound || !shootsound[0] ) + return; + + CBroadcastRecipientFilter filter; // this is client side only + if ( !te->CanPredict() ) + return; + + CBaseEntity::EmitSound( filter, iPlayerIndex, shootsound, &vOrigin ); + } + + class CGroupedSound + { + public: + string_t m_SoundName; + Vector m_vPos; + }; + + CUtlVector<CGroupedSound> g_GroupedSounds; + + + // Called by the ImpactSound function. + void ShotgunImpactSoundGroup( const char *pSoundName, const Vector &vEndPos ) + { + // Don't play the sound if it's too close to another impact sound. + for ( int i=0; i < g_GroupedSounds.Count(); i++ ) + { + CGroupedSound *pSound = &g_GroupedSounds[i]; + + if ( vEndPos.DistToSqr( pSound->m_vPos ) < 300*300 ) + { + if ( Q_stricmp( pSound->m_SoundName, pSoundName ) == 0 ) + return; + } + } + + // Ok, play the sound and add it to the list. + CLocalPlayerFilter filter; + C_BaseEntity::EmitSound( filter, NULL, pSoundName, &vEndPos ); + + int j = g_GroupedSounds.AddToTail(); + g_GroupedSounds[j].m_SoundName = pSoundName; + g_GroupedSounds[j].m_vPos = vEndPos; + } + + + void StartGroupingSounds() + { + Assert( g_GroupedSounds.Count() == 0 ); + SetImpactSoundRoute( ShotgunImpactSoundGroup ); + } + + + void EndGroupingSounds() + { + g_GroupedSounds.Purge(); + SetImpactSoundRoute( NULL ); + } + +#else + + #include "sdk_player.h" + #include "te_firebullets.h" + + // Server doesn't play sounds anyway. + void StartGroupingSounds() {} + void EndGroupingSounds() {} + void FX_WeaponSound ( int iPlayerIndex, + WeaponSound_t sound_type, + const Vector &vOrigin, + CSDKWeaponInfo *pWeaponInfo ) {}; + +#endif + + + +// This runs on both the client and the server. +// On the server, it only does the damage calculations. +// On the client, it does all the effects. +void FX_FireBullets( + int iPlayerIndex, + const Vector &vOrigin, + const QAngle &vAngles, + int iWeaponID, + int iMode, + int iSeed, + float flSpread + ) +{ + bool bDoEffects = true; + +#ifdef CLIENT_DLL + C_SDKPlayer *pPlayer = ToSDKPlayer( ClientEntityList().GetBaseEntity( iPlayerIndex ) ); +#else + CSDKPlayer *pPlayer = ToSDKPlayer( UTIL_PlayerByIndex( iPlayerIndex) ); +#endif + + const char * weaponAlias = WeaponIDToAlias( iWeaponID ); + + if ( !weaponAlias ) + { + DevMsg("FX_FireBullets: weapon alias for ID %i not found\n", iWeaponID ); + return; + } + + char wpnName[128]; + Q_snprintf( wpnName, sizeof( wpnName ), "weapon_%s", weaponAlias ); + WEAPON_FILE_INFO_HANDLE hWpnInfo = LookupWeaponInfoSlot( wpnName ); + + if ( hWpnInfo == GetInvalidWeaponInfoHandle() ) + { + DevMsg("FX_FireBullets: LookupWeaponInfoSlot failed for weapon %s\n", wpnName ); + return; + } + + CSDKWeaponInfo *pWeaponInfo = static_cast< CSDKWeaponInfo* >( GetFileWeaponInfoFromHandle( hWpnInfo ) ); + +#ifdef CLIENT_DLL + // Do the firing animation event. + if ( pPlayer && !pPlayer->IsDormant() ) + { + if ( iMode == Primary_Mode ) + pPlayer->m_PlayerAnimState->DoAnimationEvent( PLAYERANIMEVENT_FIRE_GUN_PRIMARY ); + else + pPlayer->m_PlayerAnimState->DoAnimationEvent( PLAYERANIMEVENT_FIRE_GUN_SECONDARY ); + } +#else + // if this is server code, send the effect over to client as temp entity + // Dispatch one message for all the bullet impacts and sounds. + TE_FireBullets( + iPlayerIndex, + vOrigin, + vAngles, + iWeaponID, + iMode, + iSeed, + flSpread + ); + + bDoEffects = false; // no effects on server +#endif + + iSeed++; + + int iDamage = pWeaponInfo->m_iDamage; + int iAmmoType = pWeaponInfo->iAmmoType; + + WeaponSound_t sound_type = SINGLE; + + if ( bDoEffects) + { + FX_WeaponSound( iPlayerIndex, sound_type, vOrigin, pWeaponInfo ); + } + + + // Fire bullets, calculate impacts & effects + + if ( !pPlayer ) + return; + + StartGroupingSounds(); + +#if !defined (CLIENT_DLL) + // Move other players back to history positions based on local player's lag + lagcompensation->StartLagCompensation( pPlayer, pPlayer->GetCurrentCommand() ); +#endif + + for ( int iBullet=0; iBullet < pWeaponInfo->m_iBullets; iBullet++ ) + { + RandomSeed( iSeed ); // init random system with this seed + + // Get circular gaussian spread. + float x, y; + x = RandomFloat( -0.5, 0.5 ) + RandomFloat( -0.5, 0.5 ); + y = RandomFloat( -0.5, 0.5 ) + RandomFloat( -0.5, 0.5 ); + + iSeed++; // use new seed for next bullet + + pPlayer->FireBullet( + vOrigin, + vAngles, + flSpread, + iDamage, + iAmmoType, + pPlayer, + bDoEffects, + x,y ); + } + +#if !defined (CLIENT_DLL) + lagcompensation->FinishLagCompensation( pPlayer ); +#endif + + EndGroupingSounds(); +} + |