CrystalSpace

Public API Reference

csColliderHelper Class Reference

This is a class containing a few static member functions to help work with csColliderWrapper and collision detection in general. More...

#include <cstool/collider.h>

List of all members.

Static Public Member Functions

static bool CollideArray (iCollideSystem *colsys, iCollider *collider, const csReversibleTransform *trans, int num_colliders, iCollider **colliders, csReversibleTransform **transforms)
 Test collision between one collider and an array of colliders.
static int CollidePath (iCollideSystem *colsys, iCollider *collider, const csReversibleTransform *trans, float nbrsteps, csVector3 &newpos, int num_colliders, iCollider **colliders, csReversibleTransform **transforms)
 Test if an object can move to a new position.
static csColliderWrapperInitializeCollisionWrapper (iCollideSystem *colsys, iMeshWrapper *mesh)
 Initialize collision detection for a single object.
static void InitializeCollisionWrappers (iCollideSystem *colsys, iEngine *engine, iRegion *region=0)
 Initialize collision detection (i.e.
static csTraceBeamResult TraceBeam (iCollideSystem *cdsys, iSector *sector, const csVector3 &start, const csVector3 &end, bool traverse_portals)
 Trace a beam from 'start' to 'end' and return the first hit.
static float TraceBeam (iCollideSystem *cdsys, iSector *sector, const csVector3 &start, const csVector3 &end, bool traverse_portals, csIntersectingTriangle &closest_tri, csVector3 &closest_isect, iMeshWrapper **closest_mesh=0, iSector **end_sector=0)
 Trace a beam from 'start' to 'end' and return the first hit.


Detailed Description

This is a class containing a few static member functions to help work with csColliderWrapper and collision detection in general.

Definition at line 183 of file collider.h.


Member Function Documentation

static bool csColliderHelper::CollideArray ( iCollideSystem colsys,
iCollider collider,
const csReversibleTransform trans,
int  num_colliders,
iCollider **  colliders,
csReversibleTransform **  transforms 
) [static]

Test collision between one collider and an array of colliders.

This function is mainly used by CollidePath() below.

Parameters:
colsys is the collider system.
collider is the collider of the object that we are going to move along the path.
trans is the transform of that object (see Collide()).
num_colliders is the number of colliders that we are going to use to collide with.
colliders is an array of colliders. Typically you can obtain such a list by doing iEngine->GetNearbyMeshes() and then getting the colliders from all meshes you get (possibly using csColliderWrapper). Note that it is safe to have 'collider' sitting in this list. This function will ignore that collider.
transforms is an array of transforms that belong with the array of colliders.

static int csColliderHelper::CollidePath ( iCollideSystem colsys,
iCollider collider,
const csReversibleTransform trans,
float  nbrsteps,
csVector3 newpos,
int  num_colliders,
iCollider **  colliders,
csReversibleTransform **  transforms 
) [static]

Test if an object can move to a new position.

The new position vector will be modified to reflect the maximum new position that the object could move to without colliding with something. This function will return:

  • -1 if the object could not move at all (i.e. stuck at start position).
  • 0 if the object could not move fully to the desired position.
  • 1 if the object can move unhindered to the end position.

This function will reset the collision pair array. If there was a collision along the way the array will contain the information for the first collision preventing movement.

The given transform should be the transform of the object corresponding with the old position. 'colliders' and 'transforms' should be arrays with 'num_colliders' elements for all the objects that we should test against.

Parameters:
colsys is the collider system.
collider is the collider of the object that we are going to move along the path.
trans is the transform of that object (see Collide()).
nbrsteps is the number of steps we want to check along the path. Typically the stepsize resulting from this number of steps is set to a step size smaller then the size of the collider bbox.
newpos is the new position of that object.
num_colliders is the number of colliders that we are going to use to collide with.
colliders is an array of colliders. Typically you can obtain such a list by doing iEngine->GetNearbyMeshes() and then getting the colliders from all meshes you get (possibly using csColliderWrapper). Note that it is safe to have 'collider' sitting in this list. This function will ignore that collider.
transforms is an array of transforms that belong with the array of colliders.

static csColliderWrapper* csColliderHelper::InitializeCollisionWrapper ( iCollideSystem colsys,
iMeshWrapper mesh 
) [static]

Initialize collision detection for a single object.

This function will first check if the parent factory has a collider. If so it will use that for the object too. Otherwise it will create a new collider and attaches it to the object. The new collider will also be attached to the parent factory if it supports iObjectModel.

This function will also initialize colliders for the children of the mesh.

Returns:
the created collider wrapper.

static void csColliderHelper::InitializeCollisionWrappers ( iCollideSystem colsys,
iEngine engine,
iRegion region = 0 
) [static]

Initialize collision detection (i.e.

create csColliderWrapper) for all objects in the engine. If the optional region is given only the objects from that region will be initialized.

static csTraceBeamResult csColliderHelper::TraceBeam ( iCollideSystem cdsys,
iSector sector,
const csVector3 start,
const csVector3 end,
bool  traverse_portals 
) [static]

Trace a beam from 'start' to 'end' and return the first hit.

This function will use CollideRay() from the collision detection system and is pretty fast. Note that only OPCODE plugin currently supports this! A special note about portals! Portal traversal will NOT be used on portals that have a collider! The idea there is that the portal itself is a surface that cannot be penetrated.

Parameters:
cdsys is the collider system.
sector is the starting sector for the beam.
start is the start of the beam.
end is the end of the beam.
traverse_portals set to true in case you want the beam to traverse portals.
Returns:
a result instance of csTraceBeamResult.
See also:
csTraceBeamResult

static float csColliderHelper::TraceBeam ( iCollideSystem cdsys,
iSector sector,
const csVector3 start,
const csVector3 end,
bool  traverse_portals,
csIntersectingTriangle closest_tri,
csVector3 closest_isect,
iMeshWrapper **  closest_mesh = 0,
iSector **  end_sector = 0 
) [static]

Trace a beam from 'start' to 'end' and return the first hit.

This function will use CollideRay() from the collision detection system and is pretty fast. Note that only OPCODE plugin currently supports this! A special note about portals! Portal traversal will NOT be used on portals that have a collider! The idea there is that the portal itself is a surface that cannot be penetrated.

Parameters:
cdsys The collider system.
sector The starting sector for the beam.
start The start of the beam.
end The end of the beam.
traverse_portals Set it to true in case you want the beam to traverse portals.
closest_tri Will be set to the closest triangle that is hit. The triangle will be specified in world space.
closest_isect Will be set to the closest intersection point (in world space).
closest_mesh Will be set to the closest mesh that is hit.
end_sector [optional] Will be set to the sector containing the closest_mesh.
Returns:
The squared distance between 'start' and the closest hit or else a negative number if there was no hit.


The documentation for this class was generated from the following file:
Generated for Crystal Space by doxygen 1.4.7