# Convex

Engine/source/collision/convex.h

## Linked list management

## Protected Attributes

Objects we're testing against.

Other convex testing against us.

Objects within our bounds.

## Public Functions

Convex()

Constructor.

~Convex()

Destructor.

addToWorkingList(Convex * ptr)

Clear out the working collision list of objects.

Runs through the linked list of Convex objects and removes the ones with no references.

Returns the bounding box for the object this is built around in world space.

getBoundingBox(const MatrixF & mat, const Point3F & scale)

Returns the object space bounding box for the object this is built around transformed and scaled.

```
bool
```

getCollisionInfo(const MatrixF & mat, const Point3F & scale, CollisionList * cList, F32 tol)

getFeatures(const MatrixF & mat, const VectorF & n, ConvexFeature * cf)

This is used by the GJK collision in Vehicle.

getPolyList(AbstractPolyList * list)

Builds a collision poly list out of this convex.

Returns the list of objects this object is testing against.

Returns the transform of the object this is built around.

Returns the list of objects currently inside the bounds of this Convex.

registerObject(Convex * convex)

Registers another Convex by linking it after this one.

Render convex(s) for debugging purposes.

Updates the CollisionStateList (mList) with new collision states and removing ones no longer under consideration.

## Detailed Description

## Linked list management

linkAfter(Convex * next)

Insert this Convex after the provided convex.

**Parameters:**

next |

unlink()

Remove this Convex from the linked list.

Convex * mNext

Next item in linked list of Convexes.

Convex * mPrev

Previous item in linked list of Convexes.

## Private Attributes

U32 mTag

## Private Static Attributes

U32 sTag

## Protected Attributes

CollisionStateList mList

Objects we're testing against.

SceneObject * mObject

Object this Convex is built around.

CollisionWorkingList mReference

Other convex testing against us.

ConvexType mType

Type of Convex this is.

CollisionWorkingList mWorking

Objects within our bounds.

## Public Functions

Convex()

Constructor.

~Convex()

Destructor.

addToWorkingList(Convex * ptr)

Adds the provided Convex to the list of objects within the bounds of this Convex.

**Parameters:**

ptr | Convex to add to the working list of this object |

clearWorkingList()

Clear out the working collision list of objects.

collectGarbage()

Runs through the linked list of Convex objects and removes the ones with no references.

findClosestState(const MatrixF & mat, const Point3F & scale, const F32 dontCareDist)

Finds the closest.

getBoundingBox()

Returns the bounding box for the object this is built around in world space.

Reimplemented by: MeshRoadConvex, ForestConvex, ShapeBaseConvex, TSStaticPolysoupConvex, TerrainConvex

getBoundingBox(const MatrixF & mat, const Point3F & scale)

Returns the object space bounding box for the object this is built around transformed and scaled.

**Parameters:**

mat | Matrix to transform the object-space box by |

scale | Scaling factor to scale the bounding box by |

Reimplemented by: MeshRoadConvex, ForestConvex, ShapeBaseConvex, TSStaticPolysoupConvex, TerrainConvex

getCollisionInfo(const MatrixF & mat, const Point3F & scale, CollisionList * cList, F32 tol)

getFeatures(const MatrixF & mat, const VectorF & n, ConvexFeature * cf)

This is used by the GJK collision in Vehicle.

The Convex class should add verts, edges, and faces to the passed ConvexFeature that face towards the passed normal vector. Verts added in this way should also be transformed by the passed matrix. **Parameters:**

mat | Transform which should be applied to verts added to the ConvexFeature |

n | Normal vector |

cf | ConvexFeature to add data to. |

Reimplemented by: BoxConvex, MeshRoadConvex, ForestConvex, ConvexShapeCollisionConvex, ShapeBaseConvex, TSStaticPolysoupConvex, TerrainConvex

getObject()

Returns the object this Convex is built from.

getPolyList(AbstractPolyList * list)

Builds a collision poly list out of this convex.

**Parameters:**

list | (Out) Poly list built |

Reimplemented by: BoxConvex, MeshRoadConvex, ForestConvex, ConvexShapeCollisionConvex, ShapeBaseConvex, TSStaticPolysoupConvex, TerrainConvex

getScale()

Returns the scale of the object this is built around.

getStateList()

Returns the list of objects this object is testing against.

getTransform()

Returns the transform of the object this is built around.

Reimplemented by: OrthoBoxConvex, MeshRoadConvex, ForestConvex, ShapeBaseConvex

getType()

Returns the type of this Convex.

getWorkingList()

Returns the list of objects currently inside the bounds of this Convex.

nukeList()

Deletes all convex objects in the list.

registerObject(Convex * convex)

Registers another Convex by linking it after this one.

render()

Render this convex for debugging purposes.

renderWorkingList()

Render convex(s) for debugging purposes.

support(const VectorF & v)

Returns the farthest point, along a vector, still bound by the convex.

**Parameters:**

v |

Reimplemented by: BoxConvex, ForestConvex, ShapeBaseConvex, TSStaticPolysoupConvex, TerrainConvex, MeshRoadConvex, ConvexShapeCollisionConvex

updateStateList(const MatrixF & mat, const Point3F & scale, const Point3F * displacement)

Updates the CollisionStateList (mList) with new collision states and removing ones no longer under consideration.

**Parameters:**

mat | Used as the matrix to create a bounding box for updating the list |

scale | Used to scale the bounding box |

displacement | Bounding box displacement (optional) |

updateWorkingList(const Box3F & box, const U32 colMask)

Updates the working collision list of objects which are currently colliding with (inside the bounds of) this Convex.

**Parameters:**

box | Used as the bounding box. |

colMask | Mask of objects to check against. |