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/server/hl2/weapon_ar1.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/server/hl2/weapon_ar1.cpp')
| -rw-r--r-- | mp/src/game/server/hl2/weapon_ar1.cpp | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/mp/src/game/server/hl2/weapon_ar1.cpp b/mp/src/game/server/hl2/weapon_ar1.cpp new file mode 100644 index 00000000..0a3de055 --- /dev/null +++ b/mp/src/game/server/hl2/weapon_ar1.cpp @@ -0,0 +1,182 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "basehlcombatweapon.h"
+#include "NPCevent.h"
+#include "basecombatcharacter.h"
+#include "ai_basenpc.h"
+#include "player.h"
+#include "in_buttons.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+#define DAMAGE_PER_SECOND 10
+
+#define MAX_SETTINGS 5
+
+float RateOfFire[ MAX_SETTINGS ] =
+{
+ 0.1,
+ 0.2,
+ 0.5,
+ 0.7,
+ 1.0,
+};
+
+float Damage[ MAX_SETTINGS ] =
+{
+ 2,
+ 4,
+ 10,
+ 14,
+ 20,
+};
+
+
+//=========================================================
+//=========================================================
+class CWeaponAR1 : public CHLMachineGun
+{
+ DECLARE_DATADESC();
+public:
+ DECLARE_CLASS( CWeaponAR1, CHLMachineGun );
+
+ DECLARE_SERVERCLASS();
+
+ CWeaponAR1();
+
+ int m_ROF;
+
+ void Precache( void );
+ bool Deploy( void );
+
+ float GetFireRate( void ) {return RateOfFire[ m_ROF ];}
+
+ int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; }
+
+ void SecondaryAttack( void );
+
+ virtual void FireBullets( const FireBulletsInfo_t &info );
+
+ virtual const Vector& GetBulletSpread( void )
+ {
+ static const Vector cone = VECTOR_CONE_10DEGREES;
+ return cone;
+ }
+
+ void Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator )
+ {
+ switch( pEvent->event )
+ {
+ case EVENT_WEAPON_AR1:
+ {
+ Vector vecShootOrigin, vecShootDir;
+ vecShootOrigin = pOperator->Weapon_ShootPosition( );
+
+ CAI_BaseNPC *npc = pOperator->MyNPCPointer();
+ ASSERT( npc != NULL );
+
+ vecShootDir = npc->GetActualShootTrajectory( vecShootOrigin );
+
+ WeaponSound(SINGLE_NPC);
+ pOperator->FireBullets( 1, vecShootOrigin, vecShootDir, VECTOR_CONE_PRECALCULATED, MAX_TRACE_LENGTH, m_iPrimaryAmmoType, 2 );
+ pOperator->DoMuzzleFlash();
+ }
+ break;
+ default:
+ CBaseCombatWeapon::Operator_HandleAnimEvent( pEvent, pOperator );
+ break;
+ }
+ }
+ DECLARE_ACTTABLE();
+};
+
+IMPLEMENT_SERVERCLASS_ST(CWeaponAR1, DT_WeaponAR1)
+END_SEND_TABLE()
+
+LINK_ENTITY_TO_CLASS( weapon_ar1, CWeaponAR1 );
+PRECACHE_WEAPON_REGISTER(weapon_ar1);
+
+acttable_t CWeaponAR1::m_acttable[] =
+{
+ { ACT_RANGE_ATTACK1, ACT_RANGE_ATTACK_AR1, true },
+};
+
+IMPLEMENT_ACTTABLE(CWeaponAR1);
+
+//---------------------------------------------------------
+// Save/Restore
+//---------------------------------------------------------
+BEGIN_DATADESC( CWeaponAR1 )
+
+ DEFINE_FIELD( m_ROF, FIELD_INTEGER ),
+
+END_DATADESC()
+
+
+CWeaponAR1::CWeaponAR1( )
+{
+ m_ROF = 0;
+}
+
+void CWeaponAR1::Precache( void )
+{
+ BaseClass::Precache();
+}
+
+bool CWeaponAR1::Deploy( void )
+{
+ //CBaseCombatCharacter *pOwner = m_hOwner;
+ return BaseClass::Deploy();
+}
+
+
+//=========================================================
+//=========================================================
+void CWeaponAR1::FireBullets( const FireBulletsInfo_t &info )
+{
+ if(CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ))
+ {
+ pPlayer->FireBullets( info );
+ }
+}
+
+
+void CWeaponAR1::SecondaryAttack( void )
+{
+ CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
+ if ( pPlayer )
+ {
+ pPlayer->m_nButtons &= ~IN_ATTACK2;
+ }
+
+ m_flNextSecondaryAttack = gpGlobals->curtime + 0.1;
+
+ m_ROF += 1;
+
+ if( m_ROF == MAX_SETTINGS )
+ {
+ m_ROF = 0;
+ }
+
+ int i;
+
+ Msg( "\n" );
+ for( i = 0 ; i < MAX_SETTINGS ; i++ )
+ {
+ if( i == m_ROF )
+ {
+ Msg( "|" );
+ }
+ else
+ {
+ Msg( "-" );
+ }
+ }
+ Msg( "\n" );
+}
|