Foundation
Loading...
Searching...
No Matches
JoltPhysicsWorld.hpp
Go to the documentation of this file.
1#pragma once
2#include <Core/JobSystem.hpp>
3#include <Math/Math.hpp>
4#include <cstdint>
5
7{
8 using Math::float3;
9 using Math::quat;
10
11 enum class PhysicsStatus : uint32_t
12 {
13 Ok = 0,
15 InvalidHandle = 2,
17 JoltFailure = 4,
18 NoHit = 5,
19 };
20
21 enum class PhysicsShapeType : uint32_t
22 {
23 Box = 0,
24 Sphere = 1,
25 Capsule = 2,
26 };
27
28 enum class PhysicsMotionType : uint32_t
29 {
30 Static = 0,
31 Kinematic = 1,
32 Dynamic = 2,
33 };
34
35 enum class PhysicsActivation : uint32_t
36 {
37 Activate = 0,
38 DontActivate = 1,
39 };
40
41 inline constexpr uint32_t kPhysicsLayerNonMoving = 0u;
42 inline constexpr uint32_t kPhysicsLayerMoving = 1u;
43
45 {
46 uint32_t index{~0u};
47 uint32_t generation{0};
48 [[nodiscard]] bool IsValid() const { return index != ~0u; }
49 [[nodiscard]] bool operator==(PhysicsShapeHandle const&) const = default;
50 };
51
53 {
54 uint32_t index{~0u};
55 uint32_t generation{0};
56 [[nodiscard]] bool IsValid() const { return index != ~0u; }
57 [[nodiscard]] bool operator==(PhysicsBodyHandle const&) const = default;
58 };
59
61 {
62 uint32_t maxBodies{1024};
63 uint32_t numBodyMutexes{0};
64 uint32_t maxBodyPairs{1024};
65 uint32_t maxContactConstraints{1024};
66 uint32_t maxJobs{2048};
67 uint32_t maxBarriers{8};
68 size_t tempAllocatorBytes{10u * 1024u * 1024u};
69 float3 gravity{0.0f, -9.81f, 0.0f};
70 };
71
73 {
75 float3 halfExtent{0.5f, 0.5f, 0.5f};
76 float radius{0.5f};
77 float halfHeight{0.5f};
78 };
79
81 {
82 float3 position{0.0f, 0.0f, 0.0f};
83 quat rotation{0.0f, 0.0f, 0.0f, 1.0f};
84 };
85
96
98 {
99 float3 origin{0.0f, 0.0f, 0.0f};
100 float3 direction{0.0f, 0.0f, -1.0f};
101 float maxDistance{1000.0f};
102 uint32_t layerMask{~0u};
103 };
104
106 {
108 float3 position{0.0f, 0.0f, 0.0f};
109 float3 normal{0.0f, 1.0f, 0.0f};
110 float distance{0.0f};
111 };
112
114 {
115 public:
116 explicit JoltPhysicsWorld(Core::JobSystem* jobs, PhysicsWorldDesc const& desc = {});
118
123
124 [[nodiscard]] PhysicsStatus CreateShape(PhysicsShapeDesc const& desc, PhysicsShapeHandle& outHandle);
125 [[nodiscard]] PhysicsStatus DestroyShape(PhysicsShapeHandle handle);
126
127 [[nodiscard]] PhysicsStatus CreateBody(PhysicsBodyDesc const& desc, PhysicsBodyHandle& outHandle);
128 [[nodiscard]] PhysicsStatus DestroyBody(PhysicsBodyHandle handle);
129 [[nodiscard]] bool IsBodyValid(PhysicsBodyHandle handle) const;
130
131 [[nodiscard]] PhysicsStatus SetBodyPose(PhysicsBodyHandle handle, PhysicsBodyPose const& pose,
133 [[nodiscard]] PhysicsStatus GetBodyPose(PhysicsBodyHandle handle, PhysicsBodyPose& outPose) const;
134 [[nodiscard]] PhysicsStatus SetLinearVelocity(PhysicsBodyHandle handle, float3 const& velocity);
135 [[nodiscard]] PhysicsStatus GetLinearVelocity(PhysicsBodyHandle handle, float3& outVelocity) const;
136 [[nodiscard]] PhysicsStatus AddForce(PhysicsBodyHandle handle, float3 const& force);
137 [[nodiscard]] PhysicsStatus AddImpulse(PhysicsBodyHandle handle, float3 const& impulse);
138 [[nodiscard]] PhysicsStatus RayCast(PhysicsRayDesc const& ray, PhysicsRayHit& outHit) const;
139
140 [[nodiscard]] PhysicsStatus Step(float deltaSeconds, int collisionSteps = 1);
141 void OptimizeBroadPhase();
142
143 [[nodiscard]] uint32_t GetBodyCount() const { return mBodyCount; }
144 [[nodiscard]] uint32_t GetMaxBodies() const { return mDesc.maxBodies; }
145
146 private:
147 struct Impl;
150 uint32_t mBodyCount{0};
151 };
152} // namespace Foundation::Examples
Definition JobSystem.hpp:135
Definition JoltPhysicsWorld.hpp:114
PhysicsStatus AddForce(PhysicsBodyHandle handle, float3 const &force)
Definition JoltPhysicsWorld.cpp:456
PhysicsStatus DestroyShape(PhysicsShapeHandle handle)
Definition JoltPhysicsWorld.cpp:335
Impl * mImpl
Definition JoltPhysicsWorld.hpp:148
PhysicsStatus GetLinearVelocity(PhysicsBodyHandle handle, float3 &outVelocity) const
Definition JoltPhysicsWorld.cpp:447
PhysicsStatus RayCast(PhysicsRayDesc const &ray, PhysicsRayHit &outHit) const
Definition JoltPhysicsWorld.cpp:474
JoltPhysicsWorld(JoltPhysicsWorld const &)=delete
PhysicsStatus DestroyBody(PhysicsBodyHandle handle)
Definition JoltPhysicsWorld.cpp:398
JoltPhysicsWorld(JoltPhysicsWorld &&)=delete
PhysicsStatus CreateShape(PhysicsShapeDesc const &desc, PhysicsShapeHandle &outHandle)
Definition JoltPhysicsWorld.cpp:275
PhysicsWorldDesc mDesc
Definition JoltPhysicsWorld.hpp:149
~JoltPhysicsWorld()
Definition JoltPhysicsWorld.cpp:252
uint32_t mBodyCount
Definition JoltPhysicsWorld.hpp:150
bool IsBodyValid(PhysicsBodyHandle handle) const
Definition JoltPhysicsWorld.cpp:410
PhysicsStatus AddImpulse(PhysicsBodyHandle handle, float3 const &impulse)
Definition JoltPhysicsWorld.cpp:465
uint32_t GetBodyCount() const
Definition JoltPhysicsWorld.hpp:143
uint32_t GetMaxBodies() const
Definition JoltPhysicsWorld.hpp:144
PhysicsStatus GetBodyPose(PhysicsBodyHandle handle, PhysicsBodyPose &outPose) const
Definition JoltPhysicsWorld.cpp:426
PhysicsStatus SetBodyPose(PhysicsBodyHandle handle, PhysicsBodyPose const &pose, PhysicsActivation activation=PhysicsActivation::Activate)
Definition JoltPhysicsWorld.cpp:415
JoltPhysicsWorld & operator=(JoltPhysicsWorld const &)=delete
JoltPhysicsWorld & operator=(JoltPhysicsWorld &&)=delete
PhysicsStatus CreateBody(PhysicsBodyDesc const &desc, PhysicsBodyHandle &outHandle)
Definition JoltPhysicsWorld.cpp:350
void OptimizeBroadPhase()
Definition JoltPhysicsWorld.cpp:517
PhysicsStatus SetLinearVelocity(PhysicsBodyHandle handle, float3 const &velocity)
Definition JoltPhysicsWorld.cpp:438
Definition JoltCommon.hpp:8
PhysicsShapeType
Definition JoltPhysicsWorld.hpp:22
constexpr uint32_t kPhysicsLayerNonMoving
Definition JoltPhysicsWorld.hpp:41
PhysicsStatus
Definition JoltPhysicsWorld.hpp:12
PhysicsActivation
Definition JoltPhysicsWorld.hpp:36
constexpr uint32_t kPhysicsLayerMoving
Definition JoltPhysicsWorld.hpp:42
PhysicsMotionType
Definition JoltPhysicsWorld.hpp:29
vec3 float3
Definition Math.hpp:26
Definition JoltPhysicsWorld.cpp:148
Definition JoltPhysicsWorld.hpp:87
PhysicsShapeHandle shape
Definition JoltPhysicsWorld.hpp:88
PhysicsActivation activation
Definition JoltPhysicsWorld.hpp:92
PhysicsBodyPose pose
Definition JoltPhysicsWorld.hpp:89
float3 angularVelocity
Definition JoltPhysicsWorld.hpp:94
uint32_t layer
Definition JoltPhysicsWorld.hpp:91
float3 linearVelocity
Definition JoltPhysicsWorld.hpp:93
PhysicsMotionType motion
Definition JoltPhysicsWorld.hpp:90
Definition JoltPhysicsWorld.hpp:53
uint32_t index
Definition JoltPhysicsWorld.hpp:54
bool IsValid() const
Definition JoltPhysicsWorld.hpp:56
bool operator==(PhysicsBodyHandle const &) const =default
uint32_t generation
Definition JoltPhysicsWorld.hpp:55
Definition JoltPhysicsWorld.hpp:81
float3 position
Definition JoltPhysicsWorld.hpp:82
quat rotation
Definition JoltPhysicsWorld.hpp:83
Definition JoltPhysicsWorld.hpp:98
float maxDistance
Definition JoltPhysicsWorld.hpp:101
float3 origin
Definition JoltPhysicsWorld.hpp:99
uint32_t layerMask
Definition JoltPhysicsWorld.hpp:102
float3 direction
Definition JoltPhysicsWorld.hpp:100
Definition JoltPhysicsWorld.hpp:106
PhysicsBodyHandle body
Definition JoltPhysicsWorld.hpp:107
float distance
Definition JoltPhysicsWorld.hpp:110
float3 position
Definition JoltPhysicsWorld.hpp:108
float3 normal
Definition JoltPhysicsWorld.hpp:109
Definition JoltPhysicsWorld.hpp:73
PhysicsShapeType type
Definition JoltPhysicsWorld.hpp:74
float3 halfExtent
Definition JoltPhysicsWorld.hpp:75
float halfHeight
Definition JoltPhysicsWorld.hpp:77
float radius
Definition JoltPhysicsWorld.hpp:76
Definition JoltPhysicsWorld.hpp:45
bool IsValid() const
Definition JoltPhysicsWorld.hpp:48
uint32_t index
Definition JoltPhysicsWorld.hpp:46
bool operator==(PhysicsShapeHandle const &) const =default
uint32_t generation
Definition JoltPhysicsWorld.hpp:47
Definition JoltPhysicsWorld.hpp:61
uint32_t maxBodyPairs
Definition JoltPhysicsWorld.hpp:64
float3 gravity
Definition JoltPhysicsWorld.hpp:69
uint32_t maxJobs
Definition JoltPhysicsWorld.hpp:66
uint32_t numBodyMutexes
Definition JoltPhysicsWorld.hpp:63
uint32_t maxContactConstraints
Definition JoltPhysicsWorld.hpp:65
uint32_t maxBodies
Definition JoltPhysicsWorld.hpp:62
uint32_t maxBarriers
Definition JoltPhysicsWorld.hpp:67
size_t tempAllocatorBytes
Definition JoltPhysicsWorld.hpp:68