TGE/Collision/CastRayExample

From TDN

(Redirected from CastRayExample)

Below is an example of code for use of the castRay. The code below wants to take the myPoint and finds the highest object in the Z direction which might be above or below myPoint. An example use would be a teleport where you would want to ensure that the player is teleported to a point above the highest object.

The code assumes the myPoint is a Point3F and has been initialized already to a x,y in which you wish to find the highest object in the 'z' direction.

// Setup the currentContainer to either the server container or the client container. 
// In your code you might know if you are on the server or not already. In which case you
// could use the gClientContainer or gServerContainer directly
Container * currentContainer;
if(isClientObject()) // Client object. 
{
   currentContainer = &gClientContainer;
}
else // Server object. 
{
   currentContainer =  &gServerContainer;
}

RayInfo rInfo; // Will return info on what the castRay found including object information.
Point3F start, end;
Point3F myPoint; // Init this to the point which you want to goto

start.x = end.x = myPoint.x; //some x (whatever value you want)
start.y = end.y = myPoint.y; //some y (whatever value you want)
start.z = 2000; // Really high, might be over kill
end.z = -2000; // really low, might be overkill

// Look for flags set for pretty much everything.
// Note: An object could have more than one flag set
if(currentContainer->castRay(start, end, 
   StaticObjectType | 
   InteriorObjectType | 
   WaterObjectType | 
   ShapeBaseObjectType | 
   StaticShapeObjectType | 
   ItemObjectType | 
   TerrainObjectType |
   StaticTSObjectType 
   , &rInfo))
{
     myPoint.z = rInfo.point.z;
}
else
{
   // didn't find anything, no TerrainObjectType or anything... 
   // you decide how to handle this error
}

--Dan 02:00, 26 Oct 2005 (PST)