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
59 inline JPH::BodyInterface &GetBodyInterface() { return _physicsSystem->GetBodyInterface(); }
60
68 inline JPH::TempAllocator *GetTempAllocator() { return _tempAllocator.get(); }
69
77 inline JPH::JobSystem *GetJobSystem() { return _jobSystem.get(); }
78
84 inline int GetCollisionSteps() { return _collisionSteps; }
85
94 inline void SetCollisionSteps(int steps) { _collisionSteps = steps; }
95
103 inline std::shared_ptr<Utils::ContactListenerImpl> GetContactListener()
104 {
105 if (_contactListener == nullptr)
106 {
107 return nullptr;
108 }
109
110 return std::dynamic_pointer_cast<Utils::ContactListenerImpl>(_contactListener);
111 }
112
118 inline bool IsPhysicsActivated() const { return _shouldUpdatePhysics; }
119
123 inline void ActivatePhysics() { _shouldUpdatePhysics = true; }
124
128 inline void DeactivatePhysics() { _shouldUpdatePhysics = false; }
129
130 private:
131 std::shared_ptr<JPH::Factory> _factory;
132 std::shared_ptr<JPH::PhysicsSystem> _physicsSystem;
133
134 std::shared_ptr<JPH::BroadPhaseLayerInterface> _broadPhaseLayerInterface;
135 std::shared_ptr<JPH::ObjectVsBroadPhaseLayerFilter> _objectVsBroadPhaseLayerFilter;
136 std::shared_ptr<JPH::ObjectLayerPairFilter> _objectLayerPairFilter;
137 std::shared_ptr<JPH::TempAllocator> _tempAllocator;
138 std::shared_ptr<JPH::JobSystem> _jobSystem;
139 std::shared_ptr<JPH::ContactListener> _contactListener;
140
142
144};
145} // 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:68
int GetCollisionSteps()
Get the number of collision steps.
Definition PhysicsManager.hpp:84
JPH::JobSystem * GetJobSystem()
Get a pointer to the job system.
Definition PhysicsManager.hpp:77
void Init(Engine::Core &core)
Initialize the physics system.
Definition PhysicsManager.cpp:22
std::shared_ptr< JPH::PhysicsSystem > _physicsSystem
Definition PhysicsManager.hpp:132
bool _shouldUpdatePhysics
Definition PhysicsManager.hpp:141
PhysicsManager()
Definition PhysicsManager.cpp:11
std::shared_ptr< Utils::ContactListenerImpl > GetContactListener()
Get the contact listener, casted back as a ContactListenerImpl.
Definition PhysicsManager.hpp:103
void ActivatePhysics()
Set the physics system to be updated.
Definition PhysicsManager.hpp:123
JPH::BodyInterface & GetBodyInterface()
Get a reference to the body interface for manipulating bodies.
Definition PhysicsManager.hpp:59
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:128
std::shared_ptr< JPH::JobSystem > _jobSystem
Definition PhysicsManager.hpp:138
bool IsPhysicsActivated() const
Check if the physics system should be updated.
Definition PhysicsManager.hpp:118
std::shared_ptr< JPH::Factory > _factory
Definition PhysicsManager.hpp:131
std::shared_ptr< JPH::ObjectVsBroadPhaseLayerFilter > _objectVsBroadPhaseLayerFilter
Definition PhysicsManager.hpp:135
std::shared_ptr< JPH::BroadPhaseLayerInterface > _broadPhaseLayerInterface
Definition PhysicsManager.hpp:134
std::shared_ptr< JPH::TempAllocator > _tempAllocator
Definition PhysicsManager.hpp:137
int _collisionSteps
Definition PhysicsManager.hpp:143
std::shared_ptr< JPH::ObjectLayerPairFilter > _objectLayerPairFilter
Definition PhysicsManager.hpp:136
void SetCollisionSteps(int steps)
Set the number of collision steps.
Definition PhysicsManager.hpp:94
std::shared_ptr< JPH::ContactListener > _contactListener
Definition PhysicsManager.hpp:139
Definition BodyEntityMap.hpp:12