BroadPhaseQuery.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  2. // SPDX-License-Identifier: MIT
  3. #pragma once
  4. #include <Physics/Collision/BroadPhase/BroadPhaseLayer.h>
  5. #include <Physics/Collision/ObjectLayer.h>
  6. #include <Physics/Collision/CollisionCollector.h>
  7. #include <Physics/Body/BodyID.h>
  8. #include <Core/NonCopyable.h>
  9. namespace JPH {
  10. struct RayCast;
  11. class BroadPhaseCastResult;
  12. class AABox;
  13. class OrientedBox;
  14. struct AABoxCast;
  15. // Various collector configurations
  16. using RayCastBodyCollector = CollisionCollector<BroadPhaseCastResult, CollisionCollectorTraitsCastRay>;
  17. using CastShapeBodyCollector = CollisionCollector<BroadPhaseCastResult, CollisionCollectorTraitsCastShape>;
  18. using CollideShapeBodyCollector = CollisionCollector<BodyID, CollisionCollectorTraitsCollideShape>;
  19. /// 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
  20. class BroadPhaseQuery : public NonCopyable
  21. {
  22. public:
  23. /// Virtual destructor
  24. virtual ~BroadPhaseQuery() = default;
  25. /// Cast a ray and add any hits to ioCollector
  26. virtual void CastRay(const RayCast &inRay, RayCastBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  27. /// Get bodies intersecting with inBox and any hits to ioCollector
  28. virtual void CollideAABox(const AABox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  29. /// Get bodies intersecting with a sphere and any hits to ioCollector
  30. virtual void CollideSphere(Vec3Arg inCenter, float inRadius, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  31. /// Get bodies intersecting with a point and any hits to ioCollector
  32. virtual void CollidePoint(Vec3Arg inPoint, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  33. /// Get bodies intersecting with an oriented box and any hits to ioCollector
  34. virtual void CollideOrientedBox(const OrientedBox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  35. /// Cast a box and add any hits to ioCollector
  36. virtual void CastAABox(const AABoxCast &inBox, CastShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
  37. };
  38. } // JPH