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
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
|
|
|