UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ClusterUnionComponent.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "Containers/Array.h"
8#include "Containers/Map.h"
9#include "Containers/Set.h"
10#include "Engine/EngineTypes.h"
11#include "Logging/LogMacros.h"
16#include "UObject/ObjectKey.h"
17
18#include "ClusterUnionComponent.generated.h"
19
20class AActor;
24
26
27namespace Chaos
28{
29 class FPBDRigidsSolver;
30
31 template <typename TPayload, typename T, int d>
32 class ISpatialAccelerationCollection;
33}
34
35USTRUCT()
37{
39
44
48
51
53 {
54 return ID == Other.ID;
55 }
56
58 {
59 return !(*this == Other);
60 }
61
63 {
64 return GetTypeHash(Data.ID);
65 }
66};
67
68USTRUCT()
70{
72
74
75#if WITH_EDITORONLY_DATA
76 UE_DEPRECATED(5.4, "This property is deprecated. Please use BonesData instead.")
77 // Set of bone Ids that we actually added into the cluster union.
78 TSet<int32> BoneIds;
79
80 UE_DEPRECATED(5.4, "This property is deprecated and no longer used. It will be removed in future versions.")
81 // Cached acceleration structure handles - needed to properly cleanup the component from the accel structure.
83
87 FClusteredComponentData& operator=(const FClusteredComponentData& Other) = default;
90#endif // WITH_EDITORONLY_DATA
91
92 // Array of bone Ids that we actually added into the cluster union.
94
95 // Using a TWeakObjectPtr here because the UClusterUnionReplicatedProxyComponent will have a pointer back
96 // and we don't want to get into a situation where a circular reference occurs.
97 UPROPERTY()
99
100 UPROPERTY()
102
103 UPROPERTY()
104 bool bWasReplicating = true;
105
106 UPROPERTY()
107 bool bPendingDeletion = false;
108};
109
110USTRUCT()
112{
114
115 TSet<TObjectKey<UPrimitiveComponent>> Components;
116
117 UPROPERTY()
118 bool bWasReplicatingMovement = true;
119};
120
121USTRUCT()
123{
125
126 UPROPERTY()
127 uint8 ObjectState = 0;
128
129 UPROPERTY()
130 bool bIsAnchored = true;
131
133 bool operator==(const FClusterUnionReplicatedData&) const = default;
134 bool operator!=(const FClusterUnionReplicatedData&) const = default;
135};
136
137USTRUCT()
139{
141
143
144#if WITH_EDITORONLY_DATA
145 UE_DEPRECATED(5.4, "This property is deprecated. Please use BonesData instead.")
147
148 UE_DEPRECATED(5.4, "This property is deprecated and no longer used. It will be removed in future versions.")
149 UPROPERTY()
151
158#endif // WITH_EDITORONLY_DATA
159
160 UPROPERTY()
161 TSet<FClusterUnionBoneData> BonesData;
162};
163
164USTRUCT()
166{
168
169 UPROPERTY()
170 TObjectPtr<UClusterUnionComponent> ClusterUnionComponent;
171
172 UPROPERTY()
173 TArray<TObjectPtr<UPrimitiveComponent>> ProcessedComponents;
174};
175
177DECLARE_MULTICAST_DELEGATE_FourParams(FOnClusterUnionAddedComponentNative, UPrimitiveComponent*, const TArray<FClusterUnionBoneData>& /*BoneIds*/, const TArray<FClusterUnionBoneData>& /*RemovedBoneIds*/, bool /*bIsNew*/);
178
181
183
185
209UCLASS(MinimalAPI)
210class UClusterUnionComponent : public UPrimitiveComponent
211{
213public:
214
216
218
219 UFUNCTION(BlueprintCallable, Category="Cluster Union")
220 ENGINE_API void AddComponentToCluster(UPrimitiveComponent* InComponent, const TArray<int32>& BoneIds, bool bRebuildGeometry = true);
221
222 UFUNCTION(BlueprintCallable, Category = "Cluster Union")
223 ENGINE_API void RemoveComponentFromCluster(UPrimitiveComponent* InComponent);
224
225 UFUNCTION(BlueprintCallable, Category = "Cluster Union")
226 ENGINE_API void RemoveComponentBonesFromCluster(UPrimitiveComponent* InComponent, const TArray<int32>& BoneIds);
227
228 UFUNCTION(BlueprintCallable, Category = "Cluster Union")
229 ENGINE_API TArray<UPrimitiveComponent*> GetPrimitiveComponents();
230
231 UFUNCTION(BlueprintCallable, Category = "Cluster Union")
232 ENGINE_API TArray<AActor*> GetActors();
233
234 UE_DEPRECATED(5.5, "SetIsAnchored is deprecated, Use SetSimulatePhysics instead")
235 UFUNCTION(BlueprintCallable, Category = "Cluster Union", meta = (DeprecatedFunction, DeprecationMessage = "SetIsAnchored is deprecated, Use SetSimulatePhysics instead"))
236 ENGINE_API virtual void SetIsAnchored(bool bIsAnchored);
237
238 ENGINE_API bool IsAnchored() const;
239
240 UFUNCTION(BlueprintCallable, Category = "Cluster Union")
241 ENGINE_API void SetEnableDamageFromCollision(bool bValue);
242
244 UPROPERTY(EditAnywhere, BlueprintReadWrite, BlueprintSetter = SetEnableDamageFromCollision, Category = "Cluster Union")
245 bool bEnableDamageFromCollision;
246
251 {
252 FMappedComponentKey() : ComponentPtr(nullptr)
253 {
254 }
255
257 {
258 ComponentKey = InComponentKey;
259 ComponentPtr = InComponent;
260 }
261
262 FMappedComponentKey(UPrimitiveComponent* InComponent)
263 {
264 ComponentKey = InComponent;
265 ComponentPtr = InComponent;
266 }
267
269 {
270 return ComponentKey < Other.ComponentKey;
271 }
272
274 {
275 return ComponentKey == Other.ComponentKey;
276 }
277
279 {
280 return GetTypeHash(InMappedComponentKey.ComponentKey);
281 }
282
284 UPrimitiveComponent* ComponentPtr;
285 };
286
288 {
289 FMappedBoneData() = default;
290
292 : PhysicsObjectHandle(PhysicsObjectHande)
293 , RigidParticle(RigidParticle)
294 , ParticleID(ParticleID)
295 , ChildToParentTransform(ChildToParentTransform)
296 {
297 }
298
299 Chaos::FPhysicsObjectHandle PhysicsObjectHandle = nullptr;
300 Chaos::FPBDRigidParticle* RigidParticle = nullptr;
303 };
304
305 // There are several instances where we have 1 single elements. The inline allocator should help in these cases without a huge impact when we go over
307
308 // SyncClusterUnionFromProxy will examine the make up of the cluster union (particles, child to parent, etc.) and do whatever is needed on the GT in terms of bookkeeping.
309 ENGINE_API void SyncClusterUnionFromProxy(const FTransform& NewTransform, TArray<TTuple<UPrimitiveComponent*, FTransform>>* OutNewComponents);
310
311 UFUNCTION()
312 bool IsComponentAdded(UPrimitiveComponent* Component) { return PerComponentData.Contains(Component) || PendingComponentSync.Contains(Component); }
313
314 ENGINE_API virtual void WakeAllRigidBodies() override;
315 ENGINE_API virtual bool IsAnyRigidBodyAwake() override;
316
317 // Set the cluster union total mass. NOTE: if the cluster breaks the mass will be recalculated from the
318 // remaining components. Use OnComponentAddedEvent and OnComponentRemovedEvent to trap this and re-apply custom masses.
319 ENGINE_API virtual void SetMassOverrideInKg(FName BoneName, float MassInKg, bool bOverrideMass) override;
320
321 // Multi-trace/sweep functions that only make sense in the context of a cluster union.
322 ENGINE_API bool LineTraceComponent(TArray<FHitResult>& OutHit, const FVector Start, const FVector End, ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams);
323 ENGINE_API bool SweepComponent(TArray<FHitResult>& OutHit, const FVector Start, const FVector End, const FQuat& ShapeWorldRotation, const FPhysicsGeometry& Geometry, ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams);
324
325 UPROPERTY(BlueprintAssignable, Category = "Events")
326 FOnClusterUnionAddedComponent OnComponentAddedEvent;
327
328 UPROPERTY(BlueprintAssignable, Category = "Events")
329 FOnClusterUnionRemovedComponent OnComponentRemovedEvent;
330
331 UPROPERTY(BlueprintAssignable, Category = "Events")
332 FOnClusterUnionBoundsChanged OnComponentBoundsChangedEvent;
333
334 // native (fast, low overhead) versions
335 FOnClusterUnionAddedComponentNative OnComponentAddedNativeEvent;
336 FOnClusterUnionRemovedComponentNative OnComponentRemovedNativeEvent;
337 FOnClusterUnionPostSyncBodies OnClusterUnionPostSyncBodiesEvent;
338
339 // Lambda returns whether or not iteration should continue;
340 ENGINE_API void VisitAllCurrentChildComponents(const TFunction<bool(UPrimitiveComponent*)>& Lambda) const;
341 ENGINE_API void VisitAllCurrentActors(const TFunction<bool(AActor*)>& Lambda) const;
342
343 ENGINE_API int32 NumChildClusterComponents() const;
344
345 // Force a rebuild of the GT geometry. This needs to happen immediately when we add/remove on the GT so that the SQ is up to date
346 // and doesn't need to wait for the next OnSyncBodies.
347 UE_DEPRECATED(5.4, "Cluster unions now incrementally update their geometry. A force rebuild should never be needed - this function will no longer book-keep properly either.")
348 ENGINE_API void ForceRebuildGTParticleGeometry();
349
350 ENGINE_API const FSpatialAcceleration* GetSpatialAcceleration() const;
351
352 ENGINE_API TArray<int32> GetAddedBoneIdsForComponent(UPrimitiveComponent* Component) const;
353 ENGINE_API void ChangeIfComponentBonesAreMainParticle(UPrimitiveComponent* Component, const TArray<int32>& BoneIds, bool bIsMain);
354
355 // This function will return information from the latest physics sync. Thus adding a new bones
356 // to a cluster union will not allow those indices to be valid for use in this function
357 // until the next time we sync from the PT.
358 ENGINE_API Chaos::FPhysicsObjectHandle FindChildPhysicsObjectByShapeIndex(int32 Index) const;
359
361 friend class UModularVehicleBaseComponent;
362
363 // This should only be called on the client when replication happens.
364 UFUNCTION()
365 ENGINE_API void ForceSetChildToParent(UPrimitiveComponent* InComponent, const TArray<int32>& BoneIds, const TArray<FTransform>& ChildToParent);
366
367 virtual void OnChildToParentUpdated(UPrimitiveComponent* ChangedComponent, const FLocalBonesToTransformMap& PerBoneChildToParent, const FTransform& NewTransform, TArray<TTuple<UPrimitiveComponent*, FTransform>>* OutNewComponents) {}
368
369protected:
370
371 ENGINE_API void BroadcastComponentAddedEvents(UPrimitiveComponent* ChangedComponent, const TArray<FClusterUnionBoneData>& BoneIds, bool bIsNew, const TArray<FClusterUnionBoneData>& RemovedBoneIDs);
372 ENGINE_API void BroadcastComponentRemovedEvents(UPrimitiveComponent* ChangedComponent, const TArray<FClusterUnionBoneData>& InRemovedBonesData);
373
374 Chaos::FClusterUnionPhysicsProxy* GetPhysicsProxy() const { return PhysicsProxy; }
376
377 ENGINE_API virtual void SetRigidState(Chaos::EObjectStateType ObjectState);
378
379 // We need to keep track of the mapping of primitive components to physics objects.
380 // This way we know the right physics objects to pass when removing the component (because
381 // it's possible to get a different list of physics objects when we get to removal). A
382 // side benefit here is being able to track which components are clustered.
384
385
386 // Whether or not this code is running on the server.
387 UFUNCTION()
388 ENGINE_API bool IsAuthority() const;
389
390 const FClusterUnionReplicatedData& GetReplicatedRigidState() const { return ReplicatedRigidState; }
391
392private:
393 // These are the statically clustered components. These should
394 // be specified in the editor and never change.
395 UPROPERTY(EditAnywhere, Category = "Cluster Union")
396 TArray<FComponentReference> ClusteredComponentsReferences;
397
398 // If set to a value not equal to -1, will manually set the cluster union's gravity group
399 // instead of automatically inheriting it from its children particles.
400 UPROPERTY(EditAnywhere, Category = "Cluster Union")
401 int32 GravityGroupIndexOverride;
402
403 // Also keep track of which actors we are clustering and their components. We make modifications on
404 // actors that get clustered so we need to make sure we undo those changes only once all its clustered
405 // components are removed from the cluster.
406 TMap<TObjectKey<AActor>, FClusteredActorData> ActorToComponents;
407
408 // Sometimes we might be in the process of waiting for a component to create it physics state before adding to the cluster.
409 // Make sure we don't try to add the component multiples times while the add is pending. Gets removed finally when PT syncs
410 // back to the GT with this component.
411 TMap<TObjectKey<UPrimitiveComponent>, FClusterUnionPendingAddData> PendingComponentsToAdd;
412
413 // After we add to a cluster union, we need to wait for the sync from the PT back to the GT before removing the component from PendingComponentSync.
414 // Before that happens, we need to perform operations on the GT assuming that the component was added already otherwise there'll be a few frames
415 // where the component hasn't been added to the cluster union on the GT causing a mismatch in behavior.
416 TMap<TObjectKey<UPrimitiveComponent>, FClusterUnionPendingAddData> PendingComponentSync;
417
418 // At every physics sync, we keep track of which shape index matches which child primitive component and bone.
419 TArray<FSafePhysicsObjectHandle> PerShapeComponentBone;
420
421 // Data that can be changed at runtime to keep state about the cluster union consistent between the server and client.
422 UPROPERTY(ReplicatedUsing=OnRep_RigidState)
423 FClusterUnionReplicatedData ReplicatedRigidState;
424
425 // Cached local bounds from the physics particle.
426 mutable bool bHasCachedLocalBounds;
427 mutable FBoxSphereBounds CachedLocalBounds;
428
429 // If Physics Prediction is enabled
430 bool bPhysicsPredictionEnabled;
431
433 // Handles changes to ReplicatedRigidState. Note that this function does not handle replication of X/R since we make use
434 // of the scene component's default replication for that.
435 UFUNCTION()
436 ENGINE_API virtual void OnRep_RigidState();
437
438private:
439
440 ENGINE_API FPhysScene_Chaos* GetChaosScene() const;
441
442 Chaos::FClusterUnionPhysicsProxy* PhysicsProxy;
443
444 // User data to be able to tie the cluster particle back to this component.
445 FChaosUserData PhysicsUserData;
446
447 // An acceleration structure of all children components managed by the cluster union itself.
448 TUniquePtr<FSpatialAcceleration> AccelerationStructure;
449
452 void GetBoneIDsFromComponentData(TContainer& OutBoneIDs, const TSourceData& InSourceData) const
453 {
454 static_assert(std::is_same_v<TSourceData, FClusterUnionPendingAddData> || std::is_same_v<TSourceData, FClusteredComponentData>, "Only FClusterUnionPendingAddData and FClusteredComponentData are supported");
455
457 OutBoneIDs.Reserve(InSourceData.BonesData.Num());
458
460 }
461
462 // Need to handle the fact that this component may or may not be initialized prior to the components referenced in
463 // ClusteredComponentsReferences. This function lets us listen to OnComponentPhysicsStateChanged on the incoming
464 // primitive component so that once the physics state is properly created we can begin the process of adding it.
465 UFUNCTION()
466 ENGINE_API void HandleComponentPhysicsStateChange(UPrimitiveComponent* ChangedComponent, EComponentPhysicsStateChange StateChange);
467
468 // Once in the cluster union, if the component's physics state is destroyed, we should remove it from the cluster union.
469 UFUNCTION()
470 ENGINE_API void HandleComponentPhysicsStateChangePostAddIntoClusterUnion(UPrimitiveComponent* ChangedComponent, EComponentPhysicsStateChange StateChange);
471
472 // These functions only get called when the physics thread syncs to the game thread thereby enforcing a physics thread authoritative view of
473 // what particles are currently contained within the cluster union.
474 ENGINE_API void HandleAddOrModifiedClusteredComponent(const FMappedComponentKey& ChangedComponentData, const FLocalBonesToTransformMap& PerBoneChildToParent, const FTransform& NewTransform, TArray<TTuple<UPrimitiveComponent*, FTransform>>* OutNewComponents);
475 ENGINE_API void HandleRemovedClusteredComponent(TObjectKey<UPrimitiveComponent> RemovedComponent, const FClusteredComponentData& ComponentData);
476
477 ENGINE_API TArray<UPrimitiveComponent*> GetAllCurrentChildComponents() const;
478 ENGINE_API TArray<AActor*> GetAllCurrentActors() const;
479 ENGINE_API void VisitAllCurrentChildComponentsForCollision(ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams, const TFunction<bool(UPrimitiveComponent*)>& Lambda) const;
480
481 // Merge all the physics objects geometries into the cluster union
482 ENGINE_API void AddGTParticleGeometry(const TArray<Chaos::FPhysicsObjectHandle>& PhysicsObjects);
483
484 // Remove all the physics objects geometries from the cluster union
485 ENGINE_API void RemoveGTParticleGeometry(const TSet<Chaos::FPhysicsObjectHandle>& PhysicsObjects);
486
487 //~ Begin UActorComponent Interface
488public:
489 ENGINE_API virtual void OnCreatePhysicsState() override;
490 ENGINE_API virtual void OnDestroyPhysicsState() override;
491 ENGINE_API virtual bool ShouldCreatePhysicsState() const override;
492 ENGINE_API virtual bool HasValidPhysicsState() const override;
493 ENGINE_API virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
494 //~ End UActorComponent Interface
495
496 //~ Begin UPrimitiveComponent Interface
497public:
498 using UPrimitiveComponent::LineTraceComponent;
499 using UPrimitiveComponent::SweepComponent;
500 using UPrimitiveComponent::OverlapComponentWithResult;
501
502 virtual FBodyInstance* GetBodyInstance(FName BoneName, bool bGetWelded, int32 Index) const override { return nullptr; }
503 ENGINE_API virtual void SetSimulatePhysics(bool bSimulate) override;
504 virtual bool CanEditSimulatePhysics() override { return true; }
505 ENGINE_API virtual bool LineTraceComponent(FHitResult& OutHit, const FVector Start, const FVector End, ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams) override;
506 ENGINE_API virtual bool SweepComponent(FHitResult& OutHit, const FVector Start, const FVector End, const FQuat& ShapeWorldRotation, const FPhysicsGeometry& Geometry, ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams) override;
507 ENGINE_API virtual bool OverlapComponentWithResult(const FVector& Pos, const FQuat& Rot, const FPhysicsGeometry& Geometry, ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams, TArray<FOverlapResult>& OutOverlap) const override;
508 ENGINE_API virtual bool ComponentOverlapComponentWithResultImpl(const class UPrimitiveComponent* const PrimComp, const FVector& Pos, const FQuat& Rot, const FCollisionQueryParams& Params, TArray<FOverlapResult>& OutOverlap) const override;
509 virtual bool ShouldDispatchWakeEvents(FName BoneName) const override { return true; }
510 ENGINE_API virtual bool DoCustomNavigableGeometryExport(FNavigableGeometryExport& GeomExport) const override;
511 //~ End UPrimitiveComponent Interface
512
513 //~ Begin USceneComponent Interface
514public:
515 ENGINE_API virtual void OnReceiveReplicatedState(const FVector X, const FQuat R, const FVector V, const FVector W) override;
516 ENGINE_API virtual void OnUpdateTransform(EUpdateTransformFlags UpdateTransformFlags, ETeleportType Teleport) override;
517 ENGINE_API virtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override;
518 ENGINE_API virtual FVector GetComponentVelocity() const override;
519 //~ End USceneComponent Interface
520
521 //~ Begin IPhysicsComponent Interface.
522public:
523 ENGINE_API virtual Chaos::FPhysicsObject* GetPhysicsObjectById(Chaos::FPhysicsObjectId Id) const override;
524 ENGINE_API virtual Chaos::FPhysicsObject* GetPhysicsObjectByName(const FName& Name) const override;
525 ENGINE_API virtual TArray<Chaos::FPhysicsObject*> GetAllPhysicsObjects() const override;
526 ENGINE_API virtual Chaos::FPhysicsObjectId GetIdFromGTParticle(Chaos::FGeometryParticle* Particle) const override;
527 //~ End IPhysicsComponent Interface.
528
529 //~ Begin UObject Interface.
530public:
531 static ENGINE_API void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector);
532 //~ End UObject Interface.
533};
OODEFFUNC typedef const int const char * function
Definition oodle2.h:710
EUpdateTransformFlags
Definition ActorComponent.h:95
@ 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
#define DECLARE_MULTICAST_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:58
#define DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(DelegateName, Param1Type, Param1Name, Param2Type, Param2Name)
Definition DelegateCombinations.h:62
#define DECLARE_MULTICAST_DELEGATE_FourParams(DelegateName, Param1Type, Param2Type, Param3Type, Param4Type)
Definition DelegateCombinations.h:76
#define DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(DelegateName, Param1Type, Param1Name, Param2Type, Param2Name, Param3Type, Param3Name)
Definition DelegateCombinations.h:71
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
#define DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type, Param1Name)
Definition DelegateCombinations.h:53
ETeleportType
Definition EngineTypes.h:2401
ECollisionChannel
Definition EngineTypes.h:1088
return true
Definition ExternalRpcRegistry.cpp:601
#define X(Name, Desc)
Definition FormatStringSan.h:47
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
EComponentPhysicsStateChange
Definition PrimitiveComponent.h:220
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition ClusterUnionPhysicsProxy.h:63
Definition ImplicitObject.h:111
Definition ISpatialAcceleration.h:267
Definition ParticleHandle.h:2739
Definition CoreNet.h:300
Definition NameTypes.h:617
Definition UObjectGlobals.h:1292
Definition UnrealType.h:3087
Definition PhysScene_Chaos.h:116
Definition UObjectGlobals.h:2492
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition ObjectKey.h:228
Definition SortedMap.h:20
Definition UniquePtr.h:107
void Reset(T *InPtr=nullptr)
Definition UniquePtr.h:346
Definition ClusterUnionComponent.h:211
Chaos::FClusterUnionPhysicsProxy * GetPhysicsProxy() const
Definition ClusterUnionComponent.h:374
virtual bool ShouldDispatchWakeEvents(FName BoneName) const override
Definition ClusterUnionComponent.h:509
virtual bool CanEditSimulatePhysics() override
Definition ClusterUnionComponent.h:504
TMap< TObjectKey< UPrimitiveComponent >, FClusteredComponentData > PerComponentData
Definition ClusterUnionComponent.h:383
Chaos::FClusterUnionPhysicsProxy * GetPhysicsProxy()
Definition ClusterUnionComponent.h:375
Definition ClusterUnionReplicatedProxyComponent.h:26
Definition Object.h:95
void Transform(const InT &Input, OutT &&Output, TransformT Trans)
Definition Transform.h:66
Definition SkeletalMeshComponent.h:307
EObjectStateType
Definition ObjectState.h:10
int32 FPhysicsObjectId
Definition PhysicsObject.h:20
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition PhysicsObjectInternal.h:16
Definition GeometryParticlesfwd.h:87
Definition BodyInstance.h:320
Definition PhysicsInterfaceTypesCore.h:199
Definition ClusterUnionComponent.h:37
int32 ID
Definition ClusterUnionComponent.h:49
Chaos::FUniqueIdx ParticleID
Definition ClusterUnionComponent.h:50
bool operator!=(const FClusterUnionBoneData &Other) const
Definition ClusterUnionComponent.h:57
bool operator==(const FClusterUnionBoneData &Other) const
Definition ClusterUnionComponent.h:52
FClusterUnionBoneData(int32 InBoneId, Chaos::FUniqueIdx InParticleID)
Definition ClusterUnionComponent.h:45
friend uint32 GetTypeHash(const FClusterUnionBoneData &Data)
Definition ClusterUnionComponent.h:62
Definition ClusterUnionComponent.h:166
Definition ClusterUnionComponent.h:139
Definition ClusterUnionComponent.h:123
Definition ClusterUnionComponent.h:112
Definition ClusterUnionComponent.h:70
TArray< FClusterUnionBoneData > BonesData
Definition ClusterUnionComponent.h:93
Definition CollisionQueryParams.h:430
Definition CollisionQueryParams.h:43
Definition CollisionQueryParams.h:324
Definition EngineTypes.h:3704
Definition ExternalSpatialAccelerationPayload.h:24
Definition HitResult.h:21
Definition NavigationSystemHelpers.h:25
Definition SafePhysicsObjectHandle.h:10
Definition ObjectPtr.h:488
Definition Tuple.h:652
Definition WeakObjectPtrTemplates.h:25
Definition ClusterUnionComponent.h:288
Chaos::FUniqueIdx ParticleID
Definition ClusterUnionComponent.h:301
FMappedBoneData(Chaos::FPhysicsObjectHandle PhysicsObjectHande, Chaos::FPBDRigidParticle *RigidParticle, const Chaos::FUniqueIdx &ParticleID, const FTransform &ChildToParentTransform)
Definition ClusterUnionComponent.h:291
FTransform ChildToParentTransform
Definition ClusterUnionComponent.h:302
Definition ClusterUnionComponent.h:251
FMappedComponentKey(TObjectKey< UPrimitiveComponent > InComponentKey, UPrimitiveComponent *InComponent)
Definition ClusterUnionComponent.h:256
FMappedComponentKey()
Definition ClusterUnionComponent.h:252
FMappedComponentKey(UPrimitiveComponent *InComponent)
Definition ClusterUnionComponent.h:262
TObjectKey< UPrimitiveComponent > ComponentKey
Definition ClusterUnionComponent.h:283
friend uint32 GetTypeHash(const FMappedComponentKey &InMappedComponentKey)
Definition ClusterUnionComponent.h:278
UPrimitiveComponent * ComponentPtr
Definition ClusterUnionComponent.h:284
bool operator<(const FMappedComponentKey &Other) const
Definition ClusterUnionComponent.h:268
bool operator==(const FMappedComponentKey &Other) const
Definition ClusterUnionComponent.h:273
Definition BoxSphereBounds.h:25