Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
ColliderComponent.hpp
1#pragma once
2
3#include <entt/entt.hpp>
4#include <Jolt/Jolt.h>
5#include <Jolt/Physics/Collision/Shape/Shape.h>
6
7#include <Common/Memory/SmartPointers/UniquePtr.hpp>
8#include <Common/Math.hpp>
9#include <EngineCore/ECS/Entity.hpp>
10#include <EngineCore/WorldContext/WorldContextSet.hpp>
11#include <EngineCore/Reflection/ComponentReflection.hpp>
12#include <EngineCore/CoreComponents/Transform/TransformComponent.hpp>
13
14namespace Grindstone {
15 class WorldContextSet;
16}
17
18namespace Grindstone::Physics {
19 struct ColliderComponent {
20 virtual void Initialize(const TransformComponent& transformComponent) = 0;
21
22 JPH::Ref<JPH::Shape> collisionShape = nullptr;
23 };
24
25 ColliderComponent* GetCollider(entt::registry& registry, entt::entity entityHandle);
26
28 static void Construct(Grindstone::WorldContextSet& cxt, entt::entity newEntityId);
29 SphereColliderComponent Clone(Grindstone::WorldContextSet& cxt, entt::entity newEntityId) const;
30 virtual void Initialize(const TransformComponent& transformComponent) override;
31 virtual void SetRadius(float radius);
32 virtual float GetRadius() const;
33 private:
34 float radius = 1.0f;
35
36 REFLECT("SphereCollider")
37 };
38
40 static void Construct(Grindstone::WorldContextSet& cxt, entt::entity newEntityId);
41 PlaneColliderComponent Clone(Grindstone::WorldContextSet& cxt, entt::entity newEntityId) const;
42 virtual void Initialize(const TransformComponent& transformComponent) override;
43 virtual void SetCollider(Math::Float3 planeNormal, float positionAlongNormal);
44 virtual Math::Float3 GetPlaneNormal() const;
45 virtual float GetPositionAlongNormal() const;
46 private:
47 Math::Float3 planeNormal = Math::Float3(0.0f, 0.0f, 1.0f);
48 float positionAlongNormal = 0.0f;
49
50 REFLECT("PlaneCollider")
51 };
52
54 static void Construct(Grindstone::WorldContextSet& cxt, entt::entity newEntityId);
55 BoxColliderComponent Clone(Grindstone::WorldContextSet& cxt, entt::entity newEntityId) const;
56 virtual void Initialize(const TransformComponent& transformComponent) override;
57 virtual void SetSize(Math::Float3);
58 virtual Math::Float3 GetSize() const;
59 private:
60 Math::Float3 size = Math::Float3(1.0f, 1.0f, 1.0f);
61
62 REFLECT("BoxCollider")
63 };
64
66 static void Construct(Grindstone::WorldContextSet& cxt, entt::entity newEntityId);
67 CapsuleColliderComponent Clone(Grindstone::WorldContextSet& cxt, entt::entity newEntityId) const;
68 virtual void Initialize(const TransformComponent& transformComponent) override;
69 virtual void SetCollider(float radius, float height);
70 virtual float GetRadius() const;
71 virtual float GetHeight() const;
72 private:
73 float radius = 0.5f;
74 float height = 2.0f;
75
76 REFLECT("CapsuleCollider")
77 };
78}
Definition WorldContextSet.hpp:11
Definition PhysicsLayer.hpp:6
Definition ArchiveContentFile.hpp:8
Definition ColliderComponent.hpp:46
Definition ColliderComponent.hpp:58
Definition ColliderComponent.hpp:14
Definition ColliderComponent.hpp:32
Definition ColliderComponent.hpp:20