Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

115 lines
3.3 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Weapon Knife Class
//
//=============================================================================
#ifndef TF_WEAPON_KNIFE_H
#define TF_WEAPON_KNIFE_H
#ifdef _WIN32
#pragma once
#endif
#include "tf_weaponbase_melee.h"
#ifdef CLIENT_DLL
#define CTFKnife C_TFKnife
#endif
// Knives use the "set_weapon_mode" attribute to define which type of knife they are
// Keep this enum in sync with the values used for set_weapon_mode.
enum knife_weapontypes_t
{
KNIFE_STANDARD = 0,
KNIFE_DISGUISE_ONKILL = 1,
KNIFE_MOVEMENT_CLOAK = 2, // The Cloak and Dagger
KNIFE_ICICLE = 3,
};
//=============================================================================
//
// Knife class.
//
class CTFKnife : public CTFWeaponBaseMelee
{
public:
DECLARE_CLASS( CTFKnife, CTFWeaponBaseMelee );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
CTFKnife();
virtual void PrimaryAttack( void ) OVERRIDE;
virtual int GetWeaponID( void ) const OVERRIDE { return TF_WEAPON_KNIFE; }
int GetKnifeType( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_weapon_mode ); return iMode; };
virtual float GetMeleeDamage( CBaseEntity *pTarget, int* piDamageType, int* piCustomDamage ) OVERRIDE;
virtual void SendPlayerAnimEvent( CTFPlayer *pPlayer ) OVERRIDE;
virtual bool CanDeploy( void ) OVERRIDE;
virtual bool Deploy( void ) OVERRIDE;
void BackstabVMThink( void );
bool SendWeaponAnim( int iActivity );
bool CanPerformBackstabAgainstTarget( CTFPlayer *pTarget ); // "backstab" sometimes means "frontstab"
bool IsBehindAndFacingTarget( CTFPlayer *pTarget );
bool IsBackstab( void ) { return (m_hBackstabVictim.Get() != NULL); }
void BackstabBlocked( void );
bool ShouldDisguiseOnBackstab( void );
void DisguiseOnKill();
void ProcessDisguiseImpulse();
virtual bool CanHolster( void ) const OVERRIDE;
virtual void ItemPostFrame( void ) OVERRIDE;
virtual void ItemPreFrame( void ) OVERRIDE;
virtual void ItemBusyFrame( void ) OVERRIDE;
virtual void ItemHolsterFrame( void ) OVERRIDE;
virtual bool CalcIsAttackCriticalHelper( void ) OVERRIDE;
virtual bool CalcIsAttackCriticalHelperNoCrits( void ) OVERRIDE;
virtual bool DoSwingTrace( trace_t &trace ) OVERRIDE;
virtual void WeaponRegenerate( void ) OVERRIDE;
virtual void WeaponReset( void ) OVERRIDE;
#ifdef GAME_DLL
virtual void ApplyOnInjuredAttributes( CTFPlayer *pVictim, CTFPlayer *pAttacker, const CTakeDamageInfo &info ) OVERRIDE; // when owner of this weapon is hit
bool DecreaseRegenerationTime( float value, bool bForce );
#endif
float GetProgress( void );
const char* GetEffectLabelText( void ) { return "#TF_KNIFE"; }
private:
void ResetVars( void );
private:
float m_flBlockedTime;
bool m_bAllowHolsterBecauseForced;
CHandle<CTFPlayer> m_hBackstabVictim;
CNetworkVar( bool, m_bReadyToBackstab );
CNetworkVar( bool, m_bKnifeExists );
CNetworkVar( float, m_flKnifeRegenerateDuration );
CNetworkVar( float, m_flKnifeMeltTimestamp );
bool m_bWasTaunting;
CTFKnife( const CTFKnife & ) {}
};
inline float CTFKnife::GetProgress( void )
{
if ( m_bKnifeExists )
{
return 1.0f;
}
float meltedTime = gpGlobals->curtime - m_flKnifeMeltTimestamp;
return meltedTime / m_flKnifeRegenerateDuration;
}
#endif // TF_WEAPON_KNIFE_H