Class CollisionScene

class CollisionScene

Public Functions

void debugDraw(bool showMeshColliders, bool showRigidBodies)
void reset()
void addRigidBody(RigidBody *rigidBody)
void removeRigidBody(RigidBody *rigidBody)
RigidBody *findRigidBodyByObjectId(uint16_t id) const
inline const std::vector<RigidBody*> &getRigidBodies() const
void disableRigidBody(RigidBody *rigidBody)

Temporarily exclude the given RigidBody from the simulation.

While disabled, the body will be immune to collision (allowing it to pass through objects) and will not receive changes to force, velocity, or acceleration. Manually moving the body (via RigidBody::setPosition()/RigidBody::setRotation()) is still allowed. Call enableRigidBody() to re-enable the RigidBody.

void addCollider(Collider *collider)
void removeCollider(Collider *collider)
inline const std::vector<Collider*> &getColliders() const
void addMeshCollider(MeshCollider *mesh)
void removeMeshCollider(MeshCollider *mesh)
void configureSimulation(
float fixedDt,
const fm_vec3_t &gravity,
uint8_t velocityIterations,
uint8_t positionIterations,
float gfxScale
)
void wakeRigidBodyIsland(RigidBody *rigidBody)
void step()
int getCachedConstraintCount() const
ContactConstraint &getCachedConstraint(int index)
const ContactConstraint &getCachedConstraint(int index) const
ContactConstraint *createCachedConstraint(
const ContactConstraintKey &key,
RigidBody *rigidBodyA,
Collider *colliderA,
MeshCollider *meshColliderA,
Object *objectA,
RigidBody *rigidBodyB,
Collider *colliderB,
MeshCollider *meshColliderB,
Object *objectB
)
ContactConstraint *findCachedConstraint(const ContactConstraintKey &key)
bool raycast(Raycast &ray, RaycastHit &hit) const
bool capsuleSweep(
const fm_vec3_t &center,
const fm_vec3_t &axisUp,
float radius,
float innerHalfHeight,
const fm_vec3_t &displacement,
RaycastColliderTypeFlags collTypes,
uint8_t readMask,
CapsuleSweepHit &hit,
const Object *ignoreOwner = nullptr
) const

Sweeps a capsule through the scene and returns the earliest contact.

Todo:

: not implemented)

Parameters:
  • center – Capsule center in physics space

  • axisUp – Normalized capsule-axis direction

  • radius – Capsule radius

  • innerHalfHeight – Half-length of the cylindrical section (not including sphere caps)

  • displacement – Displacement vector in physics space (not normalized)

  • collTypes – Which collider types to test against

  • readMask – Collision read mask (

  • hit – Output contact result

Returns:

true if any contact was found

Public Members

uint64_t ticksWakePrep = {0}
uint64_t ticksWorldUpdate = {0}
uint64_t ticksIntegrateVel = {0}
uint64_t ticksDetect = {0}
uint64_t ticksDetectBodyPairs = {0}
uint64_t ticksDetectMeshPairs = {0}
uint64_t ticksRefreshCallbacks = {0}
uint64_t ticksPreSolve = {0}
uint64_t ticksWarmStart = {0}
uint64_t ticksVelocitySolve = {0}
uint64_t ticksIntegration = {0}
uint64_t ticksPositionSolve = {0}
uint64_t ticksFinalize = {0}
uint64_t ticksTotal = {0}

Public Static Functions

static void enableRigidBody(RigidBody *rigidBody)