Crystal Space: csColliderHelper Class Reference (Crystal Space Public API Reference)

| ## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- Alphabetical List
- Class List
- Class Hierarchy
- Class Members

# 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 csColliderWrapper * | InitializeCollisionWrapper (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:

- cstool/collider.h