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.
|
|
//========= 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
|