Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/jolt_physics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuery.h
9918 views
1
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3
// SPDX-License-Identifier: MIT
4
5
#pragma once
6
7
#include <Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h>
8
#include <Jolt/Physics/Collision/ObjectLayer.h>
9
#include <Jolt/Physics/Collision/CollisionCollector.h>
10
#include <Jolt/Physics/Body/BodyID.h>
11
#include <Jolt/Core/NonCopyable.h>
12
13
JPH_NAMESPACE_BEGIN
14
15
struct RayCast;
16
class BroadPhaseCastResult;
17
class AABox;
18
class OrientedBox;
19
struct AABoxCast;
20
21
// Various collector configurations
22
using RayCastBodyCollector = CollisionCollector<BroadPhaseCastResult, CollisionCollectorTraitsCastRay>;
23
using CastShapeBodyCollector = CollisionCollector<BroadPhaseCastResult, CollisionCollectorTraitsCastShape>;
24
using CollideShapeBodyCollector = CollisionCollector<BodyID, CollisionCollectorTraitsCollideShape>;
25
26
/// 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.
27
/// The shapes of the bodies are not tested, if you want this then you should use the NarrowPhaseQuery interface.
28
class JPH_EXPORT BroadPhaseQuery : public NonCopyable
29
{
30
public:
31
/// Virtual destructor
32
virtual ~BroadPhaseQuery() = default;
33
34
/// Cast a ray and add any hits to ioCollector
35
virtual void CastRay(const RayCast &inRay, RayCastBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
36
37
/// Get bodies intersecting with inBox and any hits to ioCollector
38
virtual void CollideAABox(const AABox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
39
40
/// Get bodies intersecting with a sphere and any hits to ioCollector
41
virtual void CollideSphere(Vec3Arg inCenter, float inRadius, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
42
43
/// Get bodies intersecting with a point and any hits to ioCollector
44
virtual void CollidePoint(Vec3Arg inPoint, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
45
46
/// Get bodies intersecting with an oriented box and any hits to ioCollector
47
virtual void CollideOrientedBox(const OrientedBox &inBox, CollideShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
48
49
/// Cast a box and add any hits to ioCollector
50
virtual void CastAABox(const AABoxCast &inBox, CastShapeBodyCollector &ioCollector, const BroadPhaseLayerFilter &inBroadPhaseLayerFilter = { }, const ObjectLayerFilter &inObjectLayerFilter = { }) const = 0;
51
};
52
53
JPH_NAMESPACE_END
54
55