mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-03-03 17:25:27 +03:00
Merge pull request #320 from z33ky/vscript-hook-delayed-init
Fix ScriptHook_t initialization order
This commit is contained in:
commit
4c9d71f5e3
@ -433,8 +433,7 @@ ScriptHook_t C_BaseEntity::g_Hook_UpdateOnRemove;
|
||||
ScriptHook_t C_BaseEntity::g_Hook_ModifyEmitSoundParams;
|
||||
#endif
|
||||
|
||||
BEGIN_ENT_SCRIPTDESC_ROOT( C_BaseEntity, "Root class of all client-side entities" )
|
||||
DEFINE_SCRIPT_INSTANCE_HELPER( &g_BaseEntityScriptInstanceHelper )
|
||||
BEGIN_ENT_SCRIPTDESC_ROOT_WITH_HELPER( C_BaseEntity, "Root class of all client-side entities", &g_BaseEntityScriptInstanceHelper )
|
||||
DEFINE_SCRIPTFUNC_NAMED( GetAbsOrigin, "GetOrigin", "" )
|
||||
DEFINE_SCRIPTFUNC_NAMED( ScriptGetForward, "GetForwardVector", "Get the forward vector of the entity" )
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
|
@ -1031,7 +1031,7 @@ void CScriptSurface::DrawColoredTextRect( int font, int x, int y, int w, int h,
|
||||
#define __base() this->_base
|
||||
|
||||
#define BEGIN_SCRIPTDESC_VGUI( panelClass )\
|
||||
BEGIN_SCRIPTDESC_NAMED( CScript_##panelClass##_Helper, IScriptVGUIObject, #panelClass, "" )\
|
||||
BEGIN_SCRIPTDESC_NAMED_WITH_HELPER( CScript_##panelClass##_Helper, IScriptVGUIObject, #panelClass, "", VGUI_SCRIPT_INSTANCE_HELPER )\
|
||||
DEFINE_VGUI_SCRIPTFUNC_##panelClass()
|
||||
|
||||
//
|
||||
@ -1235,9 +1235,9 @@ class CScriptVGUIScriptInstanceHelper : public IScriptInstanceHelper
|
||||
|
||||
static CScriptVGUIScriptInstanceHelper g_ScriptVGUIScriptInstanceHelper;
|
||||
|
||||
#define DEFINE_VGUI_SCRIPT_INSTANCE_HELPER() DEFINE_SCRIPT_INSTANCE_HELPER( &g_ScriptVGUIScriptInstanceHelper )
|
||||
#define VGUI_SCRIPT_INSTANCE_HELPER &g_ScriptVGUIScriptInstanceHelper
|
||||
#else
|
||||
#define DEFINE_VGUI_SCRIPT_INSTANCE_HELPER()
|
||||
#define VGUI_SCRIPT_INSTANCE_HELPER NULL
|
||||
#endif
|
||||
|
||||
|
||||
@ -1866,8 +1866,6 @@ public:
|
||||
};
|
||||
|
||||
#define DEFINE_VGUI_SCRIPTFUNC_Panel()\
|
||||
DEFINE_VGUI_SCRIPT_INSTANCE_HELPER()\
|
||||
\
|
||||
DEFINE_SCRIPTFUNC( Destroy, "" )\
|
||||
DEFINE_SCRIPTFUNC( MakeReadyForUse, "" )\
|
||||
DEFINE_SCRIPTFUNC( GetName, "" )\
|
||||
|
@ -234,8 +234,7 @@ class CMaterialProxyScriptInstanceHelper : public IScriptInstanceHelper
|
||||
|
||||
CMaterialProxyScriptInstanceHelper g_MaterialProxyScriptInstanceHelper;
|
||||
|
||||
BEGIN_SCRIPTDESC_ROOT_NAMED( CScriptMaterialProxy, "CScriptMaterialProxy", "Material proxy for VScript" )
|
||||
DEFINE_SCRIPT_INSTANCE_HELPER( &g_MaterialProxyScriptInstanceHelper )
|
||||
BEGIN_SCRIPTDESC_ROOT_NAMED_WITH_HELPER( CScriptMaterialProxy, "CScriptMaterialProxy", "Material proxy for VScript", &g_MaterialProxyScriptInstanceHelper )
|
||||
DEFINE_SCRIPTFUNC( GetVarString, "Gets a material var's string value" )
|
||||
DEFINE_SCRIPTFUNC( GetVarInt, "Gets a material var's int value" )
|
||||
DEFINE_SCRIPTFUNC( GetVarFloat, "Gets a material var's float value" )
|
||||
|
@ -2257,8 +2257,7 @@ ScriptHook_t CBaseEntity::g_Hook_ModifyEmitSoundParams;
|
||||
ScriptHook_t CBaseEntity::g_Hook_ModifySentenceParams;
|
||||
#endif
|
||||
|
||||
BEGIN_ENT_SCRIPTDESC_ROOT( CBaseEntity, "Root class of all server-side entities" )
|
||||
DEFINE_SCRIPT_INSTANCE_HELPER( &g_BaseEntityScriptInstanceHelper )
|
||||
BEGIN_ENT_SCRIPTDESC_ROOT_WITH_HELPER( CBaseEntity, "Root class of all server-side entities", &g_BaseEntityScriptInstanceHelper )
|
||||
DEFINE_SCRIPTFUNC_NAMED( ConnectOutputToScript, "ConnectOutput", "Adds an I/O connection that will call the named function when the specified output fires" )
|
||||
DEFINE_SCRIPTFUNC_NAMED( DisconnectOutputFromScript, "DisconnectOutput", "Removes a connected script function from an I/O event." )
|
||||
|
||||
|
@ -255,7 +255,7 @@ inline HSCRIPT ToHScript(CBaseEntity* pEnt)
|
||||
return (pEnt) ? pEnt->GetScriptInstance() : NULL;
|
||||
}
|
||||
|
||||
template <> ScriptClassDesc_t* GetScriptDesc<CBaseEntity>(CBaseEntity*);
|
||||
template <> ScriptClassDesc_t* GetScriptDesc<CBaseEntity>(CBaseEntity*, bool);
|
||||
inline CBaseEntity* ToEnt(HSCRIPT hScript)
|
||||
{
|
||||
return (hScript) ? (CBaseEntity*)g_pScriptVM->GetInstanceValue(hScript, GetScriptDescForClass(CBaseEntity)) : NULL;
|
||||
|
@ -376,8 +376,7 @@ END_SCRIPTDESC();
|
||||
|
||||
CPlaneTInstanceHelper g_PlaneTInstanceHelper;
|
||||
|
||||
BEGIN_SCRIPTDESC_ROOT( cplane_t, "" )
|
||||
DEFINE_SCRIPT_INSTANCE_HELPER( &g_PlaneTInstanceHelper )
|
||||
BEGIN_SCRIPTDESC_ROOT_WITH_HELPER( cplane_t, "", &g_PlaneTInstanceHelper )
|
||||
END_SCRIPTDESC();
|
||||
|
||||
static HSCRIPT ScriptTraceLineComplex( const Vector &vecStart, const Vector &vecEnd, HSCRIPT entIgnore, int iMask, int iCollisionGroup )
|
||||
@ -509,9 +508,7 @@ static void DestroyFireBulletsInfo( HSCRIPT hBulletsInfo )
|
||||
//-----------------------------------------------------------------------------
|
||||
CAnimEventTInstanceHelper g_AnimEventTInstanceHelper;
|
||||
|
||||
BEGIN_SCRIPTDESC_ROOT( scriptanimevent_t, "" )
|
||||
DEFINE_SCRIPT_INSTANCE_HELPER( &g_AnimEventTInstanceHelper )
|
||||
|
||||
BEGIN_SCRIPTDESC_ROOT_WITH_HELPER( scriptanimevent_t, "", &g_AnimEventTInstanceHelper )
|
||||
DEFINE_SCRIPTFUNC( GetEvent, "" )
|
||||
DEFINE_SCRIPTFUNC( SetEvent, "" )
|
||||
|
||||
|
@ -21,12 +21,16 @@ inline bool VScriptRunScript( const char *pszScriptName, bool bWarnMissing = fal
|
||||
|
||||
#define DECLARE_ENT_SCRIPTDESC() ALLOW_SCRIPT_ACCESS(); virtual ScriptClassDesc_t *GetScriptDesc()
|
||||
|
||||
#define BEGIN_ENT_SCRIPTDESC( className, baseClass, description ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC( className, baseClass, description )
|
||||
#define BEGIN_ENT_SCRIPTDESC_ROOT( className, description ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_ROOT( className, description )
|
||||
#define BEGIN_ENT_SCRIPTDESC_NAMED( className, baseClass, scriptName, description ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_NAMED( className, baseClass, scriptName, description )
|
||||
#define BEGIN_ENT_SCRIPTDESC_ROOT_NAMED( className, scriptName, description ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_ROOT_NAMED( className, scriptName, description )
|
||||
#define BEGIN_ENT_SCRIPTDESC( className, baseClass, description ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC( className, baseClass, description )
|
||||
#define BEGIN_ENT_SCRIPTDESC_WITH_HELPER( className, baseClass, description, helper ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_WITH_HELPER( className, baseClass, description, helper )
|
||||
#define BEGIN_ENT_SCRIPTDESC_ROOT( className, description ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_ROOT( className, description )
|
||||
#define BEGIN_ENT_SCRIPTDESC_ROOT_WITH_HELPER( className, description, helper ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_ROOT_WITH_HELPER( className, description, helper )
|
||||
#define BEGIN_ENT_SCRIPTDESC_NAMED( className, baseClass, scriptName, description ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_NAMED( className, baseClass, scriptName, description )
|
||||
#define BEGIN_ENT_SCRIPTDESC_NAMED_WITH_HELPER( className, baseClass, scriptName, description, helper ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_NAMED_WITH_HELPER( className, baseClass, scriptName, description, helper )
|
||||
#define BEGIN_ENT_SCRIPTDESC_ROOT_NAMED( className, scriptName, description ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_ROOT_NAMED( className, scriptName, description )
|
||||
#define BEGIN_ENT_SCRIPTDESC_ROOT_NAMED_WITH_HELPER( className, scriptName, description, helper ) _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ); BEGIN_SCRIPTDESC_ROOT_NAMED_WITH_HELPER( className, scriptName, description, helper )
|
||||
|
||||
#define _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ) template <> ScriptClassDesc_t * GetScriptDesc<className>( className * ); ScriptClassDesc_t *className::GetScriptDesc() { return ::GetScriptDesc( this ); }
|
||||
#define _IMPLEMENT_ENT_SCRIPTDESC_ACCESSOR( className ) template <> ScriptClassDesc_t * GetScriptDesc<className>( className *, bool ); ScriptClassDesc_t *className::GetScriptDesc() { return ::GetScriptDesc( this ); }
|
||||
|
||||
// Only allow scripts to create entities during map initialization
|
||||
bool IsEntityCreationAllowedInScripts( void );
|
||||
|
@ -698,37 +698,48 @@ static inline int ToConstantVariant(int value)
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define ALLOW_SCRIPT_ACCESS() template <typename T> friend ScriptClassDesc_t *GetScriptDesc(T *);
|
||||
#define ALLOW_SCRIPT_ACCESS() template <typename T> friend ScriptClassDesc_t *GetScriptDesc(T *, bool);
|
||||
|
||||
#define BEGIN_SCRIPTDESC( className, baseClass, description ) BEGIN_SCRIPTDESC_NAMED( className, baseClass, #className, description )
|
||||
#define BEGIN_SCRIPTDESC_ROOT( className, description ) BEGIN_SCRIPTDESC_ROOT_NAMED( className, #className, description )
|
||||
#define BEGIN_SCRIPTDESC( className, baseClass, description ) BEGIN_SCRIPTDESC_WITH_HELPER( className, baseClass, description, NULL )
|
||||
#define BEGIN_SCRIPTDESC_WITH_HELPER( className, baseClass, description, helper ) BEGIN_SCRIPTDESC_NAMED_WITH_HELPER( className, baseClass, #className, description, helper )
|
||||
#define BEGIN_SCRIPTDESC_ROOT( className, description ) BEGIN_SCRIPTDESC_ROOT_WITH_HELPER( className, description, NULL )
|
||||
#define BEGIN_SCRIPTDESC_ROOT_WITH_HELPER( className, description, helper ) BEGIN_SCRIPTDESC_ROOT_NAMED_WITH_HELPER( className, #className, description, helper )
|
||||
|
||||
#define BEGIN_SCRIPTDESC_NAMED( className, baseClass, scriptName, description ) \
|
||||
template <> ScriptClassDesc_t* GetScriptDesc<baseClass>(baseClass*); \
|
||||
template <> ScriptClassDesc_t* GetScriptDesc<className>(className*); \
|
||||
ScriptClassDesc_t & g_##className##_ScriptDesc = *GetScriptDesc<className>(nullptr); \
|
||||
template <> ScriptClassDesc_t* GetScriptDesc<className>(className*) \
|
||||
#define BEGIN_SCRIPTDESC_NAMED_WITH_HELPER( className, baseClass, scriptName, description, helper ) \
|
||||
template <> ScriptClassDesc_t* GetScriptDesc<baseClass>(baseClass*, bool); \
|
||||
template <> ScriptClassDesc_t* GetScriptDesc<className>(className*, bool); \
|
||||
ScriptClassDesc_t & g_##className##_ScriptDesc = *GetScriptDesc<className>(nullptr, true); \
|
||||
template <> ScriptClassDesc_t* GetScriptDesc<className>(className*, bool init) \
|
||||
{ \
|
||||
static ScriptClassDesc_t g_##className##_ScriptDesc; \
|
||||
typedef className _className; \
|
||||
ScriptClassDesc_t *pDesc = &g_##className##_ScriptDesc; \
|
||||
if (pDesc->m_pszClassname) return pDesc; \
|
||||
pDesc->m_pszDescription = description; \
|
||||
ScriptInitClassDescNamed( pDesc, className, GetScriptDescForClass( baseClass ), scriptName ); \
|
||||
ScriptClassDesc_t *pInstanceHelperBase = pDesc->m_pBaseDesc; \
|
||||
while ( pInstanceHelperBase ) \
|
||||
if (!pDesc->m_pszClassname) \
|
||||
{ \
|
||||
if ( pInstanceHelperBase->pHelper ) \
|
||||
pDesc->m_pszDescription = description; \
|
||||
ScriptClassDesc_t *pBaseDesc = GetScriptDescForClass( baseClass ); \
|
||||
ScriptInitClassDescNamed( pDesc, className, pBaseDesc, scriptName ); \
|
||||
pDesc->pHelper = helper; \
|
||||
if ( !pDesc->pHelper ) \
|
||||
{ \
|
||||
pDesc->pHelper = pInstanceHelperBase->pHelper; \
|
||||
break; \
|
||||
while ( pBaseDesc ) \
|
||||
{ \
|
||||
if ( pBaseDesc->pHelper ) \
|
||||
{ \
|
||||
pDesc->pHelper = pBaseDesc->pHelper; \
|
||||
break; \
|
||||
} \
|
||||
pBaseDesc = pBaseDesc->m_pBaseDesc; \
|
||||
} \
|
||||
} \
|
||||
pInstanceHelperBase = pInstanceHelperBase->m_pBaseDesc; \
|
||||
}
|
||||
} \
|
||||
if (!init) return pDesc;
|
||||
|
||||
|
||||
#define BEGIN_SCRIPTDESC_ROOT_NAMED( className, scriptName, description ) \
|
||||
BEGIN_SCRIPTDESC_NAMED( className, ScriptNoBase_t, scriptName, description )
|
||||
BEGIN_SCRIPTDESC_ROOT_NAMED_WITH_HELPER( className, scriptName, description, NULL )
|
||||
#define BEGIN_SCRIPTDESC_ROOT_NAMED_WITH_HELPER( className, scriptName, description, helper ) \
|
||||
BEGIN_SCRIPTDESC_NAMED_WITH_HELPER( className, ScriptNoBase_t, scriptName, description, helper )
|
||||
|
||||
#define END_SCRIPTDESC() \
|
||||
return pDesc; \
|
||||
@ -737,7 +748,7 @@ static inline int ToConstantVariant(int value)
|
||||
#define DEFINE_SCRIPTFUNC( func, description ) DEFINE_SCRIPTFUNC_NAMED( func, #func, description )
|
||||
#define DEFINE_SCRIPTFUNC_NAMED( func, scriptName, description ) ScriptAddFunctionToClassDescNamed( pDesc, _className, func, scriptName, description );
|
||||
#define DEFINE_SCRIPT_CONSTRUCTOR() ScriptAddConstructorToClassDesc( pDesc, _className );
|
||||
#define DEFINE_SCRIPT_INSTANCE_HELPER( p ) pDesc->pHelper = (p);
|
||||
#define DEFINE_SCRIPT_INSTANCE_HELPER( p ) MUST_USE_BEGIN_SCRIPTDESC_WITH_HELPER_INSTEAD
|
||||
|
||||
#ifdef MAPBASE_VSCRIPT
|
||||
// Use this for hooks which have no parameters
|
||||
@ -782,10 +793,10 @@ static inline int ToConstantVariant(int value)
|
||||
do { ScriptMemberDesc_t *pBinding = &((pDesc)->m_Members[(pDesc)->m_Members.AddToTail()]); pBinding->m_pszScriptName = varName; pBinding->m_pszDescription = description; pBinding->m_ReturnType = returnType; } while (0);
|
||||
#endif
|
||||
|
||||
template <typename T> ScriptClassDesc_t *GetScriptDesc(T *);
|
||||
template <typename T> ScriptClassDesc_t *GetScriptDesc(T *, bool = false);
|
||||
|
||||
struct ScriptNoBase_t;
|
||||
template <> inline ScriptClassDesc_t *GetScriptDesc<ScriptNoBase_t>( ScriptNoBase_t *) { return NULL; }
|
||||
template <> inline ScriptClassDesc_t *GetScriptDesc<ScriptNoBase_t>( ScriptNoBase_t *, bool ) { return NULL; }
|
||||
|
||||
#define GetScriptDescForClass( className ) GetScriptDesc( ( className *)NULL )
|
||||
|
||||
|
@ -387,10 +387,9 @@ CScriptKeyValues::~CScriptKeyValues( )
|
||||
//=============================================================================
|
||||
CScriptColorInstanceHelper g_ColorScriptInstanceHelper;
|
||||
|
||||
BEGIN_SCRIPTDESC_ROOT( Color, "" )
|
||||
BEGIN_SCRIPTDESC_ROOT_WITH_HELPER( Color, "", &g_ColorScriptInstanceHelper )
|
||||
|
||||
DEFINE_SCRIPT_CONSTRUCTOR()
|
||||
DEFINE_SCRIPT_INSTANCE_HELPER( &g_ColorScriptInstanceHelper )
|
||||
|
||||
DEFINE_SCRIPTFUNC( SetColor, "Sets the color." )
|
||||
|
||||
|
@ -205,10 +205,9 @@ void ScriptMatrixSetTranslation( const Vector& vecset, HSCRIPT hMat1 )
|
||||
//=============================================================================
|
||||
CScriptQuaternionInstanceHelper g_QuaternionScriptInstanceHelper;
|
||||
|
||||
BEGIN_SCRIPTDESC_ROOT_NAMED( Quaternion, "Quaternion", "A quaternion." )
|
||||
BEGIN_SCRIPTDESC_ROOT_NAMED_WITH_HELPER( Quaternion, "Quaternion", "A quaternion.", &g_QuaternionScriptInstanceHelper )
|
||||
|
||||
DEFINE_SCRIPT_CONSTRUCTOR()
|
||||
DEFINE_SCRIPT_INSTANCE_HELPER( &g_QuaternionScriptInstanceHelper )
|
||||
DEFINE_SCRIPTFUNC_NAMED( ScriptInit, "Init", "Creates a quaternion with the given values." )
|
||||
|
||||
DEFINE_MEMBERVAR( "x", FIELD_FLOAT, "The quaternion's i axis component." )
|
||||
|
Loading…
x
Reference in New Issue
Block a user