2
0

BroadPhaseQuery.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h>
  6. #include <Jolt/Physics/Collision/ObjectLayer.h>
  7. #include <Jolt/Physics/Collision/CollisionCollector.h>
  8. #include <Jolt/Physics/Body/BodyID.h>
  9. #include <Jolt/Core/NonCopyable.h>
  10. JPH_NAMESPACE_BEGIN
  11. struct RayCast;
  12. class BroadPhaseCastResult;
  13. class AABox;
  14. class OrientedBox;
  15. struct AABoxCast;
  16. // Various collector configurations
  17. using RayCastBodyCollector = CollisionCollector<BroadPhaseCastResult, CollisionCollectorTraitsCastRay>;
  18. using CastShapeBodyCollector = CollisionCollector<BroadPhaseCastResult, CollisionCollectorTraitsCastShape>;
  19. using CollideShapeBodyCollector = CollisionCollector<BodyID, CollisionCollectorTraitsCollideShape>;
  20. /// Interface to the broadphase that can perform collision queries. These queries will only test the bounding box of the body to quickly determine a potential set of colliding bodies.
  21. /// The shapes of the bodies are not tested, if you want this then you should use the NarrowPhaseQuery interface.
  22. class JPH_EXPORT BroadPhaseQuery : public NonCopyable
  23. {
  24. public:
  25. /// Virtual destructor
  26. virtual ~BroadPhaseQuery() = default;
  27. /// Cast a ray and add any hits to ioCollector
  28. virtual void CastRay(const RayCast &inRay, RayCastBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  29. /// Get bodies intersecting with inBox and any hits to ioCollector
  30. virtual void CollideAABox(const AABox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  31. /// Get bodies intersecting with a sphere and any hits to ioCollector
  32. virtual void CollideSphere(Vec3Arg inCenter, float inRadius, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  33. /// Get bodies intersecting with a point and any hits to ioCollector
  34. virtual void CollidePoint(Vec3Arg inPoint, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  35. /// Get bodies intersecting with an oriented box and any hits to ioCollector
  36. virtual void CollideOrientedBox(const OrientedBox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  37. /// Cast a box and add any hits to ioCollector
  38. virtual void CastAABox(const AABoxCast &inBox, CastShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  39. };
  40. JPH_NAMESPACE_END