Using call() to call a variable function with arguments
There are times when we don't know the
name of a script function while writing a script code. In these circumstances, we need to be able to call a function based on a variable. This recipe will show how to use the call()
method to execute a function, with possible passed-in arguments.
Getting ready
We will be adding a new TorqueScript function to a project based on the Torque 3D Full
template and try it out using the Empty Terrain
level. If you haven't already, use the Torque Project Manager (Project Manager.exe
) to create a new project from the Full
template. It will be found under the My Projects
directory. Then start up your favorite script editor, such as Torsion, and let's get going!
How to do it...
We are going to write a TorqueScript function that will demonstrate how to programmatically call a function as follows:
Open the
game/scripts/server/game.cs
script file and add the following code to the bottom:function getUniqueID1(%idType) { // Determine the function to use based on the // passed-in ID type switch$ (%idType) { case 0: %function = "generateUUID"; case 1: %function = "getRealTime"; case 2: %function = "getSimTime"; default: %function = "generateUUID"; } // Call the function %result = call(%function); // Return the result return "Your unique ID is: " @ %result; }
Start up our game under the
My Projects
directory and load theEmpty Terrain
level. Open the console using the tilde (~) key and enter the following at the bottom of the screen:getUniqueID1(0);
In the console we will see the following output:
==>getUniqueID1(0); Your unique ID is: 7be5014c-7d5a-11e1-b801-e57f4eda779f
We can try another run by entering a new command at the bottom of the screen:
getUniqueID1(1);
In the console we will see the following output:
==>getUniqueID1(1); Your unique ID is: 294298553
How it works...
Our example code chooses a particular function name to use based on a parameter passed into our function. It then uses the standard
call()
function to call the function by name, do something with the result, and return the result to the caller. The call()
function has the following form:
result = call( function, args… );
Here the function
parameter is the console function we want to
call, and the args…
parameter is actually an optional set of arguments to pass into function
. The call()
function returns the result denoted by the result
parameter of the function call, if any.
If the given function does not exist, an empty string is returned. No error will be output to the console.
There's more...
If we are unsure whether a particular function exists, we can use the
isFunction()
method. It has the following form:
result = isFunction( functionName );
Here the functionName
parameter is the function name to search for, and result
is either true
or false,
depending on whether the function exists or not.
See also
Using call() to call a variable method on a SimObject instance with arguments