mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2024-12-27 07:15:31 +03:00
Created a limited clientside CScriptEntityIterator
This commit is contained in:
parent
7d2c6315b5
commit
0094d707b9
@ -15,6 +15,7 @@
|
|||||||
#include "gamerules.h"
|
#include "gamerules.h"
|
||||||
#include "vscript_client.nut"
|
#include "vscript_client.nut"
|
||||||
#ifdef MAPBASE_VSCRIPT
|
#ifdef MAPBASE_VSCRIPT
|
||||||
|
#include "mapbase/matchers.h"
|
||||||
#include "c_world.h"
|
#include "c_world.h"
|
||||||
#include "proxyentity.h"
|
#include "proxyentity.h"
|
||||||
#include "materialsystem/imaterial.h"
|
#include "materialsystem/imaterial.h"
|
||||||
@ -39,6 +40,67 @@ extern ScriptClassDesc_t * GetScriptDesc( CBaseEntity * );
|
|||||||
#endif // VMPROFILE
|
#endif // VMPROFILE
|
||||||
|
|
||||||
#ifdef MAPBASE_VSCRIPT
|
#ifdef MAPBASE_VSCRIPT
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Purpose: A clientside variant of CScriptEntityIterator.
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
class CScriptClientEntityIterator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HSCRIPT First() { return Next(NULL); }
|
||||||
|
|
||||||
|
HSCRIPT Next( HSCRIPT hStartEntity )
|
||||||
|
{
|
||||||
|
return ToHScript( ClientEntityList().NextBaseEntity( ToEnt( hStartEntity ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
HSCRIPT CreateByClassname( const char *className )
|
||||||
|
{
|
||||||
|
return ToHScript( CreateEntityByName( className ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
HSCRIPT FindByClassname( HSCRIPT hStartEntity, const char *szName )
|
||||||
|
{
|
||||||
|
const CEntInfo *pInfo = hStartEntity ? ClientEntityList().GetEntInfoPtr( ToEnt( hStartEntity )->GetRefEHandle() )->m_pNext : ClientEntityList().FirstEntInfo();
|
||||||
|
for ( ;pInfo; pInfo = pInfo->m_pNext )
|
||||||
|
{
|
||||||
|
C_BaseEntity *ent = (C_BaseEntity *)pInfo->m_pEntity;
|
||||||
|
if ( !ent )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( Matcher_Match( szName, ent->GetClassname() ) )
|
||||||
|
return ToHScript( ent );
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
HSCRIPT FindByName( HSCRIPT hStartEntity, const char *szName )
|
||||||
|
{
|
||||||
|
const CEntInfo *pInfo = hStartEntity ? ClientEntityList().GetEntInfoPtr( ToEnt( hStartEntity )->GetRefEHandle() )->m_pNext : ClientEntityList().FirstEntInfo();
|
||||||
|
for ( ;pInfo; pInfo = pInfo->m_pNext )
|
||||||
|
{
|
||||||
|
C_BaseEntity *ent = (C_BaseEntity *)pInfo->m_pEntity;
|
||||||
|
if ( !ent )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( Matcher_Match( szName, ent->GetEntityName() ) )
|
||||||
|
return ToHScript( ent );
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
} g_ScriptEntityIterator;
|
||||||
|
|
||||||
|
BEGIN_SCRIPTDESC_ROOT_NAMED( CScriptClientEntityIterator, "CEntities", SCRIPT_SINGLETON "The global list of entities" )
|
||||||
|
DEFINE_SCRIPTFUNC( First, "Begin an iteration over the list of entities" )
|
||||||
|
DEFINE_SCRIPTFUNC( Next, "Continue an iteration over the list of entities, providing reference to a previously found entity" )
|
||||||
|
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( FindByName, "Find entities by name. Pass 'null' to start an iteration, or reference to a previously found entity to continue a search" )
|
||||||
|
END_SCRIPTDESC();
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Purpose: A base class for VScript-utilizing clientside classes which can persist
|
// Purpose: A base class for VScript-utilizing clientside classes which can persist
|
||||||
// across levels, requiring their scripts to be shut down manually.
|
// across levels, requiring their scripts to be shut down manually.
|
||||||
@ -424,12 +486,14 @@ bool VScriptClientInit()
|
|||||||
GameRules()->RegisterScriptFunctions();
|
GameRules()->RegisterScriptFunctions();
|
||||||
}
|
}
|
||||||
|
|
||||||
//g_pScriptVM->RegisterInstance( &g_ScriptEntityIterator, "Entities" );
|
|
||||||
|
|
||||||
#ifdef MAPBASE_VSCRIPT
|
#ifdef MAPBASE_VSCRIPT
|
||||||
|
g_pScriptVM->RegisterInstance( &g_ScriptEntityIterator, "Entities" );
|
||||||
|
|
||||||
IGameSystem::RegisterVScriptAllSystems();
|
IGameSystem::RegisterVScriptAllSystems();
|
||||||
|
|
||||||
RegisterSharedScriptFunctions();
|
RegisterSharedScriptFunctions();
|
||||||
|
#else
|
||||||
|
//g_pScriptVM->RegisterInstance( &g_ScriptEntityIterator, "Entities" );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (scriptLanguage == SL_SQUIRREL)
|
if (scriptLanguage == SL_SQUIRREL)
|
||||||
|
Loading…
Reference in New Issue
Block a user