diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/shared/sdk/weapon_mp5.cpp | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/shared/sdk/weapon_mp5.cpp')
| -rw-r--r-- | mp/src/game/shared/sdk/weapon_mp5.cpp | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/mp/src/game/shared/sdk/weapon_mp5.cpp b/mp/src/game/shared/sdk/weapon_mp5.cpp new file mode 100644 index 00000000..69a32f97 --- /dev/null +++ b/mp/src/game/shared/sdk/weapon_mp5.cpp @@ -0,0 +1,168 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "weapon_sdkbase.h"
+#include "sdk_fx_shared.h"
+
+
+#if defined( CLIENT_DLL )
+
+ #define CWeaponMP5 C_WeaponMP5
+ #include "c_sdk_player.h"
+
+#else
+
+ #include "sdk_player.h"
+
+#endif
+
+
+class CWeaponMP5 : public CWeaponSDKBase
+{
+public:
+ DECLARE_CLASS( CWeaponMP5, CWeaponSDKBase );
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ CWeaponMP5();
+
+ virtual void PrimaryAttack();
+ virtual bool Deploy();
+ virtual bool Reload();
+ virtual void WeaponIdle();
+
+ virtual SDKWeaponID GetWeaponID( void ) const { return WEAPON_MP5; }
+
+
+private:
+
+ CWeaponMP5( const CWeaponMP5 & );
+
+ void Fire( float flSpread );
+};
+
+IMPLEMENT_NETWORKCLASS_ALIASED( WeaponMP5, DT_WeaponMP5 )
+
+BEGIN_NETWORK_TABLE( CWeaponMP5, DT_WeaponMP5 )
+END_NETWORK_TABLE()
+
+BEGIN_PREDICTION_DATA( CWeaponMP5 )
+END_PREDICTION_DATA()
+
+LINK_ENTITY_TO_CLASS( weapon_mp5, CWeaponMP5 );
+PRECACHE_WEAPON_REGISTER( weapon_mp5 );
+
+
+
+CWeaponMP5::CWeaponMP5()
+{
+}
+
+bool CWeaponMP5::Deploy( )
+{
+ CSDKPlayer *pPlayer = GetPlayerOwner();
+ pPlayer->m_iShotsFired = 0;
+
+ return BaseClass::Deploy();
+}
+
+bool CWeaponMP5::Reload( )
+{
+ CSDKPlayer *pPlayer = GetPlayerOwner();
+
+ if (pPlayer->GetAmmoCount( GetPrimaryAmmoType() ) <= 0)
+ return false;
+
+ int iResult = DefaultReload( GetMaxClip1(), GetMaxClip2(), ACT_VM_RELOAD );
+ if ( !iResult )
+ return false;
+
+ pPlayer->SetAnimation( PLAYER_RELOAD );
+
+#ifndef CLIENT_DLL
+ if ((iResult) && (pPlayer->GetFOV() != pPlayer->GetDefaultFOV()))
+ {
+ pPlayer->SetFOV( pPlayer, pPlayer->GetDefaultFOV() );
+ }
+#endif
+
+ pPlayer->m_iShotsFired = 0;
+
+ return true;
+}
+
+void CWeaponMP5::PrimaryAttack( void )
+{
+ const CSDKWeaponInfo &pWeaponInfo = GetSDKWpnData();
+ CSDKPlayer *pPlayer = GetPlayerOwner();
+
+ float flCycleTime = pWeaponInfo.m_flCycleTime;
+
+ bool bPrimaryMode = true;
+
+ float flSpread = 0.01f;
+
+ // more spread when jumping
+ if ( !FBitSet( pPlayer->GetFlags(), FL_ONGROUND ) )
+ flSpread = 0.05f;
+
+ pPlayer->m_iShotsFired++;
+
+ // Out of ammo?
+ if ( m_iClip1 <= 0 )
+ {
+ if (m_bFireOnEmpty)
+ {
+ PlayEmptySound();
+ m_flNextPrimaryAttack = gpGlobals->curtime + 0.2;
+ }
+ }
+
+ SendWeaponAnim( ACT_VM_PRIMARYATTACK );
+
+ m_iClip1--;
+
+ // player "shoot" animation
+ pPlayer->SetAnimation( PLAYER_ATTACK1 );
+
+ FX_FireBullets(
+ pPlayer->entindex(),
+ pPlayer->Weapon_ShootPosition(),
+ pPlayer->EyeAngles() + pPlayer->GetPunchAngle(),
+ GetWeaponID(),
+ bPrimaryMode?Primary_Mode:Secondary_Mode,
+ CBaseEntity::GetPredictionRandomSeed() & 255,
+ flSpread );
+
+ pPlayer->DoMuzzleFlash();
+
+ m_flNextPrimaryAttack = m_flNextSecondaryAttack = gpGlobals->curtime + flCycleTime;
+
+ if (!m_iClip1 && pPlayer->GetAmmoCount( m_iPrimaryAmmoType ) <= 0)
+ {
+ // HEV suit - indicate out of ammo condition
+ pPlayer->SetSuitUpdate("!HEV_AMO0", false, 0);
+ }
+
+ // start idle animation in 5 seconds
+ SetWeaponIdleTime( gpGlobals->curtime + 5.0 );
+}
+
+void CWeaponMP5::WeaponIdle()
+{
+ if (m_flTimeWeaponIdle > gpGlobals->curtime)
+ return;
+
+ // only idle if the slid isn't back
+ if ( m_iClip1 != 0 )
+ {
+ SetWeaponIdleTime( gpGlobals->curtime + 5.0f );
+ SendWeaponAnim( ACT_VM_IDLE );
+ }
+}
+
+
|