Engine²
Open-source game engine written in C++.
Loading...
Searching...
No Matches
PhysicsManager.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
5// clang-format off
6#include <Jolt/Jolt.h>
7// clang-format on
8
10
11#include <Jolt/Core/Factory.h>
12#include <Jolt/Core/JobSystemThreadPool.h>
13#include <Jolt/Core/TempAllocator.h>
14#include <Jolt/Physics/Body/BodyActivationListener.h>
15#include <Jolt/Physics/Body/BodyCreationSettings.h>
16#include <Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h>
17#include <Jolt/Physics/PhysicsSettings.h>
18#include <Jolt/Physics/PhysicsSystem.h>
19#include <Jolt/RegisterTypes.h>
20
21namespace Physics::Resource {
26 public:
31
35 ~PhysicsManager() = default;
36
44 void Init(Engine::Core &core);
45
51 inline JPH::PhysicsSystem &GetPhysicsSystem() { return *_physicsSystem; }
52 inline const JPH::PhysicsSystem &GetPhysicsSystem() const { return *_physicsSystem; }
53
60 inline JPH::BodyInterface &GetBodyInterface() { return _physicsSystem->GetBodyInterface(); }
61
69 inline JPH::TempAllocator *GetTempAllocator() { return _tempAllocator.get(); }
70
78 inline JPH::JobSystem *GetJobSystem() { return _jobSystem.get(); }
79
85 inline int GetCollisionSteps() { return _collisionSteps; }
86
95 inline void SetCollisionSteps(int steps) { _collisionSteps = steps; }
96
104 inline std::shared_ptr<Utils::ContactListenerImpl> GetContactListener()
105 {
106 if (_contactListener == nullptr)
107 {
108 return nullptr;
109 }
110
111 return std::dynamic_pointer_cast<Utils::ContactListenerImpl>(_contactListener);
112 }
113
119 inline bool IsPhysicsActivated() const { return _shouldUpdatePhysics; }
120
124 inline void ActivatePhysics() { _shouldUpdatePhysics = true; }
125
129 inline void DeactivatePhysics() { _shouldUpdatePhysics = false; }
130
131 private:
132 std::shared_ptr<JPH::Factory> _factory;
133 std::shared_ptr<JPH::PhysicsSystem> _physicsSystem;
134
135 std::shared_ptr<JPH::BroadPhaseLayerInterface> _broadPhaseLayerInterface;
136 std::shared_ptr<JPH::ObjectVsBroadPhaseLayerFilter> _objectVsBroadPhaseLayerFilter;
137 std::shared_ptr<JPH::ObjectLayerPairFilter> _objectLayerPairFilter;
138 std::shared_ptr<JPH::TempAllocator> _tempAllocator;
139 std::shared_ptr<JPH::JobSystem> _jobSystem;
140 std::shared_ptr<JPH::ContactListener> _contactListener;
141
143
145};
146} // namespace Physics::Resource
The core is the place where all the data of the engine is stored. It contains the registry (entities)...
Definition Core.hpp:33
JPH::TempAllocator * GetTempAllocator()
Get a pointer to the temp allocator.
Definition PhysicsManager.hpp:69
int GetCollisionSteps()
Get the number of collision steps.
Definition PhysicsManager.hpp:85
JPH::JobSystem * GetJobSystem()
Get a pointer to the job system.
Definition PhysicsManager.hpp:78
void Init(Engine::Core &core)
Initialize the physics system.
Definition PhysicsManager.cpp:22
std::shared_ptr< JPH::PhysicsSystem > _physicsSystem
Definition PhysicsManager.hpp:133
bool _shouldUpdatePhysics
Definition PhysicsManager.hpp:142
PhysicsManager()
Definition PhysicsManager.cpp:11
std::shared_ptr< Utils::ContactListenerImpl > GetContactListener()
Get the contact listener, casted back as a ContactListenerImpl.
Definition PhysicsManager.hpp:104
void ActivatePhysics()
Set the physics system to be updated.
Definition PhysicsManager.hpp:124
JPH::BodyInterface & GetBodyInterface()
Get a reference to the body interface for manipulating bodies.
Definition PhysicsManager.hpp:60
JPH::PhysicsSystem & GetPhysicsSystem()
Get a reference to the physics system.
Definition PhysicsManager.hpp:51
void DeactivatePhysics()
Set the physics system to not be updated.
Definition PhysicsManager.hpp:129
std::shared_ptr< JPH::JobSystem > _jobSystem
Definition PhysicsManager.hpp:139
const JPH::PhysicsSystem & GetPhysicsSystem() const
Definition PhysicsManager.hpp:52
bool IsPhysicsActivated() const
Check if the physics system should be updated.
Definition PhysicsManager.hpp:119
std::shared_ptr< JPH::Factory > _factory
Definition PhysicsManager.hpp:132
std::shared_ptr< JPH::ObjectVsBroadPhaseLayerFilter > _objectVsBroadPhaseLayerFilter
Definition PhysicsManager.hpp:136
std::shared_ptr< JPH::BroadPhaseLayerInterface > _broadPhaseLayerInterface
Definition PhysicsManager.hpp:135
std::shared_ptr< JPH::TempAllocator > _tempAllocator
Definition PhysicsManager.hpp:138
int _collisionSteps
Definition PhysicsManager.hpp:144
std::shared_ptr< JPH::ObjectLayerPairFilter > _objectLayerPairFilter
Definition PhysicsManager.hpp:137
void SetCollisionSteps(int steps)
Set the number of collision steps.
Definition PhysicsManager.hpp:95
std::shared_ptr< JPH::ContactListener > _contactListener
Definition PhysicsManager.hpp:140
Definition BodyEntityMap.hpp:12