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

#include "tf_weaponbase_gun.h"
#include "tf_weapon_shotgun.h"
#include "tf_weapon_rocketlauncher.h"

// Client specific.
#ifdef CLIENT_DLL
#define CTFRaygun C_TFRaygun
#define CTFDRGPomson C_TFDRGPomson
#endif

#define RAYGUN_ENERGY_PER_SHOT		20
#define RAYGUN_ENERGY_PER_PUMP		100

class CTFRaygun_Revenge : public CTFRaygun
{
public:
	DECLARE_CLASS( CTFRaygun, CTFRocketLauncher );
	DECLARE_NETWORKCLASS(); 
	DECLARE_PREDICTABLE();

	CTFRaygun();

	virtual void		Precache();

	virtual int			GetWeaponID( void ) const			{ return TF_WEAPON_RAYGUN_REVENGE; }
	virtual float		GetProjectileSpeed( void );
	virtual float		GetProjectileGravity( void );
	virtual bool		IsViewModelFlipped( void );

	const char*			GetEffectLabelText( void )			{ return "#TF_BISON"; }
	float				GetProgress( void );

	virtual bool		Holster( CBaseCombatWeapon *pSwitchingTo );
	virtual bool		Deploy( void );
	virtual void		ItemPostFrame( void );

	virtual void		PrimaryAttack( void );
	virtual void		ModifyProjectile( CBaseEntity* pProj );

	virtual const char*	GetMuzzleFlashParticleEffect( void );

	virtual float		GetDamage( void ) { return 20.f; }

	virtual bool		IsEnergyWeapon( void ) const { return true; }
	virtual float		Energy_GetShotCost( void ) const
	{
		int iNoDrain = 0;
		CALL_ATTRIB_HOOK_INT( iNoDrain, energy_weapon_no_drain );
		if ( iNoDrain > 0 )
		{
			return 0.0f;
		}

		return 25.f; 
	}
	virtual float		Energy_GetRechargeCost( void ) const { return 25.f; }

#ifdef CLIENT_DLL
	virtual void		DispatchMuzzleFlash( const char* effectName, C_BaseEntity* pAttachEnt );
	void				ClientEffectsThink( void );
	virtual bool		ShouldPlayClientReloadSound() { return true; }
#endif

private:
	float				m_flIrradiateTime;
	bool				m_bEffectsThinking;
};


//---------------------------------------------------------
class CTFDRGPomson : public CTFRaygun
{
public:
	DECLARE_CLASS( CTFDRGPomson, CTFRaygun );
	DECLARE_NETWORKCLASS(); 
	DECLARE_PREDICTABLE();

	virtual int			GetWeaponID( void ) const			{ return TF_WEAPON_DRG_POMSON; }
	const char*			GetEffectLabelText( void )			{ return "#TF_POMSON_HUD"; }
};



#endif // TF_WEAPON_RAYGUN_REVENGE_H