mirror of
https://github.com/nillerusr/source-engine.git
synced 2025-04-07 17:04:30 +00:00
205 lines
5.4 KiB
C++
205 lines
5.4 KiB
C++
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
#include "cbase.h"
|
|
#include "tf_weapon_grenadelauncher.h"
|
|
#include "tf_fx_shared.h"
|
|
|
|
// Client specific.
|
|
#ifdef CLIENT_DLL
|
|
#include "c_tf_player.h"
|
|
// Server specific.
|
|
#else
|
|
#include "tf_player.h"
|
|
#include "tf_gamestats.h"
|
|
#endif
|
|
|
|
//=============================================================================
|
|
//
|
|
// Weapon Grenade Launcher tables.
|
|
//
|
|
IMPLEMENT_NETWORKCLASS_ALIASED( TFGrenadeLauncher, DT_WeaponGrenadeLauncher )
|
|
|
|
BEGIN_NETWORK_TABLE( CTFGrenadeLauncher, DT_WeaponGrenadeLauncher )
|
|
END_NETWORK_TABLE()
|
|
|
|
BEGIN_PREDICTION_DATA( CTFGrenadeLauncher )
|
|
END_PREDICTION_DATA()
|
|
|
|
LINK_ENTITY_TO_CLASS( tf_weapon_grenadelauncher, CTFGrenadeLauncher );
|
|
PRECACHE_WEAPON_REGISTER( tf_weapon_grenadelauncher );
|
|
|
|
// Server specific.
|
|
#ifndef CLIENT_DLL
|
|
BEGIN_DATADESC( CTFGrenadeLauncher )
|
|
END_DATADESC()
|
|
#endif
|
|
|
|
#define TF_GRENADE_LAUNCER_MIN_VEL 1200
|
|
|
|
//=============================================================================
|
|
//
|
|
// Weapon Grenade Launcher functions.
|
|
//
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input : -
|
|
//-----------------------------------------------------------------------------
|
|
CTFGrenadeLauncher::CTFGrenadeLauncher()
|
|
{
|
|
m_bReloadsSingly = true;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input : -
|
|
//-----------------------------------------------------------------------------
|
|
CTFGrenadeLauncher::~CTFGrenadeLauncher()
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CTFGrenadeLauncher::Spawn( void )
|
|
{
|
|
m_iAltFireHint = HINT_ALTFIRE_GRENADELAUNCHER;
|
|
BaseClass::Spawn();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Reset the charge when we holster
|
|
//-----------------------------------------------------------------------------
|
|
bool CTFGrenadeLauncher::Holster( CBaseCombatWeapon *pSwitchingTo )
|
|
{
|
|
return BaseClass::Holster( pSwitchingTo );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Reset the charge when we deploy
|
|
//-----------------------------------------------------------------------------
|
|
bool CTFGrenadeLauncher::Deploy( void )
|
|
{
|
|
return BaseClass::Deploy();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
int CTFGrenadeLauncher::GetMaxClip1( void ) const
|
|
{
|
|
#ifdef _X360
|
|
return TF_GRENADE_LAUNCHER_XBOX_CLIP;
|
|
#endif
|
|
|
|
return BaseClass::GetMaxClip1();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
int CTFGrenadeLauncher::GetDefaultClip1( void ) const
|
|
{
|
|
#ifdef _X360
|
|
return TF_GRENADE_LAUNCHER_XBOX_CLIP;
|
|
#endif
|
|
|
|
return BaseClass::GetDefaultClip1();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CTFGrenadeLauncher::PrimaryAttack( void )
|
|
{
|
|
// Check for ammunition.
|
|
if ( m_iClip1 <= 0 && m_iClip1 != -1 )
|
|
return;
|
|
|
|
// Are we capable of firing again?
|
|
if ( m_flNextPrimaryAttack > gpGlobals->curtime )
|
|
return;
|
|
|
|
if ( !CanAttack() )
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_iWeaponMode = TF_WEAPON_PRIMARY_MODE;
|
|
|
|
LaunchGrenade();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CTFGrenadeLauncher::WeaponIdle( void )
|
|
{
|
|
BaseClass::WeaponIdle();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CTFGrenadeLauncher::LaunchGrenade( void )
|
|
{
|
|
// Get the player owning the weapon.
|
|
CTFPlayer *pPlayer = ToTFPlayer( GetPlayerOwner() );
|
|
if ( !pPlayer )
|
|
return;
|
|
|
|
CalcIsAttackCritical();
|
|
|
|
SendWeaponAnim( ACT_VM_PRIMARYATTACK );
|
|
|
|
pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
|
pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
|
|
|
|
FireProjectile( pPlayer );
|
|
|
|
#if !defined( CLIENT_DLL )
|
|
pPlayer->SpeakWeaponFire();
|
|
CTF_GameStats.Event_PlayerFiredWeapon( pPlayer, IsCurrentAttackACrit() );
|
|
#endif
|
|
|
|
// Set next attack times.
|
|
m_flNextPrimaryAttack = gpGlobals->curtime + m_pWeaponInfo->GetWeaponData( m_iWeaponMode ).m_flTimeFireDelay;
|
|
|
|
SetWeaponIdleTime( gpGlobals->curtime + SequenceDuration() );
|
|
|
|
// Check the reload mode and behave appropriately.
|
|
if ( m_bReloadsSingly )
|
|
{
|
|
m_iReloadMode.Set( TF_RELOAD_START );
|
|
}
|
|
}
|
|
|
|
float CTFGrenadeLauncher::GetProjectileSpeed( void )
|
|
{
|
|
return TF_GRENADE_LAUNCER_MIN_VEL;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Detonate this demoman's pipebombs
|
|
//-----------------------------------------------------------------------------
|
|
void CTFGrenadeLauncher::SecondaryAttack( void )
|
|
{
|
|
#ifdef GAME_DLL
|
|
|
|
if ( !CanAttack() )
|
|
return;
|
|
|
|
CTFPlayer *pOwner = ToTFPlayer( GetOwner() );
|
|
pOwner->DoClassSpecialSkill();
|
|
|
|
#endif
|
|
}
|
|
|
|
bool CTFGrenadeLauncher::Reload( void )
|
|
{
|
|
return BaseClass::Reload();
|
|
}
|