Jolt Physics
A multi core friendly Game Physics Engine
|
Test BroadPhase implementation that does not do anything to speed up the operations. Can be used as a reference implementation. More...
#include <BroadPhaseBruteForce.h>
Public Member Functions | |
virtual JPH_OVERRIDE_NEW_DELETE void | AddBodiesFinalize (BodyID *ioBodies, int inNumber, AddState inAddState) override |
virtual void | RemoveBodies (BodyID *ioBodies, int inNumber) override |
virtual void | NotifyBodiesAABBChanged (BodyID *ioBodies, int inNumber, bool inTakeLock) override |
virtual void | NotifyBodiesLayerChanged (BodyID *ioBodies, int inNumber) override |
Call whenever the layer (and optionally the aabb as well) of a body changes (can change order of ioBodies array) More... | |
virtual void | CastRay (const RayCast &inRay, RayCastBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter) const override |
Cast a ray and add any hits to ioCollector. More... | |
virtual void | CollideAABox (const AABox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter) const override |
Get bodies intersecting with inBox and any hits to ioCollector. More... | |
virtual void | CollideSphere (Vec3Arg inCenter, float inRadius, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter) const override |
Get bodies intersecting with a sphere and any hits to ioCollector. More... | |
virtual void | CollidePoint (Vec3Arg inPoint, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter) const override |
Get bodies intersecting with a point and any hits to ioCollector. More... | |
virtual void | CollideOrientedBox (const OrientedBox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter) const override |
Get bodies intersecting with an oriented box and any hits to ioCollector. More... | |
virtual void | CastAABoxNoLock (const AABoxCast &inBox, CastShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter) const override |
Same as BroadPhaseQuery::CastAABox but can be implemented in a way to take no broad phase locks. More... | |
virtual void | CastAABox (const AABoxCast &inBox, CastShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter) const override |
Cast a box and add any hits to ioCollector. More... | |
virtual void | FindCollidingPairs (BodyID *ioActiveBodies, int inNumActiveBodies, float inSpeculativeContactDistance, const ObjectVsBroadPhaseLayerFilter &inObjectVsBroadPhaseLayerFilter, const ObjectLayerPairFilter &inObjectLayerPairFilter, BodyPairCollector &ioPairCollector) const override |
virtual AABox | GetBounds () const override |
Get the bounding box of all objects in the broadphase. More... | |
Public Member Functions inherited from BroadPhase | |
virtual void | Init (BodyManager *inBodyManager, const BroadPhaseLayerInterface &inLayerInterface) |
virtual void | Optimize () |
Should be called after many objects have been inserted to make the broadphase more efficient, usually done on startup only. More... | |
virtual void | FrameSync () |
Must be called just before updating the broadphase when none of the body mutexes are locked. More... | |
virtual void | LockModifications () |
Must be called before UpdatePrepare to prevent modifications from being made to the tree. More... | |
virtual UpdateState | UpdatePrepare () |
virtual void | UpdateFinalize (const UpdateState &inUpdateState) |
Finalizing the update will quickly apply the changes. More... | |
virtual void | UnlockModifications () |
Must be called after UpdateFinalize to allow modifications to the broadphase. More... | |
virtual AddState | AddBodiesPrepare (BodyID *ioBodies, int inNumber) |
virtual void | AddBodiesFinalize (BodyID *ioBodies, int inNumber, AddState inAddState)=0 |
virtual void | AddBodiesAbort (BodyID *ioBodies, int inNumber, AddState inAddState) |
virtual void | RemoveBodies (BodyID *ioBodies, int inNumber)=0 |
virtual void | NotifyBodiesAABBChanged (BodyID *ioBodies, int inNumber, bool inTakeLock=true)=0 |
virtual void | NotifyBodiesLayerChanged (BodyID *ioBodies, int inNumber)=0 |
Call whenever the layer (and optionally the aabb as well) of a body changes (can change order of ioBodies array) More... | |
virtual void | FindCollidingPairs (BodyID *ioActiveBodies, int inNumActiveBodies, float inSpeculativeContactDistance, const ObjectVsBroadPhaseLayerFilter &inObjectVsBroadPhaseLayerFilter, const ObjectLayerPairFilter &inObjectLayerPairFilter, BodyPairCollector &ioPairCollector) const =0 |
virtual void | CastAABoxNoLock (const AABoxCast &inBox, CastShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter, const ObjectLayerFilter &inObjectLayerFilter) const =0 |
Same as BroadPhaseQuery::CastAABox but can be implemented in a way to take no broad phase locks. More... | |
virtual AABox | GetBounds () const =0 |
Get the bounding box of all objects in the broadphase. More... | |
Public Member Functions inherited from BroadPhaseQuery | |
virtual | ~BroadPhaseQuery ()=default |
Virtual destructor. More... | |
virtual void | CastRay (const RayCast &inRay, RayCastBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter={ }, const ObjectLayerFilter &inObjectLayerFilter={ }) const =0 |
Cast a ray and add any hits to ioCollector. More... | |
virtual void | CollideAABox (const AABox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter={ }, const ObjectLayerFilter &inObjectLayerFilter={ }) const =0 |
Get bodies intersecting with inBox and any hits to ioCollector. More... | |
virtual void | CollideSphere (Vec3Arg inCenter, float inRadius, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter={ }, const ObjectLayerFilter &inObjectLayerFilter={ }) const =0 |
Get bodies intersecting with a sphere and any hits to ioCollector. More... | |
virtual void | CollidePoint (Vec3Arg inPoint, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter={ }, const ObjectLayerFilter &inObjectLayerFilter={ }) const =0 |
Get bodies intersecting with a point and any hits to ioCollector. More... | |
virtual void | CollideOrientedBox (const OrientedBox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter={ }, const ObjectLayerFilter &inObjectLayerFilter={ }) const =0 |
Get bodies intersecting with an oriented box and any hits to ioCollector. More... | |
virtual void | CastAABox (const AABoxCast &inBox, CastShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter={ }, const ObjectLayerFilter &inObjectLayerFilter={ }) const =0 |
Cast a box and add any hits to ioCollector. More... | |
Public Member Functions inherited from NonCopyable | |
NonCopyable ()=default | |
NonCopyable (const NonCopyable &)=delete | |
void | operator= (const NonCopyable &)=delete |
Additional Inherited Members | |
Public Types inherited from BroadPhase | |
using | AddState = void * |
Handle used during adding bodies to the broadphase. More... | |
Protected Attributes inherited from BroadPhase | |
BodyManager * | mBodyManager = nullptr |
Link to the body manager that manages the bodies in this broadphase. More... | |
Test BroadPhase implementation that does not do anything to speed up the operations. Can be used as a reference implementation.
|
overridevirtual |
Finalize adding bodies to the broadphase, supply the return value of AddBodiesPrepare in inAddState. Please ensure that the ioBodies array passed to AddBodiesPrepare is unmodified and passed again to this function.
Implements BroadPhase.
|
overridevirtual |
Cast a box and add any hits to ioCollector.
Implements BroadPhaseQuery.
|
overridevirtual |
Same as BroadPhaseQuery::CastAABox but can be implemented in a way to take no broad phase locks.
Implements BroadPhase.
|
overridevirtual |
Cast a ray and add any hits to ioCollector.
Implements BroadPhaseQuery.
|
overridevirtual |
Get bodies intersecting with inBox and any hits to ioCollector.
Implements BroadPhaseQuery.
|
overridevirtual |
Get bodies intersecting with an oriented box and any hits to ioCollector.
Implements BroadPhaseQuery.
|
overridevirtual |
Get bodies intersecting with a point and any hits to ioCollector.
Implements BroadPhaseQuery.
|
overridevirtual |
Get bodies intersecting with a sphere and any hits to ioCollector.
Implements BroadPhaseQuery.
|
overridevirtual |
Find all colliding pairs between dynamic bodies Note that this function is very specifically tailored for the PhysicsSystem::Update function, hence it is not part of the BroadPhaseQuery interface. One of the assumptions it can make is that no locking is needed during the query as it will only be called during a very particular part of the update.
ioActiveBodies | is a list of bodies for which we need to find colliding pairs (this function can change the order of the ioActiveBodies array). This can be a subset of the set of active bodies in the system. |
inNumActiveBodies | is the size of the ioActiveBodies array. |
inSpeculativeContactDistance | Distance at which speculative contact points will be created. |
inObjectVsBroadPhaseLayerFilter | is the filter that determines if an object can collide with a broadphase layer. |
inObjectLayerPairFilter | is the filter that determines if two objects can collide. |
ioPairCollector | receives callbacks for every body pair found. |
Implements BroadPhase.
|
overridevirtual |
Get the bounding box of all objects in the broadphase.
Implements BroadPhase.
|
overridevirtual |
Call whenever the aabb of a body changes (can change order of ioBodies array) inTakeLock should be false if we're between LockModifications/UnlockModificiations in which case care needs to be taken to not call this between UpdatePrepare/UpdateFinalize
Implements BroadPhase.
|
overridevirtual |
Call whenever the layer (and optionally the aabb as well) of a body changes (can change order of ioBodies array)
Implements BroadPhase.
|
overridevirtual |
Remove inNumber bodies in ioBodies from the broadphase. ioBodies may be shuffled around by this function.
Implements BroadPhase.