Book Image

Torque 3D Game Development Cookbook

By : DAVID WYAND
Book Image

Torque 3D Game Development Cookbook

By: DAVID WYAND

Overview of this book

Torque 3D is a popular game engine that supports you in every step along the way to making your game a reality. Even with all of the power and tools that Torque 3D provides, finishing a high quality 3D game requires time and knowledge."Torque 3D Game Development Cookbook" is a practical guide that takes you through each of the major steps on the journey to creating your game, while learning a few tricks along the way.The recipes in this book start off with learning some of the finer points about TorqueScript. The book then moves on to each of Torque 3D's subsystems and ends with a variety of game play recipes.The various topics covered include activating level-specific game code and scheduling game events, dragging and dropping items between windows to work with an in-game inventory system, and covering the seams between objects with well placed decals. Some of the advanced topics include writing custom shaders and postFX, using zones to improve rendering performance, and enhancing your game's ambience through sound.Once you are done with Torque 3D Game Development Cookbook you'll be on your way to creating amazing 3D games and gain expert knowledge of Torque 3D.
Table of Contents (17 chapters)
Torque 3D Game Development Cookbook
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Using call() to call a variable method on a SimObject instance with arguments


There are times when we don't know the name of the method of a SimObject instance while writing a script code. In these circumstances, we need to be able to call the method of a SimObject instance based on a variable. This recipe will show us how to use the SimObject call() method to execute another method, 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 SimObject method as follows:

  1. Open the game/scripts/server/game.cs script file and add the following code to the bottom:

    function callSimObjectMethod1()
    {
       // Set up an array to hold the methods we
       // will call.
       %methods[0] = "getPosition";
       %methods[1] = "getEulerRotation";
       %methods[2] = "getScale";
       
       // Iterate through the MissionCleanup SimGroup to retrieve
       // each SimObject.  This holds the top level objects that
       // have been created since the game level has started.
       foreach (%obj in MissionCleanup)
       {
          // Print some information about the object in the group
          echo(%obj.getId() SPC %obj.getClassName());
          
          // If the object derives from a SceneObject then call
          // our methods
          if (%obj.isMemberOfClass(SceneObject))
          {
             for (%i=0; %i<3; %i++)
             {
                // Call the method and obtain its result.
                // Note: none of our methods require passing
                // an argument.
                %result = %obj.call(%methods[%i]);
                
                // Output the result to the console
                echo("  " @ %methods[%i] @ "(): " @ %result);
             }
          }
       }
    }
  2. Start up our game under the My Projects directory and load the Empty Terrain level. Open the console using the tilde (~) key and enter the following at the bottom of the screen:

    callSimObjectMethod1();
    

    In the console we will see the following output:

    ==>callSimObjectMethod1();
    4281 ScriptObject
    4289 Camera
      getPosition(): -0.277961 -0.851682 243.342
      getEulerRotation(): 0 -0 -0
      getScale(): 1 1 1
    4290 Player
      getPosition(): 0.595642 1.25134 240.748
      getEulerRotation(): 0 -0 67.1649
      getScale(): 1 1 1
    4291 SimGroup
    

How it works...

Our example code first fills up an array with the methods we will call on the objects. It then loops though all the dynamically created objects in the scene and if an object derives from the SceneObject class, call our methods on it using the SimObejct call() method.

The SimObject call() method has the following form:

result = SimObject.call( method, args… );

Here, the method parameter is the method we want to call on the SimObject instance, and the args… parameter is actually an optional set of arguments to pass into method. The call() method returns the output as denoted by result of the method call, if any.

If the given method does not exist on the SimObject instance, an empty string is returned. No error will be output to the console.

There's more...

If we are unsure whether a particular method exists on a SimObject instance, we can use the isMethod() method. It has the following form:

result = SimObject.isMethod( method );

Here the method parameter is the method name to search for, and result is either true or false depending on whether the method exists on the SimObject instance or not.

See also

  • Using a variable to access methods or properties of a SimObject instance

  • Using call() to call a variable function with arguments