Plasma Engine  2.0
Loading...
Searching...
No Matches
JoltUserData.h
1#pragma once
2
3#include <JoltPlugin/JoltPluginDLL.h>
4
6class plComponent;
16
18{
19public:
20 PL_DECLARE_POD_TYPE();
21
22 plJoltUserData() = default;
23 ~plJoltUserData() = default;
24
25 PL_ALWAYS_INLINE void Init(plJoltDynamicActorComponent* pObject)
26 {
27 m_Type = Type::DynamicActorComponent;
28 m_pObject = pObject;
29 }
30
31 PL_ALWAYS_INLINE void Init(plJoltStaticActorComponent* pObject)
32 {
33 m_Type = Type::StaticActorComponent;
34 m_pObject = pObject;
35 }
36
37 PL_ALWAYS_INLINE void Init(plJoltTriggerComponent* pObject)
38 {
39 m_Type = Type::TriggerComponent;
40 m_pObject = pObject;
41 }
42
43 PL_ALWAYS_INLINE void Init(plJoltCharacterControllerComponent* pObject)
44 {
45 m_Type = Type::CharacterComponent;
46 m_pObject = pObject;
47 }
48
49 PL_ALWAYS_INLINE void Init(plJoltShapeComponent* pObject)
50 {
51 m_Type = Type::ShapeComponent;
52 m_pObject = pObject;
53 }
54
55 PL_ALWAYS_INLINE void Init(plJoltQueryShapeActorComponent* pObject)
56 {
57 m_Type = Type::QueryShapeActorComponent;
58 m_pObject = pObject;
59 }
60
61 PL_ALWAYS_INLINE void Init(plSurfaceResource* pObject)
62 {
63 m_Type = Type::SurfaceResource;
64 m_pObject = pObject;
65 }
66
67 PL_ALWAYS_INLINE void Init(plJoltRagdollComponent* pObject)
68 {
69 m_Type = Type::RagdollComponent;
70 m_pObject = pObject;
71 }
72
73 PL_ALWAYS_INLINE void Init(plJoltRopeComponent* pObject)
74 {
75 m_Type = Type::RopeComponent;
76 m_pObject = pObject;
77 }
78
79 PL_FORCE_INLINE void Invalidate()
80 {
81 m_Type = Type::Invalid;
82 m_pObject = nullptr;
83 }
84
85 PL_FORCE_INLINE static plComponent* GetComponent(const void* pUserData)
86 {
87 const plJoltUserData* pJoltUserData = static_cast<const plJoltUserData*>(pUserData);
88 if (pJoltUserData == nullptr ||
89 pJoltUserData->m_Type == Type::Invalid ||
90 pJoltUserData->m_Type == Type::SurfaceResource)
91 {
92 return nullptr;
93 }
94
95 return static_cast<plComponent*>(pJoltUserData->m_pObject);
96 }
97
98 PL_FORCE_INLINE static plJoltActorComponent* GetActorComponent(const void* pUserData)
99 {
100 const plJoltUserData* pJoltUserData = static_cast<const plJoltUserData*>(pUserData);
101 if (pJoltUserData != nullptr &&
102 (pJoltUserData->m_Type == Type::DynamicActorComponent ||
103 pJoltUserData->m_Type == Type::StaticActorComponent ||
104 pJoltUserData->m_Type == Type::QueryShapeActorComponent))
105 {
106 return static_cast<plJoltActorComponent*>(pJoltUserData->m_pObject);
107 }
108
109 return nullptr;
110 }
111
112 PL_FORCE_INLINE static plJoltDynamicActorComponent* GetDynamicActorComponent(const void* pUserData)
113 {
114 const plJoltUserData* pJoltUserData = static_cast<const plJoltUserData*>(pUserData);
115 if (pJoltUserData != nullptr && pJoltUserData->m_Type == Type::DynamicActorComponent)
116 {
117 return static_cast<plJoltDynamicActorComponent*>(pJoltUserData->m_pObject);
118 }
119
120 return nullptr;
121 }
122
123 PL_FORCE_INLINE static plJoltRagdollComponent* GetRagdollComponent(const void* pUserData)
124 {
125 const plJoltUserData* pJoltUserData = static_cast<const plJoltUserData*>(pUserData);
126 if (pJoltUserData != nullptr && pJoltUserData->m_Type == Type::RagdollComponent)
127 {
128 return static_cast<plJoltRagdollComponent*>(pJoltUserData->m_pObject);
129 }
130
131 return nullptr;
132 }
133
134 PL_FORCE_INLINE static plJoltRopeComponent* GetRopeComponent(const void* pUserData)
135 {
136 const plJoltUserData* pJoltUserData = static_cast<const plJoltUserData*>(pUserData);
137 if (pJoltUserData != nullptr && pJoltUserData->m_Type == Type::RopeComponent)
138 {
139 return static_cast<plJoltRopeComponent*>(pJoltUserData->m_pObject);
140 }
141
142 return nullptr;
143 }
144
145 // PL_FORCE_INLINE static plJoltShapeComponent* GetShapeComponent(const void* pUserData)
146 //{
147 // const plJoltUserData* pJoltUserData = static_cast<const plJoltUserData*>(pUserData);
148 // if (pJoltUserData != nullptr && pJoltUserData->m_Type == Type::ShapeComponent)
149 // {
150 // return static_cast<plJoltShapeComponent*>(pJoltUserData->m_pObject);
151 // }
152
153 // return nullptr;
154 //}
155
156 PL_FORCE_INLINE static plJoltTriggerComponent* GetTriggerComponent(const void* pUserData)
157 {
158 const plJoltUserData* pJoltUserData = static_cast<const plJoltUserData*>(pUserData);
159 if (pJoltUserData != nullptr && pJoltUserData->m_Type == Type::TriggerComponent)
160 {
161 return static_cast<plJoltTriggerComponent*>(pJoltUserData->m_pObject);
162 }
163
164 return nullptr;
165 }
166
167 PL_FORCE_INLINE static const plSurfaceResource* GetSurfaceResource(const void* pUserData)
168 {
169 const plJoltUserData* pJoltUserData = static_cast<const plJoltUserData*>(pUserData);
170 if (pJoltUserData != nullptr && pJoltUserData->m_Type == Type::SurfaceResource)
171 {
172 return static_cast<const plSurfaceResource*>(pJoltUserData->m_pObject);
173 }
174
175 return nullptr;
176 }
177
178private:
179 enum class Type
180 {
181 Invalid,
182 DynamicActorComponent,
183 StaticActorComponent,
184 TriggerComponent,
185 CharacterComponent,
186 ShapeComponent,
187 BreakableSheetComponent,
188 SurfaceResource,
189 QueryShapeActorComponent,
190 RagdollComponent,
191 RopeComponent,
192 };
193
194 Type m_Type = Type::Invalid;
195 void* m_pObject = nullptr;
196};
Base class of all component types.
Definition Component.h:25
Base class for all Jolt actors.
Definition JoltActorComponent.h:23
Base class for character controllers (CC).
Definition JoltCharacterControllerComponent.h:27
Turns an object into a fully physically simulated movable object.
Definition JoltDynamicActorComponent.h:35
A physics actor that can be moved procedurally (like a kinematic actor) but that doesn't affect rigid...
Definition JoltQueryShapeActorComponent.h:31
Creates a physics ragdoll for an animated mesh and creates animation poses from the physics simulatio...
Definition JoltRagdollComponent.h:75
Creates a physically simulated rope that is made up of multiple segments.
Definition JoltRopeComponent.h:57
Base class for all Jolt physics shapes.
Definition JoltShapeComponent.h:31
Turns an object into an immovable obstacle in the physics simulation.
Definition JoltStaticActorComponent.h:17
Turns an object into a trigger that is capable of detecting when other physics objects enter its volu...
Definition JoltTriggerComponent.h:39
Definition JoltUserData.h:18
Definition SurfaceResource.h:27