text: //========= Copyright Valve Corporation, All rights reserved. ============//
  //
  // Purpose: 
  //
  // $NoKeywords: $
  //
  //===========================================================================//
  #ifndef ENGINECALLBACK_H
  #define ENGINECALLBACK_H
  
  #ifndef EIFACE_H
  #include "eiface.h"
  #endif
  
  class IFileSystem;				// include filesystem.h
  class IEngineSound;				// include engine/IEngineSound.h
  class IVEngineServer;			
  class IVoiceServer;
  class IStaticPropMgrServer;
  class ISpatialPartition;
  class IVModelInfo;
  class IEngineTrace;
  class IGameEventManager2;
  class IVDebugOverlay;
  class IDataCache;
  class IMDLCache;
  class IServerEngineTools;
  class IXboxSystem;
  class CSteamAPIContext;
  class CSteamGameServerAPIContext;
  
  extern IVEngineServer			*engine;
  extern IVoiceServer				*g_pVoiceServer;
  extern IFileSystem				*filesystem;
  extern IStaticPropMgrServer		*staticpropmgr;
  extern ISpatialPartition		*partition;
  extern IEngineSound				*enginesound;
  extern IVModelInfo				*modelinfo;
  extern IEngineTrace				*enginetrace;
  extern IGameEventManager2		*gameeventmanager;
  extern IVDebugOverlay			*debugoverlay;
  extern IDataCache				*datacache;
  extern IMDLCache				*mdlcache;
  extern IServerEngineTools		*serverenginetools;
  extern IXboxSystem				*xboxsystem; // 360 only
  extern CSteamAPIContext			*steamapicontext; // available on game clients
  extern CSteamGameServerAPIContext *steamgameserverapicontext; //available on game servers
  
  
  
  //-----------------------------------------------------------------------------
  // Precaches a material
  //-----------------------------------------------------------------------------
  void PrecacheMaterial( const char *pMaterialName );
  
  //-----------------------------------------------------------------------------
  // Converts a previously precached material into an index
  //-----------------------------------------------------------------------------
  int GetMaterialIndex( const char *pMaterialName );
  
  //-----------------------------------------------------------------------------
  // Converts a previously precached material index into a string
  //-----------------------------------------------------------------------------
  const char *GetMaterialNameFromIndex( int nMaterialIndex );
  
  
  //-----------------------------------------------------------------------------
  // Precache-related methods for particle systems
  //-----------------------------------------------------------------------------
  void PrecacheParticleSystem( const char *pParticleSystemName );
  int GetParticleSystemIndex( const char *pParticleSystemName );
  const char *GetParticleSystemNameFromIndex( int nIndex );
  
  
  class IRecipientFilter;
  void EntityMessageBegin( CBaseEntity * entity, bool reliable = false );
  void UserMessageBegin( IRecipientFilter& filter, const char *messagename );
  void MessageEnd( void );
  
  // bytewise
  void MessageWriteByte( int iValue);
  void MessageWriteChar( int iValue);
  void MessageWriteShort( int iValue);
  void MessageWriteWord( int iValue );
  void MessageWriteLong( int iValue);
  void MessageWriteFloat( float flValue);
  void MessageWriteAngle( float flValue);
  void MessageWriteCoord( float flValue);
  void MessageWriteVec3Coord( const Vector& rgflValue);
  void MessageWriteVec3Normal( const Vector& rgflValue);
  void MessageWriteAngles( const QAngle& rgflValue);
  void MessageWriteString( const char *sz );
  void MessageWriteEntity( int iValue);
  void MessageWriteEHandle( CBaseEntity *pEntity ); //encoded as a long
  
  
  // bitwise
  void MessageWriteBool( bool bValue );
  void MessageWriteUBitLong( unsigned int data, int numbits );
  void MessageWriteSBitLong( int data, int numbits );
  void MessageWriteBits( const void *pIn, int nBits );
  
  #ifndef NO_STEAM
  
  /// Returns Steam ID, given player index.   Returns an invalid SteamID upon
  /// failure
  extern CSteamID GetSteamIDForPlayerIndex( int iPlayerIndex );
  
  #endif
  
  
  // Bytewise
  #define WRITE_BYTE		(MessageWriteByte)
  #define WRITE_CHAR		(MessageWriteChar)
  #define WRITE_SHORT		(MessageWriteShort)
  #define WRITE_WORD		(MessageWriteWord)
  #define WRITE_LONG		(MessageWriteLong)
  #define WRITE_FLOAT		(MessageWriteFloat)
  #define WRITE_ANGLE		(MessageWriteAngle)
  #define WRITE_COORD		(MessageWriteCoord)
  #define WRITE_VEC3COORD	(MessageWriteVec3Coord)
  #define WRITE_VEC3NORMAL (MessageWriteVec3Normal)
  #define WRITE_ANGLES	(MessageWriteAngles)
  #define WRITE_STRING	(MessageWriteString)
  #define WRITE_ENTITY	(MessageWriteEntity)
  #define WRITE_EHANDLE	(MessageWriteEHandle)
  
  // Bitwise
  #define WRITE_BOOL		(MessageWriteBool)
  #define WRITE_UBITLONG	(MessageWriteUBitLong)
  #define WRITE_SBITLONG	(MessageWriteSBitLong)
  #define WRITE_BITS		(MessageWriteBits)
  
  #endif		//ENGINECALLBACK_H
  