text: //========= Copyright Valve Corporation, All rights reserved. ============//
  //
  // Purpose: 
  //
  //=============================================================================//
  
  #ifndef WEAPON_HL2MPBASE_H
  #define WEAPON_HL2MPBASE_H
  #ifdef _WIN32
  #pragma once
  #endif
  
  #include "hl2mp_player_shared.h"
  #include "basecombatweapon_shared.h"
  #include "hl2mp_weapon_parse.h"
  
  #if defined( CLIENT_DLL )
  	#define CWeaponHL2MPBase C_WeaponHL2MPBase
  	void UTIL_ClipPunchAngleOffset( QAngle &in, const QAngle &punch, const QAngle &clip );
  #endif
  
  class CHL2MP_Player;
  
  // These are the names of the ammo types that go in the CAmmoDefs and that the 
  // weapon script files reference.
  
  // Given an ammo type (like from a weapon's GetPrimaryAmmoType()), this compares it
  // against the ammo name you specify.
  // MIKETODO: this should use indexing instead of searching and strcmp()'ing all the time.
  bool IsAmmoType( int iAmmoType, const char *pAmmoName );
  
  class CWeaponHL2MPBase : public CBaseCombatWeapon
  {
  public:
  	DECLARE_CLASS( CWeaponHL2MPBase, CBaseCombatWeapon );
  	DECLARE_NETWORKCLASS(); 
  	DECLARE_PREDICTABLE();
  
  	CWeaponHL2MPBase();
  
  	#ifdef GAME_DLL
  		DECLARE_DATADESC();
  	
  		void SendReloadSoundEvent( void );
  
  		void Materialize( void );
  		virtual	int	ObjectCaps( void );
  	#endif
  
  	// All predicted weapons need to implement and return true
  	virtual bool	IsPredicted() const;
  
  	CBasePlayer* GetPlayerOwner() const;
  	CHL2MP_Player* GetHL2MPPlayerOwner() const;
  
  	void WeaponSound( WeaponSound_t sound_type, float soundtime = 0.0f );
  	
  	CHL2MPSWeaponInfo const	&GetHL2MPWpnData() const;
  
  
  	virtual void FireBullets( const FireBulletsInfo_t &info );
  	virtual void FallInit( void );
  	
  public:
  	#if defined( CLIENT_DLL )
  		
  		virtual bool	ShouldPredict();
  		virtual void	OnDataChanged( DataUpdateType_t type );
  
  		virtual bool	OnFireEvent( C_BaseViewModel *pViewModel, const Vector& origin, const QAngle& angles, int event, const char *options );
  
  	#else
  
  		virtual void	Spawn();
  
  	#endif
  
  	float		m_flPrevAnimTime;
  	float  m_flNextResetCheckTime;
  
  	Vector	GetOriginalSpawnOrigin( void ) { return m_vOriginalSpawnOrigin;	}
  	QAngle	GetOriginalSpawnAngles( void ) { return m_vOriginalSpawnAngles;	}
  
  private:
  
  	CWeaponHL2MPBase( const CWeaponHL2MPBase & );
  
  	Vector m_vOriginalSpawnOrigin;
  	QAngle m_vOriginalSpawnAngles;
  };
  
  
  #endif // WEAPON_HL2MPBASE_H
  