summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_class_pyro.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf2/tf_class_pyro.cpp')
-rw-r--r--game/server/tf2/tf_class_pyro.cpp164
1 files changed, 164 insertions, 0 deletions
diff --git a/game/server/tf2/tf_class_pyro.cpp b/game/server/tf2/tf_class_pyro.cpp
new file mode 100644
index 0000000..a3dd5fd
--- /dev/null
+++ b/game/server/tf2/tf_class_pyro.cpp
@@ -0,0 +1,164 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "basecombatweapon.h"
+#include "tf_player.h"
+#include "tf_class_pyro.h"
+#include "weapon_twohandedcontainer.h"
+#include "weapon_gas_can.h"
+#include "weapon_flame_thrower.h"
+#include "gasoline_shared.h"
+#include "weapon_combatshield.h"
+
+BEGIN_SEND_TABLE_NOBASE( CPlayerClassPyro, DT_PlayerClassPyroData )
+END_SEND_TABLE()
+
+
+CPlayerClassPyro::CPlayerClassPyro( CBaseTFPlayer *pPlayer, TFClass iClass ) : CPlayerClass( pPlayer, iClass )
+{
+ for (int i = 0; i < MAX_TF_TEAMS; ++i)
+ {
+ SetClassModel( MAKE_STRING(GetClassModelString(i)), i );
+ }
+}
+
+
+CPlayerClassPyro::~CPlayerClassPyro()
+{
+}
+
+
+void CPlayerClassPyro::SetupSizeData()
+{
+ // Initially set the player to the base player class standing hull size.
+ m_pPlayer->SetCollisionBounds( PYROCLASS_HULL_STAND_MIN, PYROCLASS_HULL_STAND_MAX );
+ m_pPlayer->SetViewOffset( PYROCLASS_VIEWOFFSET_STAND );
+ m_pPlayer->m_Local.m_flStepSize = PYROCLASS_STEPSIZE;
+}
+
+
+void CPlayerClassPyro::ClassActivate()
+{
+ BaseClass::ClassActivate();
+
+ // Setup movement data.
+ SetupMoveData();
+
+ memset( &m_ClassData, 0, sizeof( m_ClassData ) );
+}
+
+
+const char *CPlayerClassPyro::GetClassModelString( int nTeam )
+{
+ if (nTeam == TEAM_HUMANS)
+ return "models/player/medic.mdl";
+ else
+ return "models/player/recon.mdl";
+}
+
+
+void CPlayerClassPyro::CreateClass()
+{
+ BaseClass::CreateClass();
+
+ // Create our two handed weapon layout
+ m_hWpnFlameThrower = static_cast< CWeaponFlameThrower * >( m_pPlayer->GiveNamedItem( "weapon_flame_thrower" ) );
+ m_hWpnGasCan = static_cast< CWeaponGasCan * >( m_pPlayer->GiveNamedItem( "weapon_gas_can" ) );
+ m_hWpnShield = m_pPlayer->GetCombatShield();
+ CWeaponTwoHandedContainer *p = ( CWeaponTwoHandedContainer * )m_pPlayer->Weapon_OwnsThisType( "weapon_twohandedcontainer" );
+ if ( !p )
+ {
+ p = static_cast< CWeaponTwoHandedContainer * >( m_pPlayer->GiveNamedItem( "weapon_twohandedcontainer" ) );
+ }
+ if ( p && m_hWpnShield.Get() && m_hWpnGasCan.Get() )
+ {
+ m_hWpnShield->SetReflectViewModelAnimations( true );
+ p->SetWeapons( m_hWpnGasCan, m_hWpnShield );
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CPlayerClassPyro::SetPlayerHull()
+{
+ if ( m_pPlayer->GetFlags() & FL_DUCKING )
+ {
+ m_pPlayer->SetCollisionBounds( PYROCLASS_HULL_DUCK_MIN, PYROCLASS_HULL_DUCK_MAX );
+ }
+ else
+ {
+ m_pPlayer->SetCollisionBounds( PYROCLASS_HULL_STAND_MIN, PYROCLASS_HULL_STAND_MAX );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CPlayerClassPyro::GetPlayerHull( bool bDucking, Vector &vecMin, Vector &vecMax )
+{
+ if ( bDucking )
+ {
+ VectorCopy( PYROCLASS_HULL_DUCK_MIN, vecMin );
+ VectorCopy( PYROCLASS_HULL_DUCK_MAX, vecMax );
+ }
+ else
+ {
+ VectorCopy( PYROCLASS_HULL_STAND_MIN, vecMin );
+ VectorCopy( PYROCLASS_HULL_STAND_MAX, vecMax );
+ }
+}
+
+
+void CPlayerClassPyro::ResetViewOffset()
+{
+ if ( m_pPlayer )
+ {
+ m_pPlayer->SetViewOffset( PYROCLASS_VIEWOFFSET_STAND );
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CPlayerClassPyro::InitVCollision()
+{
+ CPhysCollide *pStandModel = PhysCreateBbox( PYROCLASS_HULL_STAND_MIN, PYROCLASS_HULL_STAND_MAX );
+ CPhysCollide *pCrouchModel = PhysCreateBbox( PYROCLASS_HULL_DUCK_MIN, PYROCLASS_HULL_DUCK_MAX );
+ m_pPlayer->SetupVPhysicsShadow( pStandModel, "tfplayer_medic_stand", pCrouchModel, "tfplayer_medic_crouch" );
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+bool CPlayerClassPyro::ResupplyAmmo( float flFraction, ResupplyReason_t reason )
+{
+ bool bGiven = false;
+
+ if ((reason == RESUPPLY_ALL_FROM_STATION) || (reason == RESUPPLY_AMMO_FROM_STATION))
+ {
+ if (ResupplyAmmoType( 80 * flFraction, PYRO_AMMO_TYPE ))
+ bGiven = true;
+ }
+
+ // On respawn, resupply base weapon ammo
+ if ( reason == RESUPPLY_RESPAWN )
+ {
+ if ( ResupplyAmmoType( 30, PYRO_AMMO_TYPE ) )
+ bGiven = true;
+ }
+
+ if ( BaseClass::ResupplyAmmo(flFraction, reason) )
+ bGiven = true;
+
+ return bGiven;
+}
+