//========= Copyright Valve Corporation, All rights reserved. ============//
//
//
//=============================================================================
#ifndef TF_WEAPON_REVOLVER_H
#define TF_WEAPON_REVOLVER_H
#ifdef _WIN32
#pragma once
#endif

#include "tf_weaponbase_gun.h"

// Client specific.
#ifdef CLIENT_DLL
#define CTFRevolver C_TFRevolver
#define CTFRevolver_Secondary C_TFRevolver_Secondary
#endif

//=============================================================================
//
// TF Weapon Revolver.
//
class CTFRevolver : public CTFWeaponBaseGun
{
public:

	DECLARE_CLASS( CTFRevolver, CTFWeaponBaseGun );
	DECLARE_NETWORKCLASS(); 
	DECLARE_PREDICTABLE();

// Server specific.
#ifdef GAME_DLL
	DECLARE_DATADESC();
#endif

	CTFRevolver();
	~CTFRevolver() {}

	virtual int		GetWeaponID( void ) const			{ return TF_WEAPON_REVOLVER; }
	virtual int		GetDamageType( void ) const;

	virtual bool	CanFireCriticalShot( bool bIsHeadshot );

	virtual void	PrimaryAttack( void );
	virtual	float	GetWeaponSpread( void );

	virtual bool	DefaultReload( int iClipSize1, int iClipSize2, int iActivity );

	bool			CanHeadshot( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_weapon_mode ); return (iMode == 1); };

	bool			SapperKillsCollectCrits( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, sapper_kills_collect_crits ); return (iMode == 1); };

	virtual bool		Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
	virtual bool		Deploy( void );
	
	int					GetCount( void );
	const char*			GetEffectLabelText( void );
	float				GetProgress( void ) { return 0.f; }

#ifdef CLIENT_DLL
	virtual void	GetWeaponCrosshairScale( float &flScale );
#else
	virtual void	Detach();
	virtual float	GetProjectileDamage( void );
#endif

private:

	CTFRevolver( const CTFRevolver & ) {}

	float			m_flLastAccuracyCheck;
	float			m_flAccuracyCheckTime;
};


//=============================================================================
// Secondary Revolver (Engy)
class CTFRevolver_Secondary : public CTFRevolver
{
public:
	DECLARE_CLASS( CTFRevolver_Secondary, CTFRevolver );
	DECLARE_NETWORKCLASS();
	DECLARE_PREDICTABLE();
};

#endif // TF_WEAPON_REVOLVER_H