aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers/mod/scripts/vscripts/class/cbaseentity.nut
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.CustomServers/mod/scripts/vscripts/class/cbaseentity.nut')
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/class/cbaseentity.nut229
1 files changed, 229 insertions, 0 deletions
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/class/cbaseentity.nut b/Northstar.CustomServers/mod/scripts/vscripts/class/cbaseentity.nut
new file mode 100644
index 000000000..08d2b2e17
--- /dev/null
+++ b/Northstar.CustomServers/mod/scripts/vscripts/class/cbaseentity.nut
@@ -0,0 +1,229 @@
+untyped
+
+global function CodeCallback_RegisterClass_CBaseEntity
+
+//=========================================================
+// CBaseEntity
+// Properties and methods added here can be accessed on all script entities
+//=========================================================
+
+#if DEV
+table __scriptVarDelegate = {}
+#endif
+
+function CodeCallback_RegisterClass_CBaseEntity()
+{
+ //printl( "Class Script: CBaseEntity" )
+
+ CBaseEntity.ClassName <- "CBaseEntity"
+
+ // Script variables; initializing these to something other than "null" will cause them to be treated as a
+ // static variable on the class instead of a unique variable on each instance.
+ CBaseEntity.s <- null
+
+ CBaseEntity.funcsByString <- null
+
+ CBaseEntity.useFunction <- null // should match on server/client
+
+ CBaseEntity._entityVars <- null
+
+ CBaseEntity.invulnerable <- 0
+
+ // this replacement could just be made in the scripts where this call happens,
+ // but there's too many for me to replace right now
+ CBaseEntity.__KeyValueFromString <- CBaseEntity.SetValueForKey
+ CBaseEntity.__KeyValueFromInt <- CBaseEntity.SetValueForKey
+
+ function CBaseEntity::constructor()
+ {
+ #if DEV
+ this.s = delegate __scriptVarDelegate : {}
+ #else
+ this.s = {}
+ #endif
+
+ this.useFunction = UseReturnTrue // default use function
+
+ this.funcsByString = {}
+ }
+
+ #if DEV
+ function __scriptVarDelegate::_typeof()
+ {
+ return "ScriptVariableTable"
+ }
+
+ disableoverwrite( __scriptVarDelegate )
+ #endif
+
+ /*
+ Do not delete, thanks.
+
+ CBaseEntity.__SetOrigin <- CBaseEntity.SetOrigin
+ function CBaseEntity::SetOrigin( origin )
+ {
+ if ( this.GetTargetName() == "xauto_1" )
+ {
+ printl( "\n\n" )
+ DumpStack()
+ }
+ this.__SetOrigin( origin )
+ }
+ */
+
+ function CBaseEntity::_typeof()
+ {
+ return format( "[%d] %s: %s", this.entindex(), this.GetClassName(), this.GetTargetName() )
+ }
+
+ function CBaseEntity::Get( val )
+ {
+ return this.GetValueForKey( val )
+ }
+
+ function CBaseEntity::Set( key, val )
+ {
+ return this.SetValueForKey( key, val )
+ }
+
+ // This exists in code too and is only here for untyped entity variables
+ function CBaseEntity::WaitSignal( signalID )
+ {
+ return WaitSignal( this, signalID )
+ }
+
+ // This exists in code too and is only here for untyped entity variables
+ function CBaseEntity::EndSignal( signalID )
+ {
+ EndSignal( this, signalID )
+ }
+
+ // This exists in code too and is only here for untyped entity variables
+ function CBaseEntity::Signal( signalID, results = null )
+ {
+ Signal( this, signalID, results )
+ }
+
+ function CBaseEntity::DisableDraw()
+ {
+ this.FireNow( "DisableDraw" )
+ }
+ #document( "CBaseEntity::DisableDraw", "consider this the mega hide" )
+
+ function CBaseEntity::EnableDraw()
+ {
+ this.FireNow( "EnableDraw" )
+ }
+ #document( "CBaseEntity::EnableDraw", "its back!" )
+
+
+ // --------------------------------------------------------
+ function CBaseEntity::Kill_Deprecated_UseDestroyInstead( time = 0 )
+ {
+ EntFireByHandle( this, "kill", "", time, null, null )
+ }
+ #document( "CBaseEntity::Kill_Deprecated_UseDestroyInstead", "Kill this entity: this function is deprecated because it has a one-frame delay; instead, call ent.Destroy()" )
+
+ // --------------------------------------------------------
+ function CBaseEntity::Fire( output, param = "", delay = 0, activator = null, caller = null )
+ {
+ Assert( type( output ) == "string", "output type " + type( output ) + " is not a string" )
+ EntFireByHandle( this, output, string( param ), delay, activator, caller )
+ }
+ #document( "CBaseEntity::Fire", "Fire an output on this entity, with optional parm and delay" )
+
+ function CBaseEntity::FireNow( output, param = "", activator = null, caller = null )
+ {
+ Assert( type( output ) == "string" )
+ EntFireByHandleNow( this, output, string( param ), activator, caller )
+ }
+ #document( "CBaseEntity::FireNow", "Fire an output on this entity, with optional parm and delay (synchronous)" )
+
+ // --------------------------------------------------------
+ function CBaseEntity::AddOutput( outputName, target, inputName, parameter = "", delay = 0, maxFires = 0 )
+ {
+ local targetName = target
+
+ if ( type( target ) != "string" )
+ {
+ Assert( type( target ) == "instance" )
+ targetName = target.GetTargetName()
+ Assert( targetName.len(), "AddOutput: targetted entity must have a name!" )
+ }
+ Assert( targetName.len(), "Attemped to AddOutput on an unnamed target" )
+
+ local addOutputString = outputName + " " + targetName + ":" + inputName + ":" + parameter + ":" + delay + ":" + maxFires
+ //printl(" Added output string: " + addOutputString )
+
+ EntFireByHandle( this, "AddOutput", addOutputString, 0, null, null )
+ }
+ #document( "CBaseEntity::AddOutput", "Connects an output on this entity to an input on another entity via code. The \"target\" can be a name or a named entity." )
+
+ /*
+ function MoveTo()
+ */
+
+ function CBaseEntity::MoveTo( dest, time, easeIn = 0, easeOut = 0 )
+ {
+ if ( this.GetClassName() == "script_mover" )
+ {
+ this.NonPhysicsMoveTo( dest, time, easeIn, easeOut )
+ }
+ else
+ {
+ this.SetOrigin( dest )
+ CodeWarning( "Used moveto on non script_mover: " + this.GetClassName() + ", " + this )
+ }
+ }
+ #document( "CBaseEntity::MoveTo", "Move to the specified origin over time with ease in and ease out." )
+
+ /*
+ function RotateTo()
+ */
+
+ function CBaseEntity::RotateTo( dest, time, easeIn = 0, easeOut = 0 )
+ {
+ if ( this.GetClassName() == "script_mover" )
+ {
+ this.NonPhysicsRotateTo( dest, time, easeIn, easeOut )
+ }
+ else
+ {
+ this.SetAngles( dest )
+ CodeWarning( "Used rotateto on non script_mover: " + this.GetClassName() + ", " + this )
+ }
+ }
+ #document( "CBaseEntity::RotateTo", "Rotate to the specified angles over time with ease in and ease out." )
+
+ function CBaseEntity::AddVar( varname, value )
+ {
+ Assert( !( varname in this.s ), "Tried to add variable to " + this + " that already existed: " + varname )
+
+ this.s[ varname ] <- value
+ }
+
+ function CBaseEntity::CreateStringForFunction( func )
+ {
+ // this is a general purpose function that returns a string which, when executed,
+ // runs the given function on this entity.
+ // the function must be called (or the entity deleted) at some point to avoid leaking the new slot we make in this Table.
+
+ Assert( type( func ) == "function" )
+
+ string newGuid = UniqueString()
+ this.funcsByString[newGuid] <- func
+
+ return "_RunFunctionByString( \"" + newGuid + "\" )"
+ }
+
+ function _RunFunctionByString( guid )
+ {
+ local activator = this.activator
+ Assert( activator.funcsByString[guid] )
+
+ local func = activator.funcsByString[guid].bindenv( activator.scope() )
+ delete activator.funcsByString[guid]
+
+ func()
+ }
+}