Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion sp/src/game/server/hl2/hl2_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4036,7 +4036,10 @@ Vector CHL2_Player::EyeDirection2D( void )
Vector CHL2_Player::EyeDirection3D( void )
{
Vector vecForward;

#ifdef MAPBASE
EyeVectors( &vecForward );
return vecForward;
#else
// Return the vehicle angles if we request them
if ( GetVehicle() != NULL )
{
Expand All @@ -4047,6 +4050,7 @@ Vector CHL2_Player::EyeDirection3D( void )

AngleVectors( EyeAngles(), &vecForward );
return vecForward;
#endif
}


Expand Down
14 changes: 12 additions & 2 deletions sp/src/game/shared/mapbase/vscript_funcs_shared.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -775,6 +775,16 @@ static void AddPhysVelocity( HSCRIPT hPhys, const Vector& vecVelocity, const Vec
//=============================================================================
//=============================================================================

static int ScriptPrecacheModel( const char *modelname )
{
return CBaseEntity::PrecacheModel( modelname );
}

static void ScriptPrecacheOther( const char *classname )
{
UTIL_PrecacheOther( classname );
}

#ifndef CLIENT_DLL
// TODO: Move this?
static void ScriptInsertSound( int iType, const Vector &vecOrigin, int iVolume, float flDuration, HSCRIPT hOwner, int soundChannelIndex, HSCRIPT hSoundTarget )
Expand Down Expand Up @@ -996,10 +1006,10 @@ void RegisterSharedScriptFunctions()
//
// Precaching
//
ScriptRegisterFunctionNamed( g_pScriptVM, CBaseEntity::PrecacheModel, "PrecacheModel", "Precaches a model for later usage." );
ScriptRegisterFunctionNamed( g_pScriptVM, ScriptPrecacheModel, "PrecacheModel", "Precaches a model for later usage." );
ScriptRegisterFunction( g_pScriptVM, PrecacheMaterial, "Precaches a material for later usage." );
ScriptRegisterFunction( g_pScriptVM, PrecacheParticleSystem, "Precaches a particle system for later usage." );
ScriptRegisterFunctionNamed( g_pScriptVM, UTIL_PrecacheOther, "PrecacheOther", "Precaches an entity class for later usage." );
ScriptRegisterFunctionNamed( g_pScriptVM, ScriptPrecacheOther, "PrecacheOther", "Precaches an entity class for later usage." );

//
// NPCs
Expand Down
39 changes: 26 additions & 13 deletions sp/src/game/shared/mapbase/vscript_singletons.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,11 @@ END_SCRIPTDESC();
//=============================================================================
// Game Event Listener
// Based on Source 2 API
//
// NOTE: In Source 2 vscript (Lua) event listener contexts are tables that are
// passed to the callback function as the call environment.
// In mapbase implementation these are string identifiers because unlike Lua,
// Squirrel has closure methods such as 'bindenv' which can bind functions to specified environments.
//=============================================================================

// Define to use the older code that loads all events manually independent from the game event manager.
Expand All @@ -375,7 +380,13 @@ END_SCRIPTDESC();
class CScriptGameEventListener : public IGameEventListener2, public CAutoGameSystem
{
public:
CScriptGameEventListener() : m_bActive(false) /*, m_nEventTick(0)*/ {}
CScriptGameEventListener() : m_bActive(false)
{
#ifdef _DEBUG
m_nEventTick = 0;
#endif
}

~CScriptGameEventListener()
{
StopListeningForEvent();
Expand All @@ -397,7 +408,9 @@ class CScriptGameEventListener : public IGameEventListener2, public CAutoGameSys
HSCRIPT m_hCallback;
unsigned int m_iContextHash;
bool m_bActive;
//int m_nEventTick;
#ifdef _DEBUG
int m_nEventTick;
#endif

static StringHashFunctor Hash;
static inline unsigned int HashContext( const char* c ) { return c ? Hash(c) : 0; }
Expand Down Expand Up @@ -592,7 +605,9 @@ void CScriptGameEventListener::LevelShutdownPreEntity()

void CScriptGameEventListener::FireGameEvent( IGameEvent *event )
{
//m_nEventTick = gpGlobals->tickcount;
#ifdef _DEBUG
m_nEventTick = gpGlobals->tickcount;
#endif
ScriptVariant_t hTable;
g_pScriptVM->CreateTable( hTable );
WriteEventData( event, hTable );
Expand Down Expand Up @@ -722,13 +737,15 @@ void CScriptGameEventListener::StopListeningForEvent()
if ( gameeventmanager )
gameeventmanager->RemoveListener( this );

#ifdef _DEBUG
// Event listeners are iterated forwards in the game event manager,
// removing while iterating will cause it to skip one listener.
// This could be prevented by writing a custom game event manager.
//if ( m_nEventTick == gpGlobals->tickcount )
//{
// Warning("CScriptGameEventListener stopped in the same frame it was fired. This will break other event listeners!\n");
//}
if ( m_nEventTick == gpGlobals->tickcount )
{
Warning("CScriptGameEventListener stopped in the same frame it was fired. This will break other event listeners!\n");
}
#endif
}

//-----------------------------------------------------------------------------
Expand Down Expand Up @@ -2405,9 +2422,7 @@ class CScriptConvarAccessor : public CAutoGameSystem
inline bool IsOverridable( unsigned int hash )
{
int idx = g_ConCommandsOverridable.Find( hash );
if ( idx == g_ConCommandsOverridable.InvalidIndex() )
return false;
return true;
return ( idx != g_ConCommandsOverridable.InvalidIndex() );
}

inline void AddBlockedConVar( const char *name )
Expand All @@ -2418,9 +2433,7 @@ class CScriptConvarAccessor : public CAutoGameSystem
inline bool IsBlockedConvar( const char *name )
{
int idx = g_ConVarsBlocked.Find( Hash(name) );
if ( idx == g_ConVarsBlocked.InvalidIndex() )
return false;
return true;
return ( idx != g_ConVarsBlocked.InvalidIndex() );
}

public:
Expand Down
127 changes: 80 additions & 47 deletions sp/src/vscript/vscript_squirrel.nut
Original file line number Diff line number Diff line change
Expand Up @@ -7,62 +7,82 @@ static char g_Script_vscript_squirrel[] = R"vscript(

Warning <- error;

function clamp(val,min,max)
function clamp( val, min, max )
{
if ( max < min )
return max;
else if( val < min )
if ( val < min )
return min;
else if( val > max )
if ( val > max )
return max;
else
return val;
return val;
}

function max(a,b) return a > b ? a : b
function max( a, b )
{
if ( a > b )
return a;
return b;
}

function min(a,b) return a < b ? a : b
function min( a, b )
{
if ( a < b )
return a;
return b;
}

function RemapVal(val, A, B, C, D)
function RemapVal( val, A, B, C, D )
{
if ( A == B )
return val >= B ? D : C;
{
if ( val >= B )
return D;
return C;
};
return C + (D - C) * (val - A) / (B - A);
}

function RemapValClamped(val, A, B, C, D)
function RemapValClamped( val, A, B, C, D )
{
if ( A == B )
return val >= B ? D : C;
{
if ( val >= B )
return D;
return C;
};

local cVal = (val - A) / (B - A);
cVal = (cVal < 0.0) ? 0.0 : (1.0 < cVal) ? 1.0 : cVal;

if ( cVal <= 0.0 )
return C;

if ( cVal >= 1.0 )
return D;

return C + (D - C) * cVal;
}

function Approach( target, value, speed )
{
local delta = target - value
local delta = target - value;

if( delta > speed )
value += speed
else if( delta < (-speed) )
value -= speed
else
value = target

return value
if ( delta > speed )
return value + speed;
if ( -speed > delta )
return value - speed;
return target;
}

function AngleDistance( next, cur )
{
local delta = next - cur

if ( delta < (-180.0) )
delta += 360.0
else if ( delta > 180.0 )
delta -= 360.0

return delta
if ( delta > 180.0 )
return delta - 360.0;
if ( -180.0 > delta )
return delta + 360.0;
return delta;
}

function FLerp( f1, f2, i1, i2, x )
Expand All @@ -83,7 +103,7 @@ function SimpleSpline( f )

function printl( text )
{
return ::print(text + "\n");
return print(text + "\n");
}

class CSimpleCallChainer
Expand Down Expand Up @@ -481,23 +501,36 @@ else
}
}

// Vector documentation
__Documentation.RegisterClassHelp( "Vector", "", "Basic 3-float Vector class." );
__Documentation.RegisterHelp( "Vector::Length", "float Vector::Length()", "Return the vector's length." );
__Documentation.RegisterHelp( "Vector::LengthSqr", "float Vector::LengthSqr()", "Return the vector's squared length." );
__Documentation.RegisterHelp( "Vector::Length2D", "float Vector::Length2D()", "Return the vector's 2D length." );
__Documentation.RegisterHelp( "Vector::Length2DSqr", "float Vector::Length2DSqr()", "Return the vector's squared 2D length." );

__Documentation.RegisterHelp( "Vector::Normalized", "float Vector::Normalized()", "Return a normalized version of the vector." );
__Documentation.RegisterHelp( "Vector::Norm", "void Vector::Norm()", "Normalize the vector in place." );
__Documentation.RegisterHelp( "Vector::Scale", "vector Vector::Scale(float)", "Scale the vector's magnitude and return the result." );
__Documentation.RegisterHelp( "Vector::Dot", "float Vector::Dot(vector)", "Return the dot/scalar product of two vectors." );
__Documentation.RegisterHelp( "Vector::Cross", "float Vector::Cross(vector)", "Return the vector product of two vectors." );

__Documentation.RegisterHelp( "Vector::ToKVString", "string Vector::ToKVString()", "Return a vector as a string in KeyValue form, without separation commas." );

__Documentation.RegisterMemberHelp( "Vector.x", "float Vector.x", "The vector's X coordinate on the cartesian X axis." );
__Documentation.RegisterMemberHelp( "Vector.y", "float Vector.y", "The vector's Y coordinate on the cartesian Y axis." );
__Documentation.RegisterMemberHelp( "Vector.z", "float Vector.z", "The vector's Z coordinate on the cartesian Z axis." );

if (developer)
{
// Vector documentation
__Documentation.RegisterClassHelp( "Vector", "", "Basic 3-float Vector class." );
__Documentation.RegisterHelp( "Vector::Length", "float Vector::Length()", "Return the vector's length." );
__Documentation.RegisterHelp( "Vector::LengthSqr", "float Vector::LengthSqr()", "Return the vector's squared length." );
__Documentation.RegisterHelp( "Vector::Length2D", "float Vector::Length2D()", "Return the vector's 2D length." );
__Documentation.RegisterHelp( "Vector::Length2DSqr", "float Vector::Length2DSqr()", "Return the vector's squared 2D length." );

__Documentation.RegisterHelp( "Vector::Normalized", "float Vector::Normalized()", "Return a normalized version of the vector." );
__Documentation.RegisterHelp( "Vector::Norm", "void Vector::Norm()", "Normalize the vector in place." );
__Documentation.RegisterHelp( "Vector::Scale", "vector Vector::Scale(float)", "Scale the vector's magnitude and return the result." );
__Documentation.RegisterHelp( "Vector::Dot", "float Vector::Dot(vector)", "Return the dot/scalar product of two vectors." );
__Documentation.RegisterHelp( "Vector::Cross", "float Vector::Cross(vector)", "Return the vector product of two vectors." );

__Documentation.RegisterHelp( "Vector::ToKVString", "string Vector::ToKVString()", "Return a vector as a string in KeyValue form, without separation commas." );

__Documentation.RegisterMemberHelp( "Vector.x", "float Vector.x", "The vector's X coordinate on the cartesian X axis." );
__Documentation.RegisterMemberHelp( "Vector.y", "float Vector.y", "The vector's Y coordinate on the cartesian Y axis." );
__Documentation.RegisterMemberHelp( "Vector.z", "float Vector.z", "The vector's Z coordinate on the cartesian Z axis." );

__Documentation.RegisterHelp( "clamp", "float clamp(float, float, float)", "" );
__Documentation.RegisterHelp( "max", "float max(float, float)", "" );
__Documentation.RegisterHelp( "min", "float min(float, float)", "" );
__Documentation.RegisterHelp( "RemapVal", "float RemapVal(float, float, float, float, float)", "" );
__Documentation.RegisterHelp( "RemapValClamped", "float RemapValClamped(float, float, float, float, float)", "" );
__Documentation.RegisterHelp( "Approach", "float Approach(float, float, float)", "" );
__Documentation.RegisterHelp( "AngleDistance", "float AngleDistance(float, float)", "" );
__Documentation.RegisterHelp( "FLerp", "float FLerp(float, float, float, float, float)", "" );
__Documentation.RegisterHelp( "Lerp", "float Lerp(float, float, float)", "" );
__Documentation.RegisterHelp( "SimpleSpline", "float SimpleSpline(float)", "" );
}
)vscript";