summaryrefslogtreecommitdiff
path: root/public/tier3/tier3.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/tier3/tier3.h')
-rw-r--r--public/tier3/tier3.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/public/tier3/tier3.h b/public/tier3/tier3.h
new file mode 100644
index 0000000..7f53353
--- /dev/null
+++ b/public/tier3/tier3.h
@@ -0,0 +1,114 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: A higher level link library for general use in the game and tools.
+//
+//===========================================================================//
+
+
+#ifndef TIER3_H
+#define TIER3_H
+
+#if defined( _WIN32 )
+#pragma once
+#endif
+
+#include "tier2/tier2.h"
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+class IStudioRender;
+class IMatSystemSurface;
+class IDataCache;
+class IMDLCache;
+class IVideoServices;
+class IDmeMakefileUtils;
+class IPhysicsCollision;
+class ISoundEmitterSystemBase;
+class IVTex;
+
+namespace vgui
+{
+ class ISurface;
+ class IVGui;
+ class IInput;
+ class IPanel;
+ class ILocalize;
+ class ISchemeManager;
+ class ISystem;
+}
+
+
+//-----------------------------------------------------------------------------
+// These tier3 libraries must be set by any users of this library.
+// They can be set by calling ConnectTier3Libraries.
+// It is hoped that setting this, and using this library will be the common mechanism for
+// allowing link libraries to access tier3 library interfaces
+//-----------------------------------------------------------------------------
+extern IStudioRender *g_pStudioRender;
+extern IStudioRender *studiorender;
+extern IMatSystemSurface *g_pMatSystemSurface;
+extern vgui::ISurface *g_pVGuiSurface;
+extern vgui::IInput *g_pVGuiInput;
+extern vgui::IVGui *g_pVGui;
+extern vgui::IPanel *g_pVGuiPanel;
+extern vgui::ILocalize *g_pVGuiLocalize;
+extern vgui::ISchemeManager *g_pVGuiSchemeManager;
+extern vgui::ISystem *g_pVGuiSystem;
+extern IDataCache *g_pDataCache; // FIXME: Should IDataCache be in tier2?
+extern IMDLCache *g_pMDLCache;
+extern IMDLCache *mdlcache;
+extern IVideoServices *g_pVideo;
+extern IDmeMakefileUtils *g_pDmeMakefileUtils;
+extern IPhysicsCollision *g_pPhysicsCollision;
+extern ISoundEmitterSystemBase *g_pSoundEmitterSystem;
+extern IVTex *g_pVTex;
+
+
+//-----------------------------------------------------------------------------
+// Call this to connect to/disconnect from all tier 3 libraries.
+// It's up to the caller to check the globals it cares about to see if ones are missing
+//-----------------------------------------------------------------------------
+void ConnectTier3Libraries( CreateInterfaceFn *pFactoryList, int nFactoryCount );
+void DisconnectTier3Libraries();
+
+
+//-----------------------------------------------------------------------------
+// Helper empty implementation of an IAppSystem for tier2 libraries
+//-----------------------------------------------------------------------------
+template< class IInterface, int ConVarFlag = 0 >
+class CTier3AppSystem : public CTier2AppSystem< IInterface, ConVarFlag >
+{
+ typedef CTier2AppSystem< IInterface, ConVarFlag > BaseClass;
+
+public:
+ CTier3AppSystem( bool bIsPrimaryAppSystem = true ) : BaseClass( bIsPrimaryAppSystem )
+ {
+ }
+
+ virtual bool Connect( CreateInterfaceFn factory )
+ {
+ if ( !BaseClass::Connect( factory ) )
+ return false;
+
+ if ( BaseClass::IsPrimaryAppSystem() )
+ {
+ ConnectTier3Libraries( &factory, 1 );
+ }
+ return true;
+ }
+
+ virtual void Disconnect()
+ {
+ if ( BaseClass::IsPrimaryAppSystem() )
+ {
+ DisconnectTier3Libraries();
+ }
+ BaseClass::Disconnect();
+ }
+};
+
+
+#endif // TIER3_H
+