UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GeometryCollectionProxyData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Misc/Crc.h"
7
10
11/*
12* Managed arrays for simulation data used by the GeometryCollectionProxy
13*/
14
21{
22public:
24
25 UE_DEPRECATED(5.4, "No longer handles a raw ptr, use the version taking TSharedPtr")
32
34 CHAOS_API void SetTransform(int32 Index, const FTransform3f& Transform);
37
38 CHAOS_API const TManagedArray<bool>& GetHasParent() const;
42
43 CHAOS_API bool HasChildren(int32 Index) const;
44
46 CHAOS_API bool IsCluster(int32 Index) const;
47
48 template<typename Lambda>
50 {
52 {
54 for (const int32 Child : Children)
55 {
57 {
58 bool bContinue = LambdaIt(Child);
59 if (!bContinue)
60 {
61 break;
62 }
63 }
64 }
65 }
66 }
67
68protected:
69 UE_DEPRECATED(5.4, "Raw pointer no longer in use, instead access the shared version")
73 TManagedArray<bool> HasParent;
74 TManagedArray<FTransform3f> Transform;
75 bool bTransformHasChanged;
76
78 CHAOS_API void Construct();
79 void InitializeTransforms();
80};
81
82
90{
91public:
92 UE_DEPRECATED(5.4, "No longer handles a raw ptr, use the version taking TSharedPtr")
99
101
111
112 UE_DEPRECATED(5.4, "CollisionMaskAttribute is no longer supported")
113 static CHAOS_API const FName CollisionMaskAttribute;
114
115 UE_DEPRECATED(5.4, "CollisionGroupAttribute is no longer supported")
116 static CHAOS_API const FName CollisionGroupAttribute;
117
118 // Transform Group
120
121 TManagedArray<uint8> DynamicState;
122 static_assert(sizeof(EObjectStateTypeEnum) <= sizeof(uint8)); // DynamicState must fit EObjectStateTypeEnum
123
124 UE_DEPRECATED(5.5, "Simplicials array is optional and should be queried using the FindAttribute method")
126
127 TManagedArray<bool> SimulatableParticles;
128
129 UE_DEPRECATED(5.4, "CollisionStructureID attribute is no longer supported")
130 TManagedArray<int32> CollisionStructureID;
131
132 UE_DEPRECATED(5.4, "CollisionMask attribute is no longer supported")
133 TManagedArray<int32> CollisionMask;
134
135 UE_DEPRECATED(5.4, "CollisionGroup attribute is no longer supported - you can still set the collision group on the geometry collection")
136 TManagedArray<int32> CollisionGroup;
137
138public:
139
140 CHAOS_API const TManagedArrayAccessor<int32> GetInitialLevels() const;
141
142 const TManagedArray<uint8>& GetInternalClusterParentTypeAttribute() const { return InternalClusterParentType; }
143 TManagedArray<uint8>& GetInternalClusterParentTypeAttribute() { return InternalClusterParentType; }
144
145 CHAOS_API void AddVelocitiesAttributes();
146 const TManagedArray<FVector3f>* GetLinearVelocitiesAttribute() const { return OptionalLinearVelocityAttribute; }
147 const TManagedArray<FVector3f>* GetAngularVelocitiesAttribute() const { return OptionalAngularVelocityAttribute; };
148 TManagedArray<FVector3f>* GetLinearVelocitiesAttribute() { return OptionalLinearVelocityAttribute; }
149 TManagedArray<FVector3f>* GetAngularVelocitiesAttribute() { return OptionalAngularVelocityAttribute; };
150
151 CHAOS_API void AddAnimateTransformAttribute();
152 const TManagedArray<bool>* GetAnimateTransformAttribute() const { return OptionalAnimateTransformAttribute; }
153 TManagedArray<bool>* GetAnimateTransformAttribute() { return OptionalAnimateTransformAttribute; }
154
156 {
158 FInitialVelocityFacade(const FGeometryDynamicCollection& DynamicCollection);
159
160 bool IsValid() const;
161 void DefineSchema();
162 void Fill(const FVector3f& InitialLinearVelocity, const FVector3f& InitialAngularVelocity);
163 void CopyFrom(const FGeometryDynamicCollection& SourceCollection);
164
167 };
168
171
172 CHAOS_API void CopyInitialVelocityAttributesFrom(const FGeometryDynamicCollection& SourceCollection);
173
174private:
175 TManagedArray<uint8> InternalClusterParentType;
176
177 TManagedArray<FVector3f>* OptionalLinearVelocityAttribute;
178 TManagedArray<FVector3f>* OptionalAngularVelocityAttribute;
179 TManagedArray<bool>* OptionalAnimateTransformAttribute;
180};
181
188{
189public:
191
193 CHAOS_API bool IsValid() const;
194
196 CHAOS_API bool IsActive(int32 TransformIndex) const;
197
199 CHAOS_API bool IsDynamicOrSleeping(int32 TransformIndex) const;
200
202 CHAOS_API bool IsSleeping(int32 TransformIndex) const;
203
205 CHAOS_API bool HasChildren(int32 TransformIndex) const;
206
208 CHAOS_API bool HasBrokenOff(int32 TransformIndex) const;
209
211 CHAOS_API bool HasInternalClusterParent(int32 TransformIndex) const;
212
214 CHAOS_API bool HasDynamicInternalClusterParent(int32 TransformIndex) const;
215
217 CHAOS_API bool HasClusterUnionParent(int32 TransformIndex) const;
218
219private:
221 TManagedArrayAccessor<bool> ActiveAttribute;
222
224 TManagedArrayAccessor<uint8> DynamicStateAttribute;
225
227 TManagedArrayAccessor<uint8> InternalClusterParentTypeAttribute;
228
229 FGeometryDynamicCollection& DynamicCollection;
230};
231
237{
238public:
240
241 int32 GetNumEntries() const { return States.Num(); }
242
243 void Reset();
244
246 {
247 const int32 NumTransforms = Collection.NumElements(FGeometryCollection::TransformGroup);
248 ModifiedTransformIndices.Init(false, NumTransforms);
249#if WITH_EDITORONLY_DATA
250 if (Damages.Num() != NumTransforms)
251 {
252 Damages.SetNumUninitialized(NumTransforms);
253 }
254#endif
255 }
256
258
259 struct FState
260 {
261 uint16 DynamicState: 8; // need to fit EObjectStateTypeEnum
263 uint16 HasDecayed : 1; // particle has been released but disabled right away
267 // 3 bits left
268 };
269
277
283
289
290#if WITH_EDITORONLY_DATA
291 struct FDamageData
292 {
293 float Damage = 0;
294 float DamageThreshold = 0;
295 };
296
297 void SetDamages(int32 TransformIndex, const FDamageData& DamageData)
298 {
299 Damages[TransformIndex] = DamageData;
300 }
301
302 const FDamageData& GetDamages(int32 TransformIndex) const
303 {
304 return Damages[TransformIndex];
305 }
306#endif
307
309 {
310 if (ModifiedTransformIndices[TransformIndex])
311 {
312 return ModifiedTransformIndices.CountSetBits(0, TransformIndex + 1) - 1;
313 }
314 return INDEX_NONE;
315 }
316
317 inline const FStateData& GetState(FEntryIndex EntryIndex) const
318 {
319 return States[EntryIndex];
320 }
321
322 inline const FPositionData& GetPositions(FEntryIndex EntryIndex) const
323 {
324 return Positions[EntryIndex];
325 }
326
327 inline const FVelocityData& GetVelocities(FEntryIndex EntryIndex) const
328 {
329 return Velocities[EntryIndex];
330 }
331
333 {
334 SolverDt = SolverDtIn;
335 }
336
337 inline void SetState(int32 EntryIndex, const FStateData& StateData)
338 {
339 States[EntryIndex] = StateData;
340 }
341
342 inline FEntryIndex AddEntry(int32 TransformIndex)
343 {
344 ModifiedTransformIndices[TransformIndex] = true;
345 const FEntryIndex EntryIndex = States.AddDefaulted();
346 ensure(GetEntryIndexByTransformIndex(TransformIndex) == EntryIndex);
347 Positions.AddDefaulted();
348 Velocities.AddDefaulted();
349 return EntryIndex;
350 }
351
352 inline void SetPositions(FEntryIndex EntryIndex, const FPositionData& PositionData)
353 {
354 Positions[EntryIndex] = PositionData;
355 }
356
357 inline void SetVelocities(FEntryIndex EntryIndex, const FVelocityData& VelocityData)
358 {
359 Velocities[EntryIndex] = VelocityData;
360 }
361
363 {
364 return ModifiedTransformIndices;
365 }
366
367private:
368 Chaos::FReal SolverDt;
369
370 // we only store the data for modified transforms
371 // ModifiedTransformIndices contains which transform has been set
372 // use the API to retrieve the entry Index matching a specific transform index
373 TBitArray<> ModifiedTransformIndices;
374 TArray<FStateData> States;
376 TArray<FVelocityData> Velocities;
377
378#if WITH_EDITORONLY_DATA
379 // use to display impulse statistics in editor
380 // this is indexed on the transform index
382#endif
383
384public:
388};
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EObjectStateTypeEnum
Definition GeometryCollectionSimulationTypes.h:34
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
Definition Vector.h:407
Definition GeometryCollectionCollisionStructureManager.h:26
Definition GeometryCollectionProxyData.h:188
Definition GeometryCollectionProxyData.h:237
const FStateData & GetState(FEntryIndex EntryIndex) const
Definition GeometryCollectionProxyData.h:317
uint8 IsObjectDynamic
Definition GeometryCollectionProxyData.h:385
int32 FEntryIndex
Definition GeometryCollectionProxyData.h:257
const TBitArray & GetModifiedTransformIndices() const
Definition GeometryCollectionProxyData.h:362
void SetVelocities(FEntryIndex EntryIndex, const FVelocityData &VelocityData)
Definition GeometryCollectionProxyData.h:357
uint8 IsRootBroken
Definition GeometryCollectionProxyData.h:387
FEntryIndex GetEntryIndexByTransformIndex(int32 TransformIndex) const
Definition GeometryCollectionProxyData.h:308
FEntryIndex AddEntry(int32 TransformIndex)
Definition GeometryCollectionProxyData.h:342
void SetState(int32 EntryIndex, const FStateData &StateData)
Definition GeometryCollectionProxyData.h:337
void InitArrays(const FGeometryDynamicCollection &Collection)
Definition GeometryCollectionProxyData.h:245
int32 GetNumEntries() const
Definition GeometryCollectionProxyData.h:241
void SetSolverDt(const Chaos::FReal SolverDtIn)
Definition GeometryCollectionProxyData.h:332
uint8 IsObjectLoading
Definition GeometryCollectionProxyData.h:386
const FVelocityData & GetVelocities(FEntryIndex EntryIndex) const
Definition GeometryCollectionProxyData.h:327
const FPositionData & GetPositions(FEntryIndex EntryIndex) const
Definition GeometryCollectionProxyData.h:322
void SetPositions(FEntryIndex EntryIndex, const FPositionData &PositionData)
Definition GeometryCollectionProxyData.h:352
Definition GeometryCollection.h:32
Definition GeometryCollectionProxyData.h:90
const TManagedArray< bool > * GetAnimateTransformAttribute() const
Definition GeometryCollectionProxyData.h:152
FGeometryDynamicCollection & operator=(FGeometryDynamicCollection &&)=delete
static CHAOS_API const FName ShapesQueryDataAttribute
Definition GeometryCollectionProxyData.h:105
FInitialVelocityFacade GetInitialVelocityFacade()
Definition GeometryCollectionProxyData.h:169
FTransformDynamicCollection Super
Definition GeometryCollectionProxyData.h:100
static CHAOS_API const FName ShapesSimDataAttribute
Definition GeometryCollectionProxyData.h:106
const TManagedArray< FVector3f > * GetLinearVelocitiesAttribute() const
Definition GeometryCollectionProxyData.h:146
TManagedArray< FVector3f > * GetLinearVelocitiesAttribute()
Definition GeometryCollectionProxyData.h:148
FGeometryDynamicCollection & operator=(const FGeometryDynamicCollection &)=delete
static CHAOS_API const FName SimplicialsAttribute
Definition GeometryCollectionProxyData.h:108
static CHAOS_API const FName ActiveAttribute
Definition GeometryCollectionProxyData.h:102
FGeometryDynamicCollection(FGeometryDynamicCollection &)=delete
static CHAOS_API const FName SimulatableParticlesAttribute
Definition GeometryCollectionProxyData.h:109
const TManagedArray< FVector3f > * GetAngularVelocitiesAttribute() const
Definition GeometryCollectionProxyData.h:147
TManagedArray< bool > * GetAnimateTransformAttribute()
Definition GeometryCollectionProxyData.h:153
static CHAOS_API const FName ImplicitsAttribute
Definition GeometryCollectionProxyData.h:104
static CHAOS_API const FName DynamicStateAttribute
Definition GeometryCollectionProxyData.h:103
FInitialVelocityFacade GetInitialVelocityFacade() const
Definition GeometryCollectionProxyData.h:170
TManagedArray< uint8 > & GetInternalClusterParentTypeAttribute()
Definition GeometryCollectionProxyData.h:143
TManagedArray< FVector3f > * GetAngularVelocitiesAttribute()
Definition GeometryCollectionProxyData.h:149
static CHAOS_API const FName SharedImplicitsAttribute
Definition GeometryCollectionProxyData.h:107
static CHAOS_API const FName InternalClusterParentTypeAttribute
Definition GeometryCollectionProxyData.h:110
FGeometryDynamicCollection(FGeometryDynamicCollection &&)=delete
Definition NameTypes.h:617
Definition RefCounting.h:252
static CHAOS_API const FName TransformGroup
Definition TransformCollection.h:49
TManagedArray< TSet< int32 > > Children
Definition TransformCollection.h:134
Definition GeometryCollectionProxyData.h:21
const FGeometryCollection * RestCollection
Definition GeometryCollectionProxyData.h:70
CHAOS_API bool IsCluster(int32 Index) const
Definition GeometryCollectionProxyData.cpp:126
void IterateThroughChildren(int32 Index, Lambda &&LambdaIt) const
Definition GeometryCollectionProxyData.h:49
CHAOS_API const FTransform3f & GetTransform(int32 Index) const
Definition GeometryCollectionProxyData.cpp:61
CHAOS_API int32 GetNumTransforms() const
Definition GeometryCollectionProxyData.cpp:76
CHAOS_API bool HasChildren(int32 Index) const
Definition GeometryCollectionProxyData.cpp:113
TSharedPtr< const FGeometryCollection > RestCollectionShared
Definition GeometryCollectionProxyData.h:71
CHAOS_API void SetHasParent(int32 Index, bool Value)
Definition GeometryCollectionProxyData.cpp:101
CHAOS_API int32 GetParent(int32 Index) const
Definition GeometryCollectionProxyData.cpp:107
FManagedArrayCollection Super
Definition GeometryCollectionProxyData.h:23
CHAOS_API void SetTransform(int32 Index, const FTransform3f &Transform)
Definition GeometryCollectionProxyData.cpp:70
CHAOS_API void ResetInitialTransforms()
Definition GeometryCollectionProxyData.cpp:82
CHAOS_API const TManagedArray< bool > & GetHasParent() const
Definition GeometryCollectionProxyData.cpp:91
Definition Array.h:670
FORCEINLINE bool IsValidIndex(int32 Index) const
Definition ManagedArray.h:558
Definition ManagedArray.h:1099
Definition SharedPointer.h:692
Definition UniquePtr.h:107
FRealDouble FReal
Definition Real.h:22
U16 Index
Definition radfft.cpp:71
Definition GeometryCollectionProxyData.h:279
Chaos::FRotation3 ParticleR
Definition GeometryCollectionProxyData.h:281
Chaos::FVec3 ParticleX
Definition GeometryCollectionProxyData.h:280
Definition GeometryCollectionProxyData.h:271
int32 TransformIndex
Definition GeometryCollectionProxyData.h:272
bool HasParent
Definition GeometryCollectionProxyData.h:274
int32 InternalClusterUniqueIdx
Definition GeometryCollectionProxyData.h:273
FState State
Definition GeometryCollectionProxyData.h:275
Definition GeometryCollectionProxyData.h:260
uint16 DynamicInternalClusterParent
Definition GeometryCollectionProxyData.h:265
uint16 HasInternalClusterParent
Definition GeometryCollectionProxyData.h:264
uint16 DisabledState
Definition GeometryCollectionProxyData.h:262
uint16 DynamicState
Definition GeometryCollectionProxyData.h:261
uint16 HasDecayed
Definition GeometryCollectionProxyData.h:263
uint16 HasClusterUnionParent
Definition GeometryCollectionProxyData.h:266
Definition GeometryCollectionProxyData.h:285
Chaos::FVec3f ParticleW
Definition GeometryCollectionProxyData.h:287
Chaos::FVec3f ParticleV
Definition GeometryCollectionProxyData.h:286
Definition GeometryCollectionProxyData.h:156
TManagedArrayAccessor< FVector3f > InitialAngularVelocityAttribute
Definition GeometryCollectionProxyData.h:166
TManagedArrayAccessor< FVector3f > InitialLinearVelocityAttribute
Definition GeometryCollectionProxyData.h:165
Definition ManagedArrayCollection.h:56
TManagedArray< T > * FindAttribute(FName Name, FName Group)
Definition ManagedArrayCollection.h:294
Definition ManagedArrayAccessor.h:20