mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2024-12-27 15:25:30 +03:00
Added global VScript hooks for entity creation/deletion
This commit is contained in:
parent
35f941d6d0
commit
525e3214f2
@ -41,10 +41,13 @@ extern ScriptClassDesc_t * GetScriptDesc( CBaseEntity * );
|
|||||||
#endif // VMPROFILE
|
#endif // VMPROFILE
|
||||||
|
|
||||||
#ifdef MAPBASE_VSCRIPT
|
#ifdef MAPBASE_VSCRIPT
|
||||||
|
static ScriptHook_t g_Hook_OnEntityCreated;
|
||||||
|
static ScriptHook_t g_Hook_OnEntityDeleted;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Purpose: A clientside variant of CScriptEntityIterator.
|
// Purpose: A clientside variant of CScriptEntityIterator.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
class CScriptClientEntityIterator
|
class CScriptClientEntityIterator : public IClientEntityListener
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HSCRIPT GetLocalPlayer()
|
HSCRIPT GetLocalPlayer()
|
||||||
@ -96,6 +99,38 @@ public:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EnableEntityListening()
|
||||||
|
{
|
||||||
|
// Start getting entity updates!
|
||||||
|
ClientEntityList().AddListenerEntity( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisableEntityListening()
|
||||||
|
{
|
||||||
|
// Stop getting entity updates!
|
||||||
|
ClientEntityList().RemoveListenerEntity( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnEntityCreated( CBaseEntity *pEntity )
|
||||||
|
{
|
||||||
|
if ( g_pScriptVM )
|
||||||
|
{
|
||||||
|
// entity
|
||||||
|
ScriptVariant_t args[] = { ScriptVariant_t( pEntity->GetScriptInstance() ) };
|
||||||
|
g_Hook_OnEntityCreated.Call( NULL, NULL, args );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void OnEntityDeleted( CBaseEntity *pEntity )
|
||||||
|
{
|
||||||
|
if ( g_pScriptVM )
|
||||||
|
{
|
||||||
|
// entity
|
||||||
|
ScriptVariant_t args[] = { ScriptVariant_t( pEntity->GetScriptInstance() ) };
|
||||||
|
g_Hook_OnEntityDeleted.Call( NULL, NULL, args );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
} g_ScriptEntityIterator;
|
} g_ScriptEntityIterator;
|
||||||
|
|
||||||
@ -106,6 +141,17 @@ BEGIN_SCRIPTDESC_ROOT_NAMED( CScriptClientEntityIterator, "CEntities", SCRIPT_SI
|
|||||||
DEFINE_SCRIPTFUNC( CreateByClassname, "Creates an entity by classname" )
|
DEFINE_SCRIPTFUNC( CreateByClassname, "Creates an entity by classname" )
|
||||||
DEFINE_SCRIPTFUNC( FindByClassname, "Find entities by class name. Pass 'null' to start an iteration, or reference to a previously found entity to continue a search" )
|
DEFINE_SCRIPTFUNC( FindByClassname, "Find entities by class name. Pass 'null' to start an iteration, or reference to a previously found entity to continue a search" )
|
||||||
DEFINE_SCRIPTFUNC( FindByName, "Find entities by name. Pass 'null' to start an iteration, or reference to a previously found entity to continue a search" )
|
DEFINE_SCRIPTFUNC( FindByName, "Find entities by name. Pass 'null' to start an iteration, or reference to a previously found entity to continue a search" )
|
||||||
|
|
||||||
|
DEFINE_SCRIPTFUNC( EnableEntityListening, "Enables the 'OnEntity' hooks. This function must be called before using them." )
|
||||||
|
DEFINE_SCRIPTFUNC( DisableEntityListening, "Disables the 'OnEntity' hooks." )
|
||||||
|
|
||||||
|
BEGIN_SCRIPTHOOK( g_Hook_OnEntityCreated, "OnEntityCreated", FIELD_VOID, "Called when an entity is created. Requires EnableEntityListening() to be fired beforehand." )
|
||||||
|
DEFINE_SCRIPTHOOK_PARAM( "entity", FIELD_HSCRIPT )
|
||||||
|
END_SCRIPTHOOK()
|
||||||
|
|
||||||
|
BEGIN_SCRIPTHOOK( g_Hook_OnEntityDeleted, "OnEntityDeleted", FIELD_VOID, "Called when an entity is deleted. Requires EnableEntityListening() to be fired beforehand." )
|
||||||
|
DEFINE_SCRIPTHOOK_PARAM( "entity", FIELD_HSCRIPT )
|
||||||
|
END_SCRIPTHOOK()
|
||||||
END_SCRIPTDESC();
|
END_SCRIPTDESC();
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -37,10 +37,16 @@ extern ScriptClassDesc_t * GetScriptDesc( CBaseEntity * );
|
|||||||
#endif // VMPROFILE
|
#endif // VMPROFILE
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef MAPBASE_VSCRIPT
|
||||||
|
static ScriptHook_t g_Hook_OnEntityCreated;
|
||||||
|
static ScriptHook_t g_Hook_OnEntitySpawned;
|
||||||
|
static ScriptHook_t g_Hook_OnEntityDeleted;
|
||||||
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
class CScriptEntityIterator
|
class CScriptEntityIterator : public IEntityListener
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
#ifdef MAPBASE_VSCRIPT
|
#ifdef MAPBASE_VSCRIPT
|
||||||
@ -115,6 +121,48 @@ public:
|
|||||||
{
|
{
|
||||||
return ToHScript( gEntList.FindEntityClassNearestFacing( origin, facing, threshold, const_cast<char*>(classname) ) );
|
return ToHScript( gEntList.FindEntityClassNearestFacing( origin, facing, threshold, const_cast<char*>(classname) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EnableEntityListening()
|
||||||
|
{
|
||||||
|
// Start getting entity updates!
|
||||||
|
gEntList.AddListenerEntity( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisableEntityListening()
|
||||||
|
{
|
||||||
|
// Stop getting entity updates!
|
||||||
|
gEntList.RemoveListenerEntity( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnEntityCreated( CBaseEntity *pEntity )
|
||||||
|
{
|
||||||
|
if ( g_pScriptVM )
|
||||||
|
{
|
||||||
|
// entity
|
||||||
|
ScriptVariant_t args[] = { ScriptVariant_t( pEntity->GetScriptInstance() ) };
|
||||||
|
g_Hook_OnEntityCreated.Call( NULL, NULL, args );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void OnEntitySpawned( CBaseEntity *pEntity )
|
||||||
|
{
|
||||||
|
if ( g_pScriptVM )
|
||||||
|
{
|
||||||
|
// entity
|
||||||
|
ScriptVariant_t args[] = { ScriptVariant_t( pEntity->GetScriptInstance() ) };
|
||||||
|
g_Hook_OnEntitySpawned.Call( NULL, NULL, args );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void OnEntityDeleted( CBaseEntity *pEntity )
|
||||||
|
{
|
||||||
|
if ( g_pScriptVM )
|
||||||
|
{
|
||||||
|
// entity
|
||||||
|
ScriptVariant_t args[] = { ScriptVariant_t( pEntity->GetScriptInstance() ) };
|
||||||
|
g_Hook_OnEntityDeleted.Call( NULL, NULL, args );
|
||||||
|
}
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
private:
|
private:
|
||||||
} g_ScriptEntityIterator;
|
} g_ScriptEntityIterator;
|
||||||
@ -138,6 +186,21 @@ BEGIN_SCRIPTDESC_ROOT_NAMED( CScriptEntityIterator, "CEntities", SCRIPT_SINGLETO
|
|||||||
#ifdef MAPBASE_VSCRIPT
|
#ifdef MAPBASE_VSCRIPT
|
||||||
DEFINE_SCRIPTFUNC( FindByClassnameWithinBox, "Find entities by class name within an AABB. Pass 'null' to start an iteration, or reference to a previously found entity to continue a search" )
|
DEFINE_SCRIPTFUNC( FindByClassnameWithinBox, "Find entities by class name within an AABB. Pass 'null' to start an iteration, or reference to a previously found entity to continue a search" )
|
||||||
DEFINE_SCRIPTFUNC( FindByClassNearestFacing, "Find the nearest entity along the facing direction from the given origin within the angular threshold with the given classname." )
|
DEFINE_SCRIPTFUNC( FindByClassNearestFacing, "Find the nearest entity along the facing direction from the given origin within the angular threshold with the given classname." )
|
||||||
|
|
||||||
|
DEFINE_SCRIPTFUNC( EnableEntityListening, "Enables the 'OnEntity' hooks. This function must be called before using them." )
|
||||||
|
DEFINE_SCRIPTFUNC( DisableEntityListening, "Disables the 'OnEntity' hooks." )
|
||||||
|
|
||||||
|
BEGIN_SCRIPTHOOK( g_Hook_OnEntityCreated, "OnEntityCreated", FIELD_VOID, "Called when an entity is created. Requires EnableEntityListening() to be fired beforehand." )
|
||||||
|
DEFINE_SCRIPTHOOK_PARAM( "entity", FIELD_HSCRIPT )
|
||||||
|
END_SCRIPTHOOK()
|
||||||
|
|
||||||
|
BEGIN_SCRIPTHOOK( g_Hook_OnEntitySpawned, "OnEntitySpawned", FIELD_VOID, "Called when an entity spawns. Requires EnableEntityListening() to be fired beforehand." )
|
||||||
|
DEFINE_SCRIPTHOOK_PARAM( "entity", FIELD_HSCRIPT )
|
||||||
|
END_SCRIPTHOOK()
|
||||||
|
|
||||||
|
BEGIN_SCRIPTHOOK( g_Hook_OnEntityDeleted, "OnEntityDeleted", FIELD_VOID, "Called when an entity is deleted. Requires EnableEntityListening() to be fired beforehand." )
|
||||||
|
DEFINE_SCRIPTHOOK_PARAM( "entity", FIELD_HSCRIPT )
|
||||||
|
END_SCRIPTHOOK()
|
||||||
#endif
|
#endif
|
||||||
END_SCRIPTDESC();
|
END_SCRIPTDESC();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user