User Tools

Site Tools


Sidebar

hpl3:game:scripting:id_handles

Table of Contents

ID Handles

General

Storing

A ID handle is used to store and retrieve a object. Instead of storing the object handle directly the ID of the object should be stored.

class cMyClass {
  iPhysicsBody@ mpBody; // unsafe

  tID mBodyID; // safe
}

Storing a ID instead of class handle is safer and allows for saving of the handle.

void OnStart()
{
 // Retrive the object from name and setup the id
 iPhysicsBody@ pBody = Map_GetEntityFromName("...");
 mBodyID = pBody.GetID();
}

The ID of a object is returned from the GetID() function or by calling one of the functions that return the ID of a object directly.

Accessing

After storing the ID it can be used to retrieve the object. Retrieving the object is safe and will return a null pointer if it has been deleted.

void OnUpdate()
{
  cLux_ID_Body(mBodyID).SetMass(2.0); // Retrieve object and set mass to 2.0
}

Even if the body has been deleted elsewhere the code will not crash, since accessing a null pointer only generates a warning.

Retrieving the object using the ID handle is very fast and can be used directly. When changing multiple properties of a object it is adviced to retrieve it once and then call all the function from the object itself.

void OnUpdate()
{
  // Retrieve the object
  iPhysicsBody@ pBody = cLux_ID_Body(mBodyID);

  if(pBody !is null) { // Check if it is valid
    pBody.SetMass(2.0);
    pBody.ApplyForce(cVector3f(1.0, 0.0 ,0.0);
  }
}

Default Value

The default value of the tID class is tID_Invalid. Calling any retrieval function with that value will cause the function to return null. When a handle is no longer in use it should have its value set to tID_Invalid.

Functions

hpl3/game/scripting/id_handles.1374238516.txt.gz · Last modified: 2013/07/19 12:55 by nebej