StevEngine
StevEngine is a customizable C++ game engine.
Loading...
Searching...
No Matches
Layers.hpp
1#pragma once
2#ifdef StevEngine_PHYSICS
3
4#include <map>
5#include <string>
6
7#include <Jolt/Jolt.h>
8#include <Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h>
9
10namespace StevEngine::Physics {
11 namespace BroadPhaseLayers
12 {
14 static constexpr JPH::BroadPhaseLayer NON_MOVING(0);
16 static constexpr JPH::BroadPhaseLayer MOVING(1);
17 };
18
25 class Layer {
26 public:
27 const bool isStatic;
28 const std::string name;
29 const JPH::ObjectLayer id;
30 const JPH::BroadPhaseLayer BroadPhaseLayer;
31
37 Layer(std::string name, bool isStatic = false);
38
39 private:
40 static JPH::ObjectLayer currentId;
41 static std::map<unsigned int, Layer*> layers;
42 static std::map<std::string, Layer*> layersByName;
43
44 public:
50 static Layer* GetLayerByName(std::string name);
51
57 static Layer* GetLayerById(JPH::ObjectLayer id);
58 };
59
66 class BPLayerInterfaceImpl final : public JPH::BroadPhaseLayerInterface {
67 public:
72
77 virtual unsigned int GetNumBroadPhaseLayers() const override;
78
84 virtual JPH::BroadPhaseLayer GetBroadPhaseLayer(JPH::ObjectLayer inLayer) const override;
85 };
86
92 class ObjectVsBroadPhaseLayerFilterImpl : public JPH::ObjectVsBroadPhaseLayerFilter
93 {
94 public:
101 virtual bool ShouldCollide(JPH::ObjectLayer inLayer1, JPH::BroadPhaseLayer inLayer2) const override;
102 };
103
109 class ObjectLayerPairFilterImpl : public JPH::ObjectLayerPairFilter
110 {
111 public:
118 virtual bool ShouldCollide(JPH::ObjectLayer inObject1, JPH::ObjectLayer inObject2) const override;
119 };
120}
121#endif
virtual unsigned int GetNumBroadPhaseLayers() const override
Get number of broad phase layers.
Definition Layers.cpp:24
virtual JPH::BroadPhaseLayer GetBroadPhaseLayer(JPH::ObjectLayer inLayer) const override
Get broad phase layer for object layer.
Definition Layers.cpp:27
BPLayerInterfaceImpl()
Create broad phase interface.
Definition Layers.cpp:23
static Layer * GetLayerByName(std::string name)
Get layer by name.
Definition Layers.cpp:15
Layer(std::string name, bool isStatic=false)
Create new physics layer.
Definition Layers.cpp:11
const bool isStatic
Whether objects are static.
Definition Layers.hpp:27
const JPH::ObjectLayer id
Unique layer ID.
Definition Layers.hpp:29
const JPH::BroadPhaseLayer BroadPhaseLayer
Broad phase settings.
Definition Layers.hpp:30
static Layer * GetLayerById(JPH::ObjectLayer id)
Get layer by ID.
Definition Layers.cpp:18
const std::string name
Layer name.
Definition Layers.hpp:28
Filter for object layer collisions.
Definition Layers.hpp:110
virtual bool ShouldCollide(JPH::ObjectLayer inObject1, JPH::ObjectLayer inObject2) const override
Check if layers should collide.
Definition Layers.cpp:38
Filter for broad phase layer collisions.
Definition Layers.hpp:93
virtual bool ShouldCollide(JPH::ObjectLayer inLayer1, JPH::BroadPhaseLayer inLayer2) const override
Check if layers should collide.
Definition Layers.cpp:30