mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-20 12:36:05 +08:00
47 lines
1.4 KiB
C
47 lines
1.4 KiB
C
![]() |
//====== Copyright © 1996-2008, Valve Corporation, All rights reserved. =======
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================
|
||
|
|
||
|
#ifndef IMATERIALPROXYDICT_H
|
||
|
#define IMATERIALPROXYDICT_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
class IMaterialProxy;
|
||
|
|
||
|
typedef IMaterialProxy *MaterialProxyFactory_t();
|
||
|
|
||
|
abstract_class IMaterialProxyDict
|
||
|
{
|
||
|
public:
|
||
|
// This is used to instance a proxy.
|
||
|
virtual IMaterialProxy *CreateProxy( const char *proxyName ) = 0;
|
||
|
// virtual destructor
|
||
|
virtual ~IMaterialProxyDict() {}
|
||
|
// Used by EXPOSE_MATERIAL_PROXY to insert all proxies into the dictionary.
|
||
|
virtual void Add( const char *pMaterialProxyName, MaterialProxyFactory_t *pMaterialProxyFactory ) = 0;
|
||
|
};
|
||
|
|
||
|
extern IMaterialProxyDict &GetMaterialProxyDict();
|
||
|
|
||
|
#define EXPOSE_MATERIAL_PROXY( className, proxyName ) \
|
||
|
static IMaterialProxy *C##className##Factory( void ) \
|
||
|
{ \
|
||
|
return static_cast< IMaterialProxy * >( new className ); \
|
||
|
}; \
|
||
|
class C##proxyName##Foo \
|
||
|
{ \
|
||
|
public: \
|
||
|
C##proxyName##Foo( void ) \
|
||
|
{ \
|
||
|
GetMaterialProxyDict().Add( #proxyName, \
|
||
|
&C##className##Factory ); \
|
||
|
} \
|
||
|
}; \
|
||
|
static C##proxyName##Foo g_C##proxyName##Foo;
|
||
|
|
||
|
#endif // IMATERIALPROXYDICT_H
|