1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2025-09-19 20:16:10 +08:00

Numerous VScript and datadesc type updates.

This commit is contained in:
Nicholas Hastings
2013-12-18 00:11:54 -05:00
parent 0a130c1a1f
commit 5e193a4524
2 changed files with 93 additions and 17 deletions

View File

@ -42,12 +42,10 @@ typedef enum _fieldtypes
FIELD_CLASSPTR, // CBaseEntity * FIELD_CLASSPTR, // CBaseEntity *
FIELD_EHANDLE, // Entity handle FIELD_EHANDLE, // Entity handle
FIELD_EDICT, // edict_t *
FIELD_POSITION_VECTOR, // A world coordinate (these are fixed up across level transitions automagically) FIELD_POSITION_VECTOR, // A world coordinate (these are fixed up across level transitions automagically)
FIELD_TIME, // a floating point time (these are fixed up automatically too!) FIELD_TIME, // a floating point time (these are fixed up automatically too!)
FIELD_TICK, // an integer tick count( fixed up similarly to time) FIELD_TICK, // an integer tick count( fixed up similarly to time)
FIELD_MODELNAME, // Engine string that is a model name (needs precache)
FIELD_SOUNDNAME, // Engine string that is a sound name (needs precache) FIELD_SOUNDNAME, // Engine string that is a sound name (needs precache)
FIELD_INPUT, // a list of inputed data fields (all derived from CMultiInputVar) FIELD_INPUT, // a list of inputed data fields (all derived from CMultiInputVar)
@ -60,7 +58,6 @@ typedef enum _fieldtypes
FIELD_MATRIX3X4_WORLDSPACE, // matrix3x4_t that maps some local space to world space (translation is fixed up on level transitions) FIELD_MATRIX3X4_WORLDSPACE, // matrix3x4_t that maps some local space to world space (translation is fixed up on level transitions)
FIELD_INTERVAL, // a start and range floating point interval ( e.g., 3.2->3.6 == 3.2 and 0.4 ) FIELD_INTERVAL, // a start and range floating point interval ( e.g., 3.2->3.6 == 3.2 and 0.4 )
FIELD_MODELINDEX, // a model index
FIELD_MATERIALINDEX, // a material index (using the material precache string table) FIELD_MATERIALINDEX, // a material index (using the material precache string table)
FIELD_VECTOR2D, // 2 floats FIELD_VECTOR2D, // 2 floats
@ -68,6 +65,8 @@ typedef enum _fieldtypes
FIELD_VECTOR4D, // 4 floats FIELD_VECTOR4D, // 4 floats
FIELD_RESOURCE,
FIELD_TYPECOUNT, // MUST BE LAST FIELD_TYPECOUNT, // MUST BE LAST
} fieldtype_t; } fieldtype_t;
@ -109,11 +108,9 @@ DECLARE_FIELD_SIZE( FIELD_CHARACTER, sizeof(char))
DECLARE_FIELD_SIZE( FIELD_COLOR32, sizeof(int)) DECLARE_FIELD_SIZE( FIELD_COLOR32, sizeof(int))
DECLARE_FIELD_SIZE( FIELD_CLASSPTR, sizeof(int)) DECLARE_FIELD_SIZE( FIELD_CLASSPTR, sizeof(int))
DECLARE_FIELD_SIZE( FIELD_EHANDLE, sizeof(int)) DECLARE_FIELD_SIZE( FIELD_EHANDLE, sizeof(int))
DECLARE_FIELD_SIZE( FIELD_EDICT, sizeof(int))
DECLARE_FIELD_SIZE( FIELD_POSITION_VECTOR, 3 * sizeof(float)) DECLARE_FIELD_SIZE( FIELD_POSITION_VECTOR, 3 * sizeof(float))
DECLARE_FIELD_SIZE( FIELD_TIME, sizeof(float)) DECLARE_FIELD_SIZE( FIELD_TIME, sizeof(float))
DECLARE_FIELD_SIZE( FIELD_TICK, sizeof(int)) DECLARE_FIELD_SIZE( FIELD_TICK, sizeof(int))
DECLARE_FIELD_SIZE( FIELD_MODELNAME, sizeof(int))
DECLARE_FIELD_SIZE( FIELD_SOUNDNAME, sizeof(int)) DECLARE_FIELD_SIZE( FIELD_SOUNDNAME, sizeof(int))
DECLARE_FIELD_SIZE( FIELD_INPUT, sizeof(int)) DECLARE_FIELD_SIZE( FIELD_INPUT, sizeof(int))
DECLARE_FIELD_SIZE( FIELD_FUNCTION, sizeof(int *)) DECLARE_FIELD_SIZE( FIELD_FUNCTION, sizeof(int *))
@ -121,7 +118,6 @@ DECLARE_FIELD_SIZE( FIELD_VMATRIX, 16 * sizeof(float))
DECLARE_FIELD_SIZE( FIELD_VMATRIX_WORLDSPACE, 16 * sizeof(float)) DECLARE_FIELD_SIZE( FIELD_VMATRIX_WORLDSPACE, 16 * sizeof(float))
DECLARE_FIELD_SIZE( FIELD_MATRIX3X4_WORLDSPACE, 12 * sizeof(float)) DECLARE_FIELD_SIZE( FIELD_MATRIX3X4_WORLDSPACE, 12 * sizeof(float))
DECLARE_FIELD_SIZE( FIELD_INTERVAL, 2 * sizeof( float) ) // NOTE: Must match interval.h definition DECLARE_FIELD_SIZE( FIELD_INTERVAL, 2 * sizeof( float) ) // NOTE: Must match interval.h definition
DECLARE_FIELD_SIZE( FIELD_MODELINDEX, sizeof(int) )
DECLARE_FIELD_SIZE( FIELD_MATERIALINDEX, sizeof(int) ) DECLARE_FIELD_SIZE( FIELD_MATERIALINDEX, sizeof(int) )

View File

@ -121,7 +121,7 @@ class CUtlBuffer;
// //
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#define VSCRIPT_INTERFACE_VERSION "VScriptManager009" #define VSCRIPT_INTERFACE_VERSION "VScriptManager010"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
@ -164,6 +164,13 @@ enum ExtendedFieldType
FIELD_CSTRING, FIELD_CSTRING,
FIELD_HSCRIPT, FIELD_HSCRIPT,
FIELD_VARIANT, FIELD_VARIANT,
FIELD_UINT64,
FIELD_DOUBLE,
FIELD_POSITIVEINTEGER_OR_NULL,
FIELD_HSCRIPT_NEW_INSTANCE,
FIELD_UINT,
FIELD_UTLSTRINGTOKEN,
FIELD_QANGLE,
}; };
typedef int ScriptDataType_t; typedef int ScriptDataType_t;
@ -183,6 +190,11 @@ DECLARE_DEDUCE_FIELDTYPE( FIELD_BOOLEAN, bool );
DECLARE_DEDUCE_FIELDTYPE( FIELD_CHARACTER, char ); DECLARE_DEDUCE_FIELDTYPE( FIELD_CHARACTER, char );
DECLARE_DEDUCE_FIELDTYPE( FIELD_HSCRIPT, HSCRIPT ); DECLARE_DEDUCE_FIELDTYPE( FIELD_HSCRIPT, HSCRIPT );
DECLARE_DEDUCE_FIELDTYPE( FIELD_VARIANT, ScriptVariant_t ); DECLARE_DEDUCE_FIELDTYPE( FIELD_VARIANT, ScriptVariant_t );
DECLARE_DEDUCE_FIELDTYPE( FIELD_UINT64, uint64 );
DECLARE_DEDUCE_FIELDTYPE( FIELD_DOUBLE, double );
DECLARE_DEDUCE_FIELDTYPE( FIELD_UINT, uint );
DECLARE_DEDUCE_FIELDTYPE( FIELD_QANGLE, QAngle );
DECLARE_DEDUCE_FIELDTYPE( FIELD_QANGLE, const QAngle &);
#define ScriptDeduceType( T ) ScriptDeducer<T>::FIELD_TYPE #define ScriptDeduceType( T ) ScriptDeducer<T>::FIELD_TYPE
@ -204,6 +216,11 @@ DECLARE_NAMED_FIELDTYPE( bool, "boolean" );
DECLARE_NAMED_FIELDTYPE( char, "character" ); DECLARE_NAMED_FIELDTYPE( char, "character" );
DECLARE_NAMED_FIELDTYPE( HSCRIPT, "hscript" ); DECLARE_NAMED_FIELDTYPE( HSCRIPT, "hscript" );
DECLARE_NAMED_FIELDTYPE( ScriptVariant_t, "variant" ); DECLARE_NAMED_FIELDTYPE( ScriptVariant_t, "variant" );
DECLARE_NAMED_FIELDTYPE( uint64, "uint64" );
DECLARE_NAMED_FIELDTYPE( double, "double" );
DECLARE_NAMED_FIELDTYPE( uint, "unsigned" );
DECLARE_NAMED_FIELDTYPE( QAngle, "qangle" );
DECLARE_NAMED_FIELDTYPE( const QAngle&, "qangle" );
inline const char * ScriptFieldTypeName( int16 eType) inline const char * ScriptFieldTypeName( int16 eType)
{ {
@ -218,6 +235,10 @@ inline const char * ScriptFieldTypeName( int16 eType)
case FIELD_CHARACTER: return "character"; case FIELD_CHARACTER: return "character";
case FIELD_HSCRIPT: return "hscript"; case FIELD_HSCRIPT: return "hscript";
case FIELD_VARIANT: return "variant"; case FIELD_VARIANT: return "variant";
case FIELD_UINT64: return "uint64";
case FIELD_DOUBLE: return "double";
case FIELD_UINT: return "unsigned";
case FIELD_QANGLE: return "qangle";
default: return "unknown_script_type"; default: return "unknown_script_type";
} }
} }
@ -310,37 +331,52 @@ struct ScriptVariant_t
{ {
ScriptVariant_t() : m_flags( 0 ), m_type( FIELD_VOID ) { m_pVector = 0; } ScriptVariant_t() : m_flags( 0 ), m_type( FIELD_VOID ) { m_pVector = 0; }
ScriptVariant_t( int val ) : m_flags( 0 ), m_type( FIELD_INTEGER ) { m_int = val;} ScriptVariant_t( int val ) : m_flags( 0 ), m_type( FIELD_INTEGER ) { m_int = val;}
ScriptVariant_t( uint val) : m_flags( 0 ), m_type( FIELD_UINT ) { m_uint = val; }
ScriptVariant_t( float val ) : m_flags( 0 ), m_type( FIELD_FLOAT ) { m_float = val; } ScriptVariant_t( float val ) : m_flags( 0 ), m_type( FIELD_FLOAT ) { m_float = val; }
ScriptVariant_t( double val ) : m_flags( 0 ), m_type( FIELD_FLOAT ) { m_float = (float)val; } ScriptVariant_t( double val ) : m_flags( 0 ), m_type( FIELD_DOUBLE ) { m_double = val; }
ScriptVariant_t( char val ) : m_flags( 0 ), m_type( FIELD_CHARACTER ) { m_char = val; } ScriptVariant_t( char val ) : m_flags( 0 ), m_type( FIELD_CHARACTER ) { m_char = val; }
ScriptVariant_t( bool val ) : m_flags( 0 ), m_type( FIELD_BOOLEAN ) { m_bool = val; } ScriptVariant_t( bool val ) : m_flags( 0 ), m_type( FIELD_BOOLEAN ) { m_bool = val; }
ScriptVariant_t( HSCRIPT val ) : m_flags( 0 ), m_type( FIELD_HSCRIPT ) { m_hScript = val; } ScriptVariant_t( HSCRIPT val ) : m_flags( 0 ), m_type( FIELD_HSCRIPT ) { m_hScript = val; }
ScriptVariant_t( int64 val) : m_flags( 0 ), m_type( FIELD_INTEGER64 ) { m_int64 = val; }
ScriptVariant_t( uint64 val) : m_flags( 0 ), m_type( FIELD_UINT64) { m_uint64 = val; }
ScriptVariant_t( const Vector &val, bool bCopy = false ) : m_flags( 0 ), m_type( FIELD_VECTOR ) { if ( !bCopy ) { m_pVector = &val; } else { m_pVector = new Vector( val ); m_flags |= SV_FREE; } } ScriptVariant_t( const Vector &val, bool bCopy = false ) : m_flags( 0 ), m_type( FIELD_VECTOR ) { if ( !bCopy ) { m_pVector = &val; } else { m_pVector = new Vector( val ); m_flags |= SV_FREE; } }
ScriptVariant_t( const Vector *val, bool bCopy = false ) : m_flags( 0 ), m_type( FIELD_VECTOR ) { if ( !bCopy ) { m_pVector = val; } else { m_pVector = new Vector( *val ); m_flags |= SV_FREE; } } ScriptVariant_t( const Vector *val, bool bCopy = false ) : m_flags( 0 ), m_type( FIELD_VECTOR ) { if ( !bCopy ) { m_pVector = val; } else { m_pVector = new Vector( *val ); m_flags |= SV_FREE; } }
ScriptVariant_t( const QAngle &val, bool bCopy = false) : m_flags( 0 ), m_type( FIELD_QANGLE ) { if ( !bCopy ) { m_pQAngle = &val; } else { m_pQAngle = new QAngle(val); m_flags |= SV_FREE; } }
ScriptVariant_t( const QAngle *val, bool bCopy = false) : m_flags( 0 ), m_type( FIELD_QANGLE ) { if ( !bCopy ) { m_pQAngle = val; } else { m_pQAngle = new QAngle(*val); m_flags |= SV_FREE; } }
ScriptVariant_t( const char *val , bool bCopy = false ) : m_flags( 0 ), m_type( FIELD_CSTRING ) { if ( !bCopy ) { m_pszString = val; } else { m_pszString = strdup( val ); m_flags |= SV_FREE; } } ScriptVariant_t( const char *val , bool bCopy = false ) : m_flags( 0 ), m_type( FIELD_CSTRING ) { if ( !bCopy ) { m_pszString = val; } else { m_pszString = strdup( val ); m_flags |= SV_FREE; } }
bool IsNull() const { return (m_type == FIELD_VOID ); } bool IsNull() const { return (m_type == FIELD_VOID ); }
operator int() const { Assert( m_type == FIELD_INTEGER ); return m_int; } operator int() const { Assert( m_type == FIELD_INTEGER ); return m_int; }
operator uint() const { Assert( m_type == FIELD_UINT ); return m_uint; }
operator int64() const { Assert( m_type == FIELD_INTEGER64); return m_int64; }
operator uint64() const { Assert( m_type == FIELD_UINT64); return m_uint64; }
operator float() const { Assert( m_type == FIELD_FLOAT ); return m_float; } operator float() const { Assert( m_type == FIELD_FLOAT ); return m_float; }
operator double() const { Assert( m_type == FIELD_DOUBLE ); return m_double; }
operator const char *() const { Assert( m_type == FIELD_CSTRING ); return ( m_pszString ) ? m_pszString : ""; } operator const char *() const { Assert( m_type == FIELD_CSTRING ); return ( m_pszString ) ? m_pszString : ""; }
operator const Vector &() const { Assert( m_type == FIELD_VECTOR ); static Vector vecNull(0, 0, 0); return (m_pVector) ? *m_pVector : vecNull; } operator const Vector &() const { Assert( m_type == FIELD_VECTOR ); static Vector vecNull(0, 0, 0); return (m_pVector) ? *m_pVector : vecNull; }
operator const QAngle &() const { Assert( m_type == FIELD_QANGLE); static QAngle angNull(0, 0, 0); return (m_pQAngle) ? *m_pQAngle : angNull; }
operator char() const { Assert( m_type == FIELD_CHARACTER ); return m_char; } operator char() const { Assert( m_type == FIELD_CHARACTER ); return m_char; }
operator bool() const { Assert( m_type == FIELD_BOOLEAN ); return m_bool; } operator bool() const { Assert( m_type == FIELD_BOOLEAN ); return m_bool; }
operator HSCRIPT() const { Assert( m_type == FIELD_HSCRIPT ); return m_hScript; } operator HSCRIPT() const { Assert( m_type == FIELD_HSCRIPT ); return m_hScript; }
void operator=( int i ) { m_type = FIELD_INTEGER; m_int = i; } void operator=( int i ) { m_type = FIELD_INTEGER; m_int = i; }
void operator=( uint u ) { m_type = FIELD_UINT; m_uint = u; }
void operator=( int64 i ) { m_type = FIELD_INTEGER64; m_int64 = i; }
void operator=( uint64 u ) { m_type = FIELD_UINT64; m_uint64 = u; }
void operator=( float f ) { m_type = FIELD_FLOAT; m_float = f; } void operator=( float f ) { m_type = FIELD_FLOAT; m_float = f; }
void operator=( double f ) { m_type = FIELD_FLOAT; m_float = (float)f; } void operator=( double d ) { m_type = FIELD_DOUBLE; m_double = d; }
void operator=( const Vector &vec ) { m_type = FIELD_VECTOR; m_pVector = &vec; } void operator=( const Vector &vec ) { m_type = FIELD_VECTOR; m_pVector = &vec; }
void operator=( const Vector *vec ) { m_type = FIELD_VECTOR; m_pVector = vec; } void operator=( const Vector *vec ) { m_type = FIELD_VECTOR; m_pVector = vec; }
void operator=( const QAngle &ang) { m_type = FIELD_QANGLE; m_pQAngle = &ang; }
void operator=( const QAngle *ang) { m_type = FIELD_QANGLE; m_pQAngle = ang; }
void operator=( const char *psz ) { m_type = FIELD_CSTRING; m_pszString = psz; } void operator=( const char *psz ) { m_type = FIELD_CSTRING; m_pszString = psz; }
void operator=( char c ) { m_type = FIELD_CHARACTER; m_char = c; } void operator=( char c ) { m_type = FIELD_CHARACTER; m_char = c; }
void operator=( bool b ) { m_type = FIELD_BOOLEAN; m_bool = b; } void operator=( bool b ) { m_type = FIELD_BOOLEAN; m_bool = b; }
void operator=( HSCRIPT h ) { m_type = FIELD_HSCRIPT; m_hScript = h; } void operator=( HSCRIPT h ) { m_type = FIELD_HSCRIPT; m_hScript = h; }
void Free() { if ( ( m_flags & SV_FREE ) && ( m_type == FIELD_HSCRIPT || m_type == FIELD_VECTOR || m_type == FIELD_CSTRING ) ) delete m_pszString; } // Generally only needed for return results void Free() { if ( ( m_flags & SV_FREE ) && ( m_type == FIELD_HSCRIPT || m_type == FIELD_VECTOR || m_type == FIELD_QANGLE || m_type == FIELD_CSTRING ) ) delete m_pszString; } // Generally only needed for return results
template <typename T> template <typename T>
T Get() T Get()
@ -364,13 +400,17 @@ struct ScriptVariant_t
return true; return true;
} }
if ( m_type != FIELD_VECTOR && m_type != FIELD_CSTRING && destType != FIELD_VECTOR && destType != FIELD_CSTRING ) if ( m_type != FIELD_VECTOR && m_type != FIELD_QANGLE && m_type != FIELD_CSTRING && destType != FIELD_VECTOR && destType != FIELD_QANGLE && destType != FIELD_CSTRING )
{ {
switch ( m_type ) switch ( m_type )
{ {
case FIELD_VOID: *pDest = 0; break; case FIELD_VOID: *pDest = 0; break;
case FIELD_INTEGER: *pDest = m_int; return true; case FIELD_INTEGER: *pDest = m_int; return true;
case FIELD_INTEGER64: *pDest = m_int64; return true;
case FIELD_UINT: *pDest = m_uint; return true;
case FIELD_UINT64: *pDest = m_uint64; return true;
case FIELD_FLOAT: *pDest = m_float; return true; case FIELD_FLOAT: *pDest = m_float; return true;
case FIELD_DOUBLE: *pDest = m_double; return true;
case FIELD_CHARACTER: *pDest = m_char; return true; case FIELD_CHARACTER: *pDest = m_char; return true;
case FIELD_BOOLEAN: *pDest = m_bool; return true; case FIELD_BOOLEAN: *pDest = m_bool; return true;
case FIELD_HSCRIPT: *pDest = m_hScript; return true; case FIELD_HSCRIPT: *pDest = m_hScript; return true;
@ -380,7 +420,7 @@ struct ScriptVariant_t
{ {
DevWarning( "No free conversion of %s script variant to %s right now\n", DevWarning( "No free conversion of %s script variant to %s right now\n",
ScriptFieldTypeName( m_type ), ScriptFieldTypeName<T>() ); ScriptFieldTypeName( m_type ), ScriptFieldTypeName<T>() );
if ( destType != FIELD_VECTOR ) if ( destType != FIELD_VECTOR && destType != FIELD_QANGLE )
{ {
*pDest = 0; *pDest = 0;
} }
@ -394,7 +434,11 @@ struct ScriptVariant_t
{ {
case FIELD_VOID: *pDest = 0; return false; case FIELD_VOID: *pDest = 0; return false;
case FIELD_INTEGER: *pDest = m_int; return true; case FIELD_INTEGER: *pDest = m_int; return true;
case FIELD_INTEGER64: *pDest = m_int64; return true;
case FIELD_UINT: *pDest = m_uint; return true;
case FIELD_UINT64: *pDest = m_uint64; return true;
case FIELD_FLOAT: *pDest = m_float; return true; case FIELD_FLOAT: *pDest = m_float; return true;
case FIELD_DOUBLE: *pDest = m_double; return true;
case FIELD_BOOLEAN: *pDest = m_bool; return true; case FIELD_BOOLEAN: *pDest = m_bool; return true;
default: default:
DevWarning( "No conversion from %s to float now\n", ScriptFieldTypeName( m_type ) ); DevWarning( "No conversion from %s to float now\n", ScriptFieldTypeName( m_type ) );
@ -408,7 +452,11 @@ struct ScriptVariant_t
{ {
case FIELD_VOID: *pDest = 0; return false; case FIELD_VOID: *pDest = 0; return false;
case FIELD_INTEGER: *pDest = m_int; return true; case FIELD_INTEGER: *pDest = m_int; return true;
case FIELD_INTEGER64: *pDest = m_int64; return true;
case FIELD_UINT: *pDest = m_uint; return true;
case FIELD_UINT64: *pDest = m_uint64; return true;
case FIELD_FLOAT: *pDest = m_float; return true; case FIELD_FLOAT: *pDest = m_float; return true;
case FIELD_DOUBLE: *pDest = m_double; return true;
case FIELD_BOOLEAN: *pDest = m_bool; return true; case FIELD_BOOLEAN: *pDest = m_bool; return true;
default: default:
DevWarning( "No conversion from %s to int now\n", ScriptFieldTypeName( m_type ) ); DevWarning( "No conversion from %s to int now\n", ScriptFieldTypeName( m_type ) );
@ -422,7 +470,11 @@ struct ScriptVariant_t
{ {
case FIELD_VOID: *pDest = 0; return false; case FIELD_VOID: *pDest = 0; return false;
case FIELD_INTEGER: *pDest = m_int; return true; case FIELD_INTEGER: *pDest = m_int; return true;
case FIELD_INTEGER64: *pDest = m_int64; return true;
case FIELD_UINT: *pDest = m_uint; return true;
case FIELD_UINT64: *pDest = m_uint64; return true;
case FIELD_FLOAT: *pDest = m_float; return true; case FIELD_FLOAT: *pDest = m_float; return true;
case FIELD_DOUBLE: *pDest = m_double; return true;
case FIELD_BOOLEAN: *pDest = m_bool; return true; case FIELD_BOOLEAN: *pDest = m_bool; return true;
default: default:
DevWarning( "No conversion from %s to bool now\n", ScriptFieldTypeName( m_type ) ); DevWarning( "No conversion from %s to bool now\n", ScriptFieldTypeName( m_type ) );
@ -447,6 +499,12 @@ struct ScriptVariant_t
((Vector *)(pDest->m_pVector))->Init( m_pVector->x, m_pVector->y, m_pVector->z ); ((Vector *)(pDest->m_pVector))->Init( m_pVector->x, m_pVector->y, m_pVector->z );
pDest->m_flags |= SV_FREE; pDest->m_flags |= SV_FREE;
} }
else if (m_type == FIELD_QANGLE)
{
pDest->m_pQAngle = new QAngle;
((QAngle *) (pDest->m_pQAngle))->Init(m_pQAngle->x, m_pQAngle->y, m_pQAngle->z);
pDest->m_flags |= SV_FREE;
}
else if ( m_type == FIELD_CSTRING ) else if ( m_type == FIELD_CSTRING )
{ {
pDest->m_pszString = strdup( m_pszString ); pDest->m_pszString = strdup( m_pszString );
@ -454,7 +512,7 @@ struct ScriptVariant_t
} }
else else
{ {
pDest->m_int = m_int; pDest->m_int64 = m_int64;
} }
return false; return false;
} }
@ -462,9 +520,14 @@ struct ScriptVariant_t
union union
{ {
int m_int; int m_int;
uint m_uint;
int64 m_int64;
uint64 m_uint64;
float m_float; float m_float;
double m_double;
const char * m_pszString; const char * m_pszString;
const Vector * m_pVector; const Vector * m_pVector;
const QAngle * m_pQAngle;
char m_char; char m_char;
bool m_bool; bool m_bool;
HSCRIPT m_hScript; HSCRIPT m_hScript;
@ -630,8 +693,14 @@ public:
virtual ScriptLanguage_t GetLanguage() = 0; virtual ScriptLanguage_t GetLanguage() = 0;
virtual const char *GetLanguageName() = 0; virtual const char *GetLanguageName() = 0;
virtual void *GetInternalVM() = 0;
virtual void AddSearchPath( const char *pszSearchPath ) = 0; virtual void AddSearchPath( const char *pszSearchPath ) = 0;
virtual void EnableLocalDiskAccess() = 0;
virtual void ForwardConsoleCommand(const CCommandContext &, const CCommand &) = 0;
//-------------------------------------------------------- //--------------------------------------------------------
@ -660,12 +729,13 @@ public:
// Scope // Scope
//-------------------------------------------------------- //--------------------------------------------------------
virtual HSCRIPT CreateScope( const char *pszScope, HSCRIPT hParent = NULL ) = 0; virtual HSCRIPT CreateScope( const char *pszScope, HSCRIPT hParent = NULL ) = 0;
virtual void ReferenceScope( HSCRIPT hScript ) = 0;
virtual void ReleaseScope( HSCRIPT hScript ) = 0; virtual void ReleaseScope( HSCRIPT hScript ) = 0;
//-------------------------------------------------------- //--------------------------------------------------------
// Script functions // Script functions
//-------------------------------------------------------- //--------------------------------------------------------
virtual HSCRIPT LookupFunction( const char *pszFunction, HSCRIPT hScope = NULL ) = 0; virtual HSCRIPT LookupFunction( const char *pszFunction, HSCRIPT hScope = NULL, bool raw = false ) = 0;
virtual void ReleaseFunction( HSCRIPT hScript ) = 0; virtual void ReleaseFunction( HSCRIPT hScript ) = 0;
//-------------------------------------------------------- //--------------------------------------------------------
@ -681,7 +751,7 @@ public:
//-------------------------------------------------------- //--------------------------------------------------------
// External classes // External classes
//-------------------------------------------------------- //--------------------------------------------------------
virtual bool RegisterClass( ScriptClassDesc_t *pClassDesc ) = 0; virtual bool RegisterScriptClass( ScriptClassDesc_t *pClassDesc ) = 0;
//-------------------------------------------------------- //--------------------------------------------------------
// External instances. Note class will be auto-registered. // External instances. Note class will be auto-registered.
@ -708,24 +778,34 @@ public:
virtual bool SetValue( HSCRIPT hScope, const char *pszKey, const char *pszValue ) = 0; virtual bool SetValue( HSCRIPT hScope, const char *pszKey, const char *pszValue ) = 0;
virtual bool SetValue( HSCRIPT hScope, const char *pszKey, const ScriptVariant_t &value ) = 0; virtual bool SetValue( HSCRIPT hScope, const char *pszKey, const ScriptVariant_t &value ) = 0;
virtual bool SetValue( HSCRIPT hScope, int nIndex, const ScriptVariant_t &value ) = 0;
bool SetValue( const char *pszKey, const ScriptVariant_t &value ) { return SetValue(NULL, pszKey, value ); } bool SetValue( const char *pszKey, const ScriptVariant_t &value ) { return SetValue(NULL, pszKey, value ); }
virtual void CreateTable( ScriptVariant_t &Table ) = 0; virtual void CreateTable( ScriptVariant_t &Table ) = 0;
virtual bool IsTable( HSCRIPT hScope ) = 0;
virtual int GetNumTableEntries( HSCRIPT hScope ) = 0; virtual int GetNumTableEntries( HSCRIPT hScope ) = 0;
virtual int GetKeyValue( HSCRIPT hScope, int nIterator, ScriptVariant_t *pKey, ScriptVariant_t *pValue ) = 0; virtual int GetKeyValue( HSCRIPT hScope, int nIterator, ScriptVariant_t *pKey, ScriptVariant_t *pValue ) = 0;
virtual bool GetValue( HSCRIPT hScope, const char *pszKey, ScriptVariant_t *pValue ) = 0; virtual bool GetValue( HSCRIPT hScope, const char *pszKey, ScriptVariant_t *pValue ) = 0;
virtual bool GetValue( HSCRIPT hScope, int nIndex, ScriptVariant_t *pValue ) = 0;
bool GetValue( const char *pszKey, ScriptVariant_t *pValue ) { return GetValue(NULL, pszKey, pValue ); } bool GetValue( const char *pszKey, ScriptVariant_t *pValue ) { return GetValue(NULL, pszKey, pValue ); }
virtual bool GetScalarValue( HSCRIPT hScope, ScriptVariant_t *pValue ) = 0;
virtual void ReleaseValue( ScriptVariant_t &value ) = 0; virtual void ReleaseValue( ScriptVariant_t &value ) = 0;
virtual bool ClearValue( HSCRIPT hScope, const char *pszKey ) = 0; virtual bool ClearValue( HSCRIPT hScope, const char *pszKey ) = 0;
bool ClearValue( const char *pszKey) { return ClearValue( NULL, pszKey ); } bool ClearValue( const char *pszKey) { return ClearValue( NULL, pszKey ); }
virtual HSCRIPT CreateArray( ScriptVariant_t & ) = 0;
virtual bool IsArray( HSCRIPT hScope ) = 0;
virtual int GetArrayCount( HSCRIPT hScope ) = 0;
virtual void ArrayAddToTail( HSCRIPT hScope, const ScriptVariant_t &pValue ) = 0;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
virtual void WriteState( CUtlBuffer *pBuffer ) = 0; virtual void WriteState( CUtlBuffer *pBuffer ) = 0;
virtual void ReadState( CUtlBuffer *pBuffer ) = 0; virtual void ReadState( CUtlBuffer *pBuffer ) = 0;
virtual void RemoveOrphanInstances() = 0;
virtual void CollectGarbage( const char *, bool ) = 0;
virtual void DumpState() = 0; virtual void DumpState() = 0;