StevEngine
StevEngine is a customizable C++ game engine.
Loading...
Searching...
No Matches
PhysicsSystem.hpp
1#pragma once
2#ifdef StevEngine_PHYSICS
3#include "physics/RigidBody.hpp"
4#include "utilities/Vector3.hpp"
5#include <unordered_map>
6
7//Jolt imports
8#include "Jolt.h"
9#include <Jolt/RegisterTypes.h>
10#include <Jolt/Core/Factory.h>
11#include <Jolt/Core/TempAllocator.h>
12#include <Jolt/Core/JobSystemThreadPool.h>
13#include <Jolt/Physics/PhysicsSettings.h>
14#include <Jolt/Physics/PhysicsSystem.h>
15#include <Jolt/Core/JobSystemSingleThreaded.h>
16#include <Jolt/Physics/Collision/RayCast.h>
17#include <Jolt/Physics/Collision/Shape/BoxShape.h>
18#include <Jolt/Physics/Collision/Shape/SphereShape.h>
19#include <Jolt/Physics/Collision/Shape/MutableCompoundShape.h>
20#include <Jolt/Physics/Body/Body.h>
21#include <Jolt/Physics/Body/BodyManager.h>
22#include <Jolt/Physics/Body/BodyCreationSettings.h>
23#include <Jolt/Physics/Body/BodyActivationListener.h>
24
25#include "Layers.hpp"
26
27namespace StevEngine {
28 class Engine;
29 namespace Physics {
37 friend class StevEngine::Engine;
38 public:
43
48 void Init(JPH::PhysicsSettings settings);
49
56 RigidBody* CastRay(JPH::RayCast ray, Utilities::Vector3* hitPoint = NULL) const;
57
62 JPH::PhysicsSystem& GetJoltSystem() { return joltSystem; };
63
70 JPH::Body* CreateBody(JPH::BodyCreationSettings settings, RigidBody* attachedRigidBody);
71
77 void DestroyBody(JPH::Body* body, RigidBody* attachedRigidBody);
78
79 private:
84 void Update(double deltaTime);
85
86 JPH::PhysicsSystem joltSystem;
87 JPH::TempAllocatorMalloc tempAllocator;
88 JPH::JobSystemSingleThreaded jobSystem;
89
90 // Layer management
91 BPLayerInterfaceImpl broad_phase_layer_interface;
92 ObjectVsBroadPhaseLayerFilterImpl object_vs_broadphase_layer_filter;
93 ObjectLayerPairFilterImpl object_vs_object_layer_filter;
94
95 // RigidBody management
96 std::unordered_map<JPH::BodyID, RigidBody*> rigidBodies;
97 };
98
99 extern PhysicsSystem physics;
100 }
101}
102#endif
Main engine class managing core systems.
Definition Engine.hpp:26
Broad phase layer interface for Jolt.
Definition Layers.hpp:91
Filter for object layer collisions.
Definition Layers.hpp:135
Filter for broad phase layer collisions.
Definition Layers.hpp:118
RigidBody * CastRay(JPH::RayCast ray, Utilities::Vector3 *hitPoint=NULL) const
Get physics body interface.
Definition PhysicsSystem.cpp:76
void DestroyBody(JPH::Body *body, RigidBody *attachedRigidBody)
Destroy body.
Definition PhysicsSystem.cpp:70
void Init(JPH::PhysicsSettings settings)
Initialize physics system.
Definition PhysicsSystem.cpp:40
JPH::PhysicsSystem & GetJoltSystem()
Get Jolt physics system.
Definition PhysicsSystem.hpp:62
PhysicsSystem()
Create physics system.
Definition PhysicsSystem.cpp:37
JPH::Body * CreateBody(JPH::BodyCreationSettings settings, RigidBody *attachedRigidBody)
Create a new Jolt physics body.
Definition PhysicsSystem.cpp:63
Physics rigid body component.
Definition RigidBody.hpp:61
3D vector class
Definition Vector3.hpp:17