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/shared/hl1/hl1mp_weapon_357.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/shared/hl1/hl1mp_weapon_357.cpp')
| -rw-r--r-- | game/shared/hl1/hl1mp_weapon_357.cpp | 289 |
1 files changed, 289 insertions, 0 deletions
diff --git a/game/shared/hl1/hl1mp_weapon_357.cpp b/game/shared/hl1/hl1mp_weapon_357.cpp new file mode 100644 index 0000000..33d6757 --- /dev/null +++ b/game/shared/hl1/hl1mp_weapon_357.cpp @@ -0,0 +1,289 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: 357 - hand gun +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "npcevent.h" +#include "hl1mp_basecombatweapon_shared.h" +#ifdef CLIENT_DLL +#include "c_baseplayer.h" +#else +#include "player.h" +#endif +#include "gamerules.h" +#include "in_buttons.h" +#ifndef CLIENT_DLL +#include "soundent.h" +#include "game.h" +#endif +#include "vstdlib/random.h" +#include "engine/IEngineSound.h" + +#ifdef CLIENT_DLL +#define CWeapon357 C_Weapon357 +#endif + +//----------------------------------------------------------------------------- +// CWeapon357 +//----------------------------------------------------------------------------- + +class CWeapon357 : public CBaseHL1MPCombatWeapon +{ + DECLARE_CLASS( CWeapon357, CBaseHL1CombatWeapon ); +public: + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + CWeapon357( void ); + + void Precache( void ); + bool Deploy( void ); + void PrimaryAttack( void ); + void SecondaryAttack( void ); + bool Reload( void ); + void WeaponIdle( void ); + bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL ); + +// DECLARE_SERVERCLASS(); +// DECLARE_DATADESC(); + +private: + void ToggleZoom( void ); + +private: + CNetworkVar( float, m_fInZoom ); +}; + +IMPLEMENT_NETWORKCLASS_ALIASED( Weapon357, DT_Weapon357 ); + +BEGIN_NETWORK_TABLE( CWeapon357, DT_Weapon357 ) +#ifdef CLIENT_DLL + RecvPropFloat( RECVINFO( m_fInZoom ) ), +#else + SendPropFloat( SENDINFO( m_fInZoom ) ), +#endif +END_NETWORK_TABLE() + +BEGIN_PREDICTION_DATA( CWeapon357 ) +#ifdef CLIENT_DLL + DEFINE_PRED_FIELD( m_fInZoom, FIELD_FLOAT, FTYPEDESC_INSENDTABLE ), +#endif +END_PREDICTION_DATA() + +LINK_ENTITY_TO_CLASS( weapon_357, CWeapon357 ); + +PRECACHE_WEAPON_REGISTER( weapon_357 ); + +//IMPLEMENT_SERVERCLASS_ST( CWeapon357, DT_Weapon357 ) +//END_SEND_TABLE() + +//BEGIN_DATADESC( CWeapon357 ) +//END_DATADESC() + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CWeapon357::CWeapon357( void ) +{ + m_bReloadsSingly = false; + m_bFiresUnderwater = false; + m_fInZoom = false; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CWeapon357::Precache( void ) +{ + BaseClass::Precache(); + +#ifndef CLIENT_DLL + UTIL_PrecacheOther( "ammo_357" ); +#endif +} + +bool CWeapon357::Deploy( void ) +{ +// Bodygroup stuff not currently working correctly +// if ( g_pGameRules->IsMultiplayer() ) +// { + // enable laser sight geometry. +// SetBodygroup( 4, 1 ); +// } +// else +// { +// SetBodygroup( 4, 0 ); +// } + + return BaseClass::Deploy(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CWeapon357::PrimaryAttack( void ) +{ + // Only the player fires this way so we can cast + CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); + + if ( !pPlayer ) + { + return; + } + + if ( m_iClip1 <= 0 ) + { + if ( !m_bFireOnEmpty ) + { + Reload(); + } + else + { + WeaponSound( EMPTY ); + m_flNextPrimaryAttack = 0.15; + } + + return; + } + + WeaponSound( SINGLE ); + pPlayer->DoMuzzleFlash(); + + SendWeaponAnim( ACT_VM_PRIMARYATTACK ); + pPlayer->SetAnimation( PLAYER_ATTACK1 ); + + m_flNextPrimaryAttack = gpGlobals->curtime + 0.75; + m_flNextSecondaryAttack = gpGlobals->curtime + 0.75; + + m_iClip1--; + + Vector vecSrc = pPlayer->Weapon_ShootPosition(); + Vector vecAiming = pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); + +// pPlayer->FireBullets( 1, vecSrc, vecAiming, VECTOR_CONE_1DEGREES, MAX_TRACE_LENGTH, m_iPrimaryAmmoType, 0 ); + + FireBulletsInfo_t info( 1, vecSrc, vecAiming, VECTOR_CONE_1DEGREES, MAX_TRACE_LENGTH, m_iPrimaryAmmoType ); + info.m_pAttacker = pPlayer; + + pPlayer->FireBullets( info ); + +#ifndef CLIENT_DLL + pPlayer->SetMuzzleFlashTime( gpGlobals->curtime + 0.5 ); +#endif + + pPlayer->ViewPunch( QAngle( -10, 0, 0 ) ); + +#ifndef CLIENT_DLL + CSoundEnt::InsertSound( SOUND_COMBAT, GetAbsOrigin(), 600, 0.2 ); +#endif + + if ( !m_iClip1 && pPlayer->GetAmmoCount( m_iPrimaryAmmoType ) <= 0 ) + { + // HEV suit - indicate out of ammo condition + pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 ); + } +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CWeapon357::SecondaryAttack( void ) +{ + // only in multiplayer + if ( !g_pGameRules->IsMultiplayer() ) + { +#ifndef CLIENT_DLL + // unless we have cheats on + if ( !sv_cheats->GetBool() ) + { + return; + } +#endif + } + + ToggleZoom(); + + m_flNextSecondaryAttack = gpGlobals->curtime + 0.5; +} + + +bool CWeapon357::Reload( void ) +{ + bool fRet; + + fRet = DefaultReload( GetMaxClip1(), GetMaxClip2(), ACT_VM_RELOAD ); + if ( fRet ) + { + if ( m_fInZoom ) + { + ToggleZoom(); + } + } + + return fRet; +} + + +void CWeapon357::WeaponIdle( void ) +{ + CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); + if ( pPlayer ) + { + pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES ); + } + + if ( !HasWeaponIdleTimeElapsed() ) + return; + + if ( random->RandomFloat( 0, 1 ) <= 0.9 ) + { + SendWeaponAnim( ACT_VM_IDLE ); + } + else + { + SendWeaponAnim( ACT_VM_FIDGET ); + } +} + + +bool CWeapon357::Holster( CBaseCombatWeapon *pSwitchingTo ) +{ + if ( m_fInZoom ) + { + ToggleZoom(); + } + + return BaseClass::Holster( pSwitchingTo ); +} + + +void CWeapon357::ToggleZoom( void ) +{ + CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); + if ( !pPlayer ) + { + return; + } + +#ifndef CLIENT_DLL + if ( m_fInZoom ) + { + if ( pPlayer->SetFOV( this, 0 ) ) + { + m_fInZoom = false; + pPlayer->ShowViewModel( true ); + } + } + else + { + if ( pPlayer->SetFOV( this, 40 ) ) + { + m_fInZoom = true; + pPlayer->ShowViewModel( false ); + } + } +#endif +} |