text: //========= Copyright Valve Corporation, All rights reserved. ============//
  //
  // Purpose: 
  //
  // $NoKeywords: $
  //===========================================================================//
  
  #ifndef CDLL_CLIENT_INT_H
  #define CDLL_CLIENT_INT_H
  #ifdef _WIN32
  #pragma once
  #endif
  
  #include "iclientnetworkable.h"
  #include "utllinkedlist.h"
  #include "cdll_int.h"
  #include "eiface.h"
  
  
  class IVModelRender;
  class IVEngineClient;
  class IVModelRender;
  class IVEfx;
  class IVRenderView;
  class IVDebugOverlay;
  class IMaterialSystem;
  class IMaterialSystemStub;
  class IDataCache;
  class IMDLCache;
  class IVModelInfoClient;
  class IEngineVGui;
  class ISpatialPartition;
  class IBaseClientDLL;
  class ISpatialPartition;
  class IFileSystem;
  class IStaticPropMgrClient;
  class IShadowMgr;
  class IEngineSound;
  class IMatSystemSurface;
  class IMaterialSystemHardwareConfig;
  class ISharedGameRules;
  class IEngineTrace;
  class IGameUIFuncs;
  class IGameEventManager2;
  class IPhysicsGameTrace;
  class CGlobalVarsBase;
  class IClientTools;
  class C_BaseAnimating;
  class IColorCorrectionSystem;
  class IInputSystem;
  class ISceneFileCache;
  class IXboxSystem;	// Xbox 360 only
  class IMatchmaking;
  class IVideoServices;
  class CSteamAPIContext;
  class IClientReplayContext;
  class IReplayManager;
  class IEngineReplay;
  class IEngineClientReplay;
  class IReplayScreenshotManager;
  class CSteamID;
  
  //=============================================================================
  // HPE_BEGIN
  // [dwenger] Necessary for stats display
  //=============================================================================
  
  class AchievementsAndStatsInterface;
  
  //=============================================================================
  // HPE_END
  //=============================================================================
  
  extern IVModelRender *modelrender;
  extern IVEngineClient	*engine;
  extern IVModelRender *modelrender;
  extern IVEfx *effects;
  extern IVRenderView *render;
  extern IVDebugOverlay *debugoverlay;
  extern IMaterialSystem *materials;
  extern IMaterialSystemStub *materials_stub;
  extern IMaterialSystemHardwareConfig *g_pMaterialSystemHardwareConfig;
  extern IDataCache *datacache;
  extern IMDLCache *mdlcache;
  extern IVModelInfoClient *modelinfo;
  extern IEngineVGui *enginevgui;
  extern ISpatialPartition* partition;
  extern IBaseClientDLL *clientdll;
  extern IFileSystem *filesystem;
  extern IStaticPropMgrClient *staticpropmgr;
  extern IShadowMgr *shadowmgr;
  extern IEngineSound *enginesound;
  extern IMatSystemSurface *g_pMatSystemSurface;
  extern IEngineTrace *enginetrace;
  extern IGameUIFuncs *gameuifuncs;
  extern IGameEventManager2 *gameeventmanager;
  extern IPhysicsGameTrace *physgametrace;
  extern CGlobalVarsBase *gpGlobals;
  extern IClientTools *clienttools;
  extern IInputSystem *inputsystem;
  extern ISceneFileCache *scenefilecache;
  extern IXboxSystem *xboxsystem;	// Xbox 360 only
  extern IMatchmaking *matchmaking;
  extern IVideoServices *g_pVideo;
  extern IUploadGameStats *gamestatsuploader;
  extern CSteamAPIContext *steamapicontext;
  extern IReplaySystem *g_pReplay;
  extern IClientReplayContext *g_pClientReplayContext;
  extern IReplayManager *g_pReplayManager;
  extern IReplayScreenshotManager *g_pReplayScreenshotManager;
  extern IEngineReplay *g_pEngineReplay;
  extern IEngineClientReplay *g_pEngineClientReplay;
  
  //=============================================================================
  // HPE_BEGIN
  // [dwenger] Necessary for stats display
  //=============================================================================
  
  extern AchievementsAndStatsInterface* g_pAchievementsAndStatsInterface;
  
  //=============================================================================
  // HPE_END
  //=============================================================================
  
  // Set to true between LevelInit and LevelShutdown.
  extern bool	g_bLevelInitialized;
  extern bool g_bTextMode;
  
  // Kyle says: this is here to obsfucate our accessing of the g_bTextMode variable and for no other purpose.
  //			  See the mess of TF_ANTI_IDLEBOT_VERIFICATION code. If that code doesn't exist anymore, this
  //			  probably also doesn't need to exist anymore.
  //
  //			  On a suggestion from Joe, we also point it to an incomplete type.
  extern class IClientPurchaseInterfaceV2 *g_pClientPurchaseInterface;
  
  
  // Returns true if a new OnDataChanged event is registered for this frame.
  bool AddDataChangeEvent( IClientNetworkable *ent, DataUpdateType_t updateType, int *pStoredEvent );
  
  void ClearDataChangedEvent( int iStoredEvent );
  
  //-----------------------------------------------------------------------------
  // Precaches a material
  //-----------------------------------------------------------------------------
  void PrecacheMaterial( const char *pMaterialName );
  
  //-----------------------------------------------------------------------------
  // Converts a previously precached material into an index
  //-----------------------------------------------------------------------------
  int GetMaterialIndex( const char *pMaterialName );
  
  //-----------------------------------------------------------------------------
  // Converts precached material indices into strings
  //-----------------------------------------------------------------------------
  const char *GetMaterialNameFromIndex( int nIndex );
  
  //-----------------------------------------------------------------------------
  // Precache-related methods for particle systems
  //-----------------------------------------------------------------------------
  void PrecacheParticleSystem( const char *pParticleSystemName );
  int GetParticleSystemIndex( const char *pParticleSystemName );
  const char *GetParticleSystemNameFromIndex( int nIndex );
  
  
  //-----------------------------------------------------------------------------
  // Called during bone setup to test perf
  //-----------------------------------------------------------------------------
  void TrackBoneSetupEnt( C_BaseAnimating *pEnt );
  
  bool IsEngineThreaded();
  
  #ifndef NO_STEAM
  
  /// Returns Steam ID, given player index.   Returns an invalid SteamID upon
  /// failure
  extern CSteamID GetSteamIDForPlayerIndex( int iPlayerIndex );
  
  #endif
  
  #endif // CDLL_CLIENT_INT_H
  