Path: blob/master/thirdparty/jolt_physics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuery.h
9918 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2021 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#pragma once56#include <Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h>7#include <Jolt/Physics/Collision/ObjectLayer.h>8#include <Jolt/Physics/Collision/CollisionCollector.h>9#include <Jolt/Physics/Body/BodyID.h>10#include <Jolt/Core/NonCopyable.h>1112JPH_NAMESPACE_BEGIN1314struct RayCast;15class BroadPhaseCastResult;16class AABox;17class OrientedBox;18struct AABoxCast;1920// Various collector configurations21using RayCastBodyCollector = CollisionCollector<BroadPhaseCastResult, CollisionCollectorTraitsCastRay>;22using CastShapeBodyCollector = CollisionCollector<BroadPhaseCastResult, CollisionCollectorTraitsCastShape>;23using CollideShapeBodyCollector = CollisionCollector<BodyID, CollisionCollectorTraitsCollideShape>;2425/// 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.26/// The shapes of the bodies are not tested, if you want this then you should use the NarrowPhaseQuery interface.27class JPH_EXPORT BroadPhaseQuery : public NonCopyable28{29public:30/// Virtual destructor31virtual ~BroadPhaseQuery() = default;3233/// Cast a ray and add any hits to ioCollector34virtual void CastRay(const RayCast &inRay, RayCastBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;3536/// Get bodies intersecting with inBox and any hits to ioCollector37virtual void CollideAABox(const AABox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;3839/// Get bodies intersecting with a sphere and any hits to ioCollector40virtual void CollideSphere(Vec3Arg inCenter, float inRadius, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;4142/// Get bodies intersecting with a point and any hits to ioCollector43virtual void CollidePoint(Vec3Arg inPoint, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;4445/// Get bodies intersecting with an oriented box and any hits to ioCollector46virtual void CollideOrientedBox(const OrientedBox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;4748/// Cast a box and add any hits to ioCollector49virtual void CastAABox(const AABoxCast &inBox, CastShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;50};5152JPH_NAMESPACE_END535455