mirror of
https://github.com/celisej567/source-sdk-2013.git
synced 2026-09-23 20:09:45 +03:00
Mapbase v5.0
- Added keyvalue to hl2_gamerules which allows respawning in singleplayer - Added the game instructor system (including env_instructor_hint) from later Valve games using a VDC tutorial which adjusts the version from the Alien Swarm SDK to FPS rules and a Source 2013 environment; Also added new KV and icons for further control from mappers (tutorial mentioned by Maestra Fenix) - Added L4D/TF2 glows + point_glow entity as an all-purpose SDK-based off-shoot of tf_glow - Fixed weapon pickup sound not playing (reported by Sl0th and later Cvoxulary) - Fixed env_projectedtextures not updating on save/load - Added func_fake_worldportal, a spatial point_camera inspired by linked_portal_door based on SDK code alone (WIP, may be changed a lot in future updates) - Added option for point_camera and func_reflective_glass to use different render targets, therefore allowing multiple cameras and mirrors to be active at the same time - Added additional RT camera textures to choose from with a default of 3, but also controllable through a -numcameratextures command line param - Added adjustable convars for main view NearZ and skybox NearZ (suggested by someone recently, also suggested by Klems over a year ago) - Fixed map-specific localization files, cleaned up map-specific file code - Added a new block to gameinfo.txt which allows mods to automatically append their own command line parameters - Fixed math_lightpattern corruption when setting pattern/style while active - Fixed the "Touch" input crashing when given no entity - Added a way to add EFlags via keyvalue (suggested by Niker107) - Fixed ai_script_conditions not working without a NPC actor (reported by MetroHam) - Fixed point_radiation_source causing huge problems when intensity is 0, even though it was already advised against (reported by beefbacon) - Added "Mapbase" header to Mapbase-specific code files - Fixed an issue with updating sky_camera not obtaining area correctly, causing some entities to not draw in the skybox - Added "CopyFogController" and "CopyFogControllerWithScale" inputs to sky_camera, which copy fog parameters directly from a fog controller - Added "SetScale" input to sky_camera for live scale changing - Added convar to control player crouch speed multiplier (suggested by ArtyIF) - Added a ton of fixes for people running the Debug configuration of the codebase (partial credit to stepa2) - Added support for pre-defined enums and constants in VScript, starting with various values from the SDK code (damage types, trace masks, etc.) - Added limited support for Valve's Quaternion class in VScript - Added new instance helper capabilities, destructible game instances, and other misc. changes to VScript library - Replaced most of the VScript "accessor" classes with direct references to the original classes, as they were getting complicated fast and adding new VScript-only functions to the original classes might not be as bad as previously thought - Added base NPC hooks for AI sensing in VScript (allows control over sight and hearing), also exposed CSound for it - Added various functions and hooks for VPhysics integration in VScript - Added VScript-based custom suit devices - Expanded trace info exposed to VScript to allow plane and surface access (suggested by krassell) - Added ability to insert localization strings through VScript - Added various misc. VScript functions with various purposes, including reading/writing EFlags, movetypes, collision groups, etc. - Fixed VBSP not being able to correctly parse parallax corrected cubemaps in maps with instances
This commit is contained in:
@@ -253,11 +253,9 @@ enum SolidFlags_t
|
||||
#ifdef MAPBASE
|
||||
// From https://developer.valvesoftware.com/wiki/Owner
|
||||
FSOLID_COLLIDE_WITH_OWNER = 0X0400,
|
||||
#endif
|
||||
|
||||
FSOLID_MAX_BITS = 11
|
||||
#else
|
||||
FSOLID_MAX_BITS = 10
|
||||
#endif
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -1557,6 +1557,11 @@ public:
|
||||
|
||||
inline void Init(vec_t ix=0.0f, vec_t iy=0.0f, vec_t iz=0.0f, vec_t iw=0.0f) { x = ix; y = iy; z = iz; w = iw; }
|
||||
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
// Needed to get around vec_t recognition and inlining
|
||||
void ScriptInit( float ix, float iy, float iz, float iw ) { Init( ix, iy, iz, iw ); }
|
||||
#endif
|
||||
|
||||
bool IsValid() const;
|
||||
void Invalidate();
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "tier1/utlvector.h"
|
||||
#include "tier1/utlstring.h"
|
||||
#include "icvar.h"
|
||||
#include "color.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#define FORCEINLINE_CVAR FORCEINLINE
|
||||
@@ -350,6 +351,7 @@ public:
|
||||
// Retrieve value
|
||||
FORCEINLINE_CVAR float GetFloat( void ) const;
|
||||
FORCEINLINE_CVAR int GetInt( void ) const;
|
||||
FORCEINLINE_CVAR Color GetColor( void ) const;
|
||||
FORCEINLINE_CVAR bool GetBool() const { return !!GetInt(); }
|
||||
FORCEINLINE_CVAR char const *GetString( void ) const;
|
||||
|
||||
@@ -435,6 +437,16 @@ FORCEINLINE_CVAR int ConVar::GetInt( void ) const
|
||||
return m_pParent->m_nValue;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Return ConVar value as a color
|
||||
// Output : Color
|
||||
//-----------------------------------------------------------------------------
|
||||
FORCEINLINE_CVAR Color ConVar::GetColor( void ) const
|
||||
{
|
||||
unsigned char *pColorElement = ((unsigned char *)&m_pParent->m_nValue);
|
||||
return Color( pColorElement[0], pColorElement[1], pColorElement[2], pColorElement[3] );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Return ConVar value as a string, return "" for bogus string pointer, etc.
|
||||
@@ -467,6 +479,7 @@ public:
|
||||
// Get/Set value
|
||||
float GetFloat( void ) const;
|
||||
int GetInt( void ) const;
|
||||
Color GetColor( void ) const;
|
||||
bool GetBool() const { return !!GetInt(); }
|
||||
const char *GetString( void ) const;
|
||||
|
||||
@@ -521,6 +534,16 @@ FORCEINLINE_CVAR int ConVarRef::GetInt( void ) const
|
||||
return m_pConVarState->m_nValue;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Return ConVar value as a color
|
||||
// Output : Color
|
||||
//-----------------------------------------------------------------------------
|
||||
FORCEINLINE_CVAR Color ConVarRef::GetColor( void ) const
|
||||
{
|
||||
unsigned char *pColorElement = ((unsigned char *)&m_pConVarState->m_nValue);
|
||||
return Color( pColorElement[0], pColorElement[1], pColorElement[2], pColorElement[3] );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Return ConVar value as a string, return "" for bogus string pointer, etc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
#include "tier0/threadtools.h"
|
||||
#include "tier1/utlrbtree.h"
|
||||
#include "tier1/utlvector.h"
|
||||
#include "tier1/utlbuffer.h"
|
||||
#include "tier1/utllinkedlist.h"
|
||||
#include "tier1/stringpool.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -85,13 +88,17 @@ protected:
|
||||
// of strings to symbols and back. The symbol class itself contains
|
||||
// a static version of this class for creating global strings, but this
|
||||
// class can also be instanced to create local symbol tables.
|
||||
//
|
||||
// This class stores the strings in a series of string pools. The first
|
||||
// two bytes of each string are decorated with a hash to speed up
|
||||
// comparisons.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class CUtlSymbolTable
|
||||
{
|
||||
public:
|
||||
// constructor, destructor
|
||||
CUtlSymbolTable( int growSize = 0, int initSize = 32, bool caseInsensitive = false );
|
||||
CUtlSymbolTable( int growSize = 0, int initSize = 16, bool caseInsensitive = false );
|
||||
~CUtlSymbolTable();
|
||||
|
||||
// Finds and/or creates a symbol based on the string
|
||||
@@ -111,6 +118,10 @@ public:
|
||||
return m_Lookup.Count();
|
||||
}
|
||||
|
||||
// We store one of these at the beginning of every string to speed
|
||||
// up comparisons.
|
||||
typedef unsigned short hashDecoration_t;
|
||||
|
||||
protected:
|
||||
class CStringPoolIndex
|
||||
{
|
||||
@@ -120,10 +131,8 @@ protected:
|
||||
}
|
||||
|
||||
inline CStringPoolIndex( unsigned short iPool, unsigned short iOffset )
|
||||
{
|
||||
m_iPool = iPool;
|
||||
m_iOffset = iOffset;
|
||||
}
|
||||
: m_iPool(iPool), m_iOffset(iOffset)
|
||||
{}
|
||||
|
||||
inline bool operator==( const CStringPoolIndex &other ) const
|
||||
{
|
||||
@@ -158,7 +167,9 @@ protected:
|
||||
};
|
||||
|
||||
CTree m_Lookup;
|
||||
|
||||
bool m_bInsensitive;
|
||||
mutable unsigned short m_nUserSearchStringHash;
|
||||
mutable const char* m_pUserSearchString;
|
||||
|
||||
// stores the string data
|
||||
@@ -167,11 +178,14 @@ protected:
|
||||
private:
|
||||
int FindPoolWithSpace( int len ) const;
|
||||
const char* StringFromIndex( const CStringPoolIndex &index ) const;
|
||||
const char* DecoratedStringFromIndex( const CStringPoolIndex &index ) const;
|
||||
|
||||
friend class CLess;
|
||||
friend class CSymbolHash;
|
||||
|
||||
};
|
||||
|
||||
class CUtlSymbolTableMT : private CUtlSymbolTable
|
||||
class CUtlSymbolTableMT : public CUtlSymbolTable
|
||||
{
|
||||
public:
|
||||
CUtlSymbolTableMT( int growSize = 0, int initSize = 32, bool caseInsensitive = false )
|
||||
@@ -189,9 +203,9 @@ public:
|
||||
|
||||
CUtlSymbol Find( const char* pString ) const
|
||||
{
|
||||
m_lock.LockForRead();
|
||||
m_lock.LockForWrite();
|
||||
CUtlSymbol result = CUtlSymbolTable::Find( pString );
|
||||
m_lock.UnlockRead();
|
||||
m_lock.UnlockWrite();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -204,11 +218,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
#if defined(WIN32) || defined(_WIN32)
|
||||
mutable CThreadSpinRWLock m_lock;
|
||||
#else
|
||||
mutable CThreadRWLock m_lock;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -225,7 +235,6 @@ private:
|
||||
// The handle is a CUtlSymbol for the dirname and the same for the filename, the accessor
|
||||
// copies them into a static char buffer for return.
|
||||
typedef void* FileNameHandle_t;
|
||||
#define FILENAMEHANDLE_INVALID 0
|
||||
|
||||
// Symbol table for more efficiently storing filenames by breaking paths and filenames apart.
|
||||
// Refactored from BaseFileSystem.h
|
||||
@@ -258,6 +267,9 @@ public:
|
||||
int PathIndex(const FileNameHandle_t &handle) { return (( const FileNameHandleInternal_t * )&handle)->path; }
|
||||
bool String( const FileNameHandle_t& handle, char *buf, int buflen );
|
||||
void RemoveAll();
|
||||
void SpewStrings();
|
||||
bool SaveToBuffer( CUtlBuffer &buffer );
|
||||
bool RestoreFromBuffer( CUtlBuffer &buffer );
|
||||
|
||||
private:
|
||||
//CCountedStringPool m_StringPool;
|
||||
@@ -265,5 +277,50 @@ private:
|
||||
mutable CThreadSpinRWLock m_lock;
|
||||
};
|
||||
|
||||
// This creates a simple class that includes the underlying CUtlSymbol
|
||||
// as a private member and then instances a private symbol table to
|
||||
// manage those symbols. Avoids the possibility of the code polluting the
|
||||
// 'global'/default symbol table, while letting the code look like
|
||||
// it's just using = and .String() to look at CUtlSymbol type objects
|
||||
//
|
||||
// NOTE: You can't pass these objects between .dlls in an interface (also true of CUtlSymbol of course)
|
||||
//
|
||||
#define DECLARE_PRIVATE_SYMBOLTYPE( typename ) \
|
||||
class typename \
|
||||
{ \
|
||||
public: \
|
||||
typename(); \
|
||||
typename( const char* pStr ); \
|
||||
typename& operator=( typename const& src ); \
|
||||
bool operator==( typename const& src ) const; \
|
||||
const char* String( ) const; \
|
||||
private: \
|
||||
CUtlSymbol m_SymbolId; \
|
||||
};
|
||||
|
||||
// Put this in the .cpp file that uses the above typename
|
||||
#define IMPLEMENT_PRIVATE_SYMBOLTYPE( typename ) \
|
||||
static CUtlSymbolTable g_##typename##SymbolTable; \
|
||||
typename::typename() \
|
||||
{ \
|
||||
m_SymbolId = UTL_INVAL_SYMBOL; \
|
||||
} \
|
||||
typename::typename( const char* pStr ) \
|
||||
{ \
|
||||
m_SymbolId = g_##typename##SymbolTable.AddString( pStr ); \
|
||||
} \
|
||||
typename& typename::operator=( typename const& src ) \
|
||||
{ \
|
||||
m_SymbolId = src.m_SymbolId; \
|
||||
return *this; \
|
||||
} \
|
||||
bool typename::operator==( typename const& src ) const \
|
||||
{ \
|
||||
return ( m_SymbolId == src.m_SymbolId ); \
|
||||
} \
|
||||
const char* typename::String( ) const \
|
||||
{ \
|
||||
return g_##typename##SymbolTable.String( m_SymbolId ); \
|
||||
}
|
||||
|
||||
#endif // UTLSYMBOL_H
|
||||
|
||||
@@ -961,6 +961,16 @@ struct surfacedata_t
|
||||
surfacegameprops_t game; // Game data / properties
|
||||
|
||||
surfacesoundhandles_t soundhandles;
|
||||
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
// These functions are for the VScript class description.
|
||||
|
||||
float GetFriction() { return physics.friction; }
|
||||
float GetThickness() { return physics.thickness; }
|
||||
|
||||
float GetJumpFactor() { return game.jumpFactor; }
|
||||
char GetMaterialChar() { return game.material; }
|
||||
#endif
|
||||
};
|
||||
|
||||
#define VPHYSICS_SURFACEPROPS_INTERFACE_VERSION "VPhysicsSurfaceProps001"
|
||||
|
||||
@@ -291,6 +291,16 @@ public:
|
||||
virtual void *GetProxied( void *p ) { return p; }
|
||||
virtual bool ToString( void *p, char *pBuf, int bufSize ) { return false; }
|
||||
virtual void *BindOnRead( HSCRIPT hInstance, void *pOld, const char *pszId ) { return NULL; }
|
||||
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
virtual bool Get( void *p, const char *pszKey, ScriptVariant_t &variant ) { return false; }
|
||||
virtual bool Set( void *p, const char *pszKey, ScriptVariant_t &variant ) { return false; }
|
||||
|
||||
virtual ScriptVariant_t *Add( void *p, ScriptVariant_t &variant ) { return NULL; }
|
||||
virtual ScriptVariant_t *Subtract( void *p, ScriptVariant_t &variant ) { return NULL; }
|
||||
virtual ScriptVariant_t *Multiply( void *p, ScriptVariant_t &variant ) { return NULL; }
|
||||
virtual ScriptVariant_t *Divide( void *p, ScriptVariant_t &variant ) { return NULL; }
|
||||
#endif
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
@@ -522,6 +532,39 @@ private:
|
||||
|
||||
#define SCRIPT_VARIANT_NULL ScriptVariant_t()
|
||||
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
//---------------------------------------------------------
|
||||
struct ScriptConstantBinding_t
|
||||
{
|
||||
const char *m_pszScriptName;
|
||||
const char *m_pszDescription;
|
||||
ScriptVariant_t m_data;
|
||||
unsigned m_flags;
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
struct ScriptEnumDesc_t
|
||||
{
|
||||
ScriptEnumDesc_t() : m_pszScriptName( 0 ), m_pszDescription( 0 ), m_flags( 0 )
|
||||
{
|
||||
AllEnumsDesc().AddToTail(this);
|
||||
}
|
||||
|
||||
virtual void RegisterDesc() = 0;
|
||||
|
||||
const char *m_pszScriptName;
|
||||
const char *m_pszDescription;
|
||||
CUtlVector<ScriptConstantBinding_t> m_ConstantBindings;
|
||||
unsigned m_flags;
|
||||
|
||||
static CUtlVector<ScriptEnumDesc_t*>& AllEnumsDesc()
|
||||
{
|
||||
static CUtlVector<ScriptEnumDesc_t*> enums;
|
||||
return enums;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
#pragma warning(pop)
|
||||
|
||||
|
||||
@@ -556,6 +599,46 @@ private:
|
||||
#define ScriptRegisterFunction( pVM, func, description ) ScriptRegisterFunctionNamed( pVM, func, #func, description )
|
||||
#define ScriptRegisterFunctionNamed( pVM, func, scriptName, description ) do { static ScriptFunctionBinding_t binding; binding.m_desc.m_pszDescription = description; binding.m_desc.m_Parameters.RemoveAll(); ScriptInitFunctionBindingNamed( &binding, func, scriptName ); pVM->RegisterFunction( &binding ); } while (0)
|
||||
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define ScriptRegisterConstant( pVM, constant, description ) ScriptRegisterConstantNamed( pVM, constant, #constant, description )
|
||||
#define ScriptRegisterConstantNamed( pVM, constant, scriptName, description ) do { static ScriptConstantBinding_t binding; binding.m_pszScriptName = scriptName; binding.m_pszDescription = description; binding.m_data = constant; pVM->RegisterConstant( &binding ); } while (0)
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define BEGIN_SCRIPTENUM( enumName, description ) \
|
||||
struct ScriptEnum##enumName##Desc_t : public ScriptEnumDesc_t \
|
||||
{ \
|
||||
void RegisterDesc(); \
|
||||
}; \
|
||||
ScriptEnum##enumName##Desc_t g_##enumName##_EnumDesc; \
|
||||
\
|
||||
void ScriptEnum##enumName##Desc_t::RegisterDesc() \
|
||||
{ \
|
||||
static bool bInitialized; \
|
||||
if ( bInitialized ) \
|
||||
return; \
|
||||
\
|
||||
bInitialized = true; \
|
||||
\
|
||||
m_pszScriptName = #enumName; \
|
||||
m_pszDescription = description; \
|
||||
|
||||
#define DEFINE_ENUMCONST( constant, description ) DEFINE_ENUMCONST_NAMED( constant, #constant, description )
|
||||
#define DEFINE_ENUMCONST_NAMED( constant, scriptName, description ) do { ScriptConstantBinding_t *pBinding = &(m_ConstantBindings[m_ConstantBindings.AddToTail()]); pBinding->m_pszScriptName = scriptName; pBinding->m_pszDescription = description; pBinding->m_data = constant; pBinding->m_flags = SF_MEMBER_FUNC; } while (0);
|
||||
|
||||
#define END_SCRIPTENUM() \
|
||||
} \
|
||||
|
||||
|
||||
#define GetScriptDescForEnum( enumName ) GetScriptDesc( ( className *)NULL )
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -727,14 +810,37 @@ public:
|
||||
//--------------------------------------------------------
|
||||
virtual bool RegisterClass( ScriptClassDesc_t *pClassDesc ) = 0;
|
||||
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
//--------------------------------------------------------
|
||||
// External constants
|
||||
//--------------------------------------------------------
|
||||
virtual void RegisterConstant( ScriptConstantBinding_t *pScriptConstant ) = 0;
|
||||
|
||||
//--------------------------------------------------------
|
||||
// External enums
|
||||
//--------------------------------------------------------
|
||||
virtual void RegisterEnum( ScriptEnumDesc_t *pEnumDesc ) = 0;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------
|
||||
// External instances. Note class will be auto-registered.
|
||||
//--------------------------------------------------------
|
||||
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
// When a RegisterInstance instance is deleted, VScript normally treats it as a strong reference and only deregisters the instance itself, preserving the registered data
|
||||
// it points to so the game can continue to use it.
|
||||
// bAllowDestruct is supposed to allow VScript to treat it as a weak reference created by the script, destructing the registered data automatically like any other type.
|
||||
// This is useful for classes pretending to be primitive types.
|
||||
virtual HSCRIPT RegisterInstance( ScriptClassDesc_t *pDesc, void *pInstance, bool bAllowDestruct = false ) = 0;
|
||||
virtual void SetInstanceUniqeId( HSCRIPT hInstance, const char *pszId ) = 0;
|
||||
template <typename T> HSCRIPT RegisterInstance( T *pInstance, bool bAllowDestruct = false ) { return RegisterInstance( GetScriptDesc( pInstance ), pInstance, bAllowDestruct ); }
|
||||
template <typename T> HSCRIPT RegisterInstance( T *pInstance, const char *pszInstance, HSCRIPT hScope = NULL, bool bAllowDestruct = false) { HSCRIPT hInstance = RegisterInstance( GetScriptDesc( pInstance ), pInstance, bAllowDestruct ); SetValue( hScope, pszInstance, hInstance ); return hInstance; }
|
||||
#else
|
||||
virtual HSCRIPT RegisterInstance( ScriptClassDesc_t *pDesc, void *pInstance ) = 0;
|
||||
virtual void SetInstanceUniqeId( HSCRIPT hInstance, const char *pszId ) = 0;
|
||||
template <typename T> HSCRIPT RegisterInstance( T *pInstance ) { return RegisterInstance( GetScriptDesc( pInstance ), pInstance ); }
|
||||
template <typename T> HSCRIPT RegisterInstance( T *pInstance, const char *pszInstance, HSCRIPT hScope = NULL) { HSCRIPT hInstance = RegisterInstance( GetScriptDesc( pInstance ), pInstance ); SetValue( hScope, pszInstance, hInstance ); return hInstance; }
|
||||
#endif
|
||||
virtual void RemoveInstance( HSCRIPT ) = 0;
|
||||
void RemoveInstance( HSCRIPT hInstance, const char *pszInstance, HSCRIPT hScope = NULL ) { ClearValue( hScope, pszInstance ); RemoveInstance( hInstance ); }
|
||||
void RemoveInstance( const char *pszInstance, HSCRIPT hScope = NULL ) { ScriptVariant_t val; if ( GetValue( hScope, pszInstance, &val ) ) { if ( val.m_type == FIELD_HSCRIPT ) { RemoveInstance( val, pszInstance, hScope ); } ReleaseValue( val ); } }
|
||||
@@ -897,6 +1003,16 @@ public:
|
||||
RegisterClass(classDescs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void RegisterAllEnums()
|
||||
{
|
||||
CUtlVector<ScriptEnumDesc_t*>& enumDescs = ScriptEnumDesc_t::AllEnumsDesc();
|
||||
FOR_EACH_VEC(enumDescs, i)
|
||||
{
|
||||
enumDescs[i]->RegisterDesc();
|
||||
RegisterEnum(enumDescs[i]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user