StevEngine
StevEngine is a customizable C++ game engine.
Loading...
Searching...
No Matches
Colliders.hpp
1#pragma once
2#ifdef StevEngine_PHYSICS
3#include "main/EventSystem.hpp"
4#include "main/Component.hpp"
5#include "utilities/Vector3.hpp"
6#include "utilities/Range3.hpp"
7#include "utilities/Quaternion.hpp"
8#include "utilities/Model.hpp"
9#include "utilities/Terrain.hpp"
10//Jolt:
11#include <Jolt/Jolt.h>
12#include <Jolt/Physics/Collision/Shape/Shape.h>
13
14#define COLLIDER_TYPE "Collider"
15
16namespace StevEngine::Physics {
24 class Collider : public Component {
25 friend class StevEngine::GameObject;
26 public:
35
41
46 std::string GetType() const { return COLLIDER_TYPE; }
47
53 Utilities::Stream Export(Utilities::StreamType type) const;
54
55 ~Collider();
56
58 Utilities::Vector3 GetScale() const { return scale; }
63
69
75
81
89
94 Utilities::Range3 GetBounds() const { return shape->GetLocalBounds(); };
95
100 Utilities::Vector3 GetCenterOfMass() const { return shape->GetCenterOfMass(); };
101
106 JPH::Ref<JPH::Shape> GetShape() const { return shape; }
107
108 protected:
112 const JPH::Ref<JPH::Shape> rawShape;
113 JPH::Ref<JPH::Shape> shape;
114
115 private:
120 void Deactivate();
121
126 void Start();
127
136 void TransformUpdate(bool position, bool rotation, bool scale, bool fromLocal = false);
137 };
138
155
172
189
206
225
243
249 class ColliderUpdateEvent : public Event {
250 public:
256 const std::string GetEventType() const override { return GetStaticEventType(); };
257 static const std::string GetStaticEventType() { return "ColliderUpdateEvent"; }
259 };
260
262 inline bool collider = CreateComponents::RegisterComponentType<Collider>(COLLIDER_TYPE);
263}
264#endif
Component()
Create new component.
Definition Component.cpp:10
static bool RegisterComponentType(std::string type)
Register a component type for creation.
Definition Component.hpp:133
Base class for all engine events.
Definition EventSystem.hpp:12
Core game object class.
Definition GameObject.hpp:35
CapsuleCollider(Utilities::Vector3 position=Utilities::Vector3(), Utilities::Quaternion rotation=Utilities::Quaternion(), Utilities::Vector3 scale=Utilities::Vector3(1, 1, 1))
Create capsule collider.
Definition Colliders.cpp:99
ColliderUpdateEvent(Collider *collider)
Create collider update event.
Definition Colliders.hpp:255
Collider * collider
Modified collider.
Definition Colliders.hpp:258
const std::string GetEventType() const override
Get type identifier for this event.
Definition Colliders.hpp:256
Base class for all collision shapes.
Definition Colliders.hpp:24
Utilities::Vector3 GetPosition() const
Get local position.
Definition Colliders.hpp:62
Collider(JPH::Ref< JPH::Shape > shape, Utilities::Vector3 position=Utilities::Vector3(), Utilities::Quaternion rotation=Utilities::Quaternion(), Utilities::Vector3 scale=Utilities::Vector3(1, 1, 1))
Create new collider.
Definition Colliders.cpp:32
void SetRotation(Utilities::Quaternion rotation)
Set local rotation.
Definition Colliders.cpp:72
void SetPosition(Utilities::Vector3 position)
Set local position.
Definition Colliders.cpp:76
Utilities::Quaternion GetRotation() const
Get local rotation.
Definition Colliders.hpp:60
Utilities::Range3 GetBounds() const
Get axis-aligned bounds.
Definition Colliders.hpp:94
Utilities::Vector3 scale
Local scale.
Definition Colliders.hpp:109
Utilities::Quaternion rotation
Local rotation.
Definition Colliders.hpp:111
Utilities::Vector3 GetCenterOfMass() const
Get center of mass.
Definition Colliders.hpp:100
std::string GetType() const
Get component type.
Definition Colliders.hpp:46
Utilities::Vector3 GetScale() const
Get local scale.
Definition Colliders.hpp:58
void SetScale(Utilities::Vector3 scale)
Set local scale.
Definition Colliders.cpp:68
const JPH::Ref< JPH::Shape > rawShape
Base physics shape.
Definition Colliders.hpp:112
JPH::Ref< JPH::Shape > GetShape() const
Get physics shape.
Definition Colliders.hpp:106
Utilities::Stream Export(Utilities::StreamType type) const
Serialize component to a stream.
Definition Colliders.cpp:172
Utilities::Vector3 position
Local position.
Definition Colliders.hpp:110
void SetTransform(Utilities::Vector3 position, Utilities::Quaternion rotation, Utilities::Vector3 scale)
Set full local transform.
Definition Colliders.cpp:80
JPH::Ref< JPH::Shape > shape
Transformed shape.
Definition Colliders.hpp:113
CubeCollider(Utilities::Vector3 position=Utilities::Vector3(), Utilities::Quaternion rotation=Utilities::Quaternion(), Utilities::Vector3 scale=Utilities::Vector3(1, 1, 1))
Create box collider.
Definition Colliders.cpp:87
CylinderCollider(Utilities::Vector3 position=Utilities::Vector3(), Utilities::Quaternion rotation=Utilities::Quaternion(), Utilities::Vector3 scale=Utilities::Vector3(1, 1, 1))
Create cylinder collider.
Definition Colliders.cpp:95
ModelCollider(const Utilities::Model &model, bool convex=true, Utilities::Vector3 position=Utilities::Vector3(), Utilities::Quaternion rotation=Utilities::Quaternion(), Utilities::Vector3 scale=Utilities::Vector3(1, 1, 1))
Create mesh collider.
Definition Colliders.cpp:149
SphereCollider(Utilities::Vector3 position=Utilities::Vector3(), Utilities::Quaternion rotation=Utilities::Quaternion(), Utilities::Vector3 scale=Utilities::Vector3(1, 1, 1))
Create sphere collider.
Definition Colliders.cpp:91
TerrainCollider(const Utilities::TerrainData &data, Utilities::Vector3 position=Utilities::Vector3(), Utilities::Quaternion rotation=Utilities::Quaternion(), Utilities::Vector3 scale=Utilities::Vector3(1, 1, 1))
Create terrain collider.
Definition Colliders.cpp:168
3D model data container
Definition Model.hpp:46
Quaternion for 3D rotations.
Definition Quaternion.hpp:19
Axis-aligned bounding box in 3D space.
Definition Range3.hpp:18
Stream for serialization of data.
Definition Stream.hpp:20
3D vector class
Definition Vector3.hpp:19
Heightmap terrain data storage.
Definition Terrain.hpp:11