19 class FPBDCollisionConstraints;
84 const int32 ClusterGroupIndex,
91 UE_DEPRECATED(5.4,
"Use CreateClusterParticle with FImplicitObjectPtr instead")
93 const
int32 ClusterGroupIndex,
415 UE_DEPRECATED(5.4,
"No longer expose publicly - now return empty set")
426 template<
typename TFilter>
431 constexpr bool bHasFilter = std::is_invocable_r_v < bool, TFilter, const TConnectivityEdge<FReal>&>;
433 for (
int32 EdgeIndex = Edges.
Num() - 1; EdgeIndex >= 0; --EdgeIndex)
447 check(Sibling !=
nullptr);
469 template<
typename ParticleHandleTypeA,
typename ParticleHandleTypeB>
478 ensureMsgf(
false,
TEXT(
"CreateNodeConnection asked to connect a null particle, ignoring connection."));
583 UE_DEPRECATED(5.4,
"This should be handled for you properly in AddParticlesToCluster and RemoveParticlesFromCluster. There is no need for an extra function call.")
593 uint32 TotalProcessedClusters = 0;
594 uint32 TotalReleasedChildren = 0;
595 uint32 FrameProcessedClusters = 0;
596 uint32 FrameReleasedChildren = 0;
615 bool MCollisionImpulseArrayDirty;
618 bool DoGenerateBreakingData;
626 struct FMomentumRestoringData
635 FReal MClusterConnectionFactor;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ESPMode
Definition SharedPointerFwd.h:12
Definition ClusterUnionManager.h:159
Definition ImplicitObject.h:111
Definition PBDCollisionConstraints.h:49
Definition PBDRigidsEvolutionGBF.h:51
Definition PBDRigidClustering.h:56
FClusterUnionManager & GetClusterUnionManager()
Definition PBDRigidClustering.h:412
FPBDRigidsEvolutionGBF FRigidEvolution
Definition PBDRigidClustering.h:59
const TArrayCollectionArray< TArray< TConnectivityEdge< FReal > > > & GetConnectivityEdges() const
Definition PBDRigidClustering.h:323
void ResetAllClusterBreakings()
Definition PBDRigidClustering.h:309
const TArrayCollectionArray< FRealSingle > & GetStrainArray() const
Definition PBDRigidClustering.h:277
const TSet< Chaos::FPBDRigidClusteredParticleHandle * > & GetTopLevelClusterParentsStrained() const
Definition PBDRigidClustering.h:416
const FClusterUnionManager & GetClusterUnionManager() const
Definition PBDRigidClustering.h:413
CHAOS_API void SetExternalStrain(FPBDRigidClusteredParticleHandle *Particle, FRealSingle Strain)
Definition PBDRigidClustering.cpp:1055
CHAOS_API ~FRigidClustering()
Definition PBDRigidClustering.cpp:207
CHAOS_API void RemoveChildFromParentAndChildrenArray(FPBDRigidParticleHandle *Child, FPBDRigidClusteredParticleHandle *ClusteredParent)
Definition PBDRigidClustering.cpp:960
void ResetAllClusterCrumblings()
Definition PBDRigidClustering.h:317
const TArrayCollectionArray< FRigidClusteredFlags > & GetRigidClusteredFlagsArray() const
Definition PBDRigidClustering.h:262
static CHAOS_API bool ShouldUnionsHaveCollisionParticles()
Definition PBDRigidClustering.cpp:550
CHAOS_API void SendBreakingEvent(FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bFromCrumble)
Definition PBDRigidClustering.cpp:780
CHAOS_API FPBDRigidParticleHandle * GetActiveClusterIndex(FPBDRigidParticleHandle *Child)
Definition PBDRigidClustering.cpp:2048
const FRigidEvolution & GetEvolution() const
Definition PBDRigidClustering.h:397
CHAOS_API void RemoveChildFromParent(FPBDRigidParticleHandle *Child, FPBDRigidClusteredParticleHandle *ClusteredParent)
Definition PBDRigidClustering.cpp:910
FPBDRigidClusteredParticleHandle * FClusterHandle
Definition PBDRigidClustering.h:62
CHAOS_API void SendCrumblingEvent(FPBDRigidClusteredParticleHandle *ClusteredParticle)
Definition PBDRigidClustering.cpp:807
CHAOS_API bool BreakClustersByProxy(const IPhysicsProxyBase *Proxy)
Definition PBDRigidClustering.cpp:2600
CHAOS_API void ClearConnectionGraph(FPBDRigidClusteredParticleHandle *Parent)
Definition PBDRigidClustering.cpp:2196
CHAOS_API void AdvanceClustering(const FReal dt, FPBDCollisionConstraints &CollisionRule)
Definition PBDRigidClustering.cpp:1672
const TArrayCollectionArray< FRigidTransform3 > & GetChildToParentMap() const
Definition PBDRigidClustering.h:268
const FChaosSolverDestructionSettings & GetDestructionSettings() const
Definition PBDRigidClustering.h:505
CHAOS_API TSet< FPBDRigidParticleHandle * > HandleConnectivityOnReleaseClusterParticle(FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bCreateNewClusters)
Definition PBDRigidClustering.cpp:1352
CHAOS_API void ComputeStrainFromCollision(const FPBDCollisionConstraints &CollisionRule, const FReal Dt)
Definition PBDRigidClustering.cpp:2226
CHAOS_API void RemoveNodeConnections(FPBDRigidParticleHandle *Child)
Definition PBDRigidClustering.cpp:3079
TArrayCollectionArray< int32 > & GetClusterGroupIndexArray()
Definition PBDRigidClustering.h:295
void SetClusterUnionConnectionType(FClusterCreationParameters::EConnectionMethod ClusterConnectionType)
Definition PBDRigidClustering.h:376
CHAOS_API void UpdateTopLevelParticle(FPBDRigidClusteredParticleHandle *Particle)
Definition PBDRigidClustering.cpp:1061
CHAOS_API void ResetCollisionImpulseArray()
Definition PBDRigidClustering.cpp:2429
CHAOS_API void UpdateConnectivityGraphUsingDelaunayTriangulation(const TArray< FPBDRigidParticleHandle * > &Particles, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
Definition PBDRigidClustering.cpp:3021
void SetClusterConnectionFactor(FReal ClusterConnectionFactorIn)
Definition PBDRigidClustering.h:375
CHAOS_API void FixConnectivityGraphUsingDelaunayTriangulation(const TArray< FPBDRigidParticleHandle * > &Particles, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
Definition PBDRigidClustering.cpp:2802
const TSet< Chaos::FPBDRigidClusteredParticleHandle * > & GetTopLevelClusterParents() const
Definition PBDRigidClustering.h:393
CHAOS_API void UpdateClusterParticlePropertiesFromChildren(FPBDRigidClusteredParticleHandle *Cluster, const FRigidHandleArray &Children, const TMap< FPBDRigidParticleHandle *, FPBDRigidParticleHandle * > &ChildToParentMap)
Definition PBDRigidClustering.cpp:516
void SetGenerateClusterBreaking(bool DoGenerate)
Definition PBDRigidClustering.h:307
FRigidEvolution & GetEvolution()
Definition PBDRigidClustering.h:396
void CreateNodeConnection(ParticleHandleTypeA *A, ParticleHandleTypeB *B)
Definition PBDRigidClustering.h:470
void ThrottleReleasedParticlesIfNecessary(TSet< FPBDRigidParticleHandle * > &Particles)
Definition PBDRigidClustering.cpp:3099
void RemoveFilteredNodeConnections(FPBDRigidClusteredParticleHandle *ClusteredChild, TFilter &&Filter)
Definition PBDRigidClustering.h:427
TMap< FClusterHandle, FRigidHandleArray > FClusterMap
Definition PBDRigidClustering.h:63
CHAOS_API void AddParticlesToCluster(FPBDRigidClusteredParticleHandle *Cluster, const TArray< FPBDRigidParticleHandle * > &InChildren, const TMap< FPBDRigidParticleHandle *, FPBDRigidParticleHandle * > &ChildToParentMap)
Definition PBDRigidClustering.cpp:335
TArray< FRigidHandle > FRigidHandleArray
Definition PBDRigidClustering.h:61
CHAOS_API void BuildConvexOptimizer(FPBDRigidClusteredParticleHandle *Particle)
Definition PBDRigidClustering.cpp:394
CHAOS_API FPBDRigidParticleHandle * FindClosestChild(const FPBDRigidClusteredParticleHandle *ClusteredParticle, const FVec3 &WorldLocation) const
Definition PBDRigidClustering.cpp:2059
TArrayCollectionArray< FRealSingle > & GetStrainArray()
Definition PBDRigidClustering.h:276
CHAOS_API bool BreakCluster(FPBDRigidClusteredParticleHandle *ClusteredParticle)
Definition PBDRigidClustering.cpp:2569
FClusterMap & GetChildrenMap()
Definition PBDRigidClustering.h:285
CHAOS_API void TrackBreakingCollision(FPBDRigidClusteredParticleHandle *ClusteredParticle)
Definition PBDRigidClustering.cpp:701
const TArrayCollectionArray< ClusterId > & GetClusterIdsArray() const
Definition PBDRigidClustering.h:256
CHAOS_API void UnionClusterGroups()
Definition PBDRigidClustering.cpp:672
CHAOS_API Chaos::FPBDRigidClusteredParticleHandle * CreateClusterParticleFromClusterChildren(TArray< FPBDRigidParticleHandle * > &&Children, FPBDRigidClusteredParticleHandle *Parent, const FRigidTransform3 &ClusterWorldTM, const FClusterCreationParameters &Parameters)
Definition PBDRigidClustering.cpp:557
CHAOS_API void UpdateConnectivityGraphUsingPointImplicit(const TArray< FPBDRigidParticleHandle * > &Particles, FReal CollisionThicknessPercent, const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
Definition PBDRigidClustering.cpp:2719
CHAOS_API void DisableCluster(FPBDRigidClusteredParticleHandle *ClusteredParticle)
Definition PBDRigidClustering.cpp:2441
TFunction< void(FRigidClustering &, FRigidHandle)> FVisitorFunction
Definition PBDRigidClustering.h:64
CHAOS_API void RemoveFromMomentumRestoringStructures(const FPBDRigidParticleHandle *ParticleToRemove)
Definition PBDRigidClustering.cpp:775
CHAOS_API TArray< FPBDRigidParticleHandle * > CreateClustersFromNewIslands(TArray< FParticleIsland > &Islands, FPBDRigidClusteredParticleHandle *ClusteredParent)
Definition PBDRigidClustering.cpp:975
CHAOS_API void RemoveParticlesFromCluster(FPBDRigidClusteredParticleHandle *Cluster, const TArray< FPBDRigidParticleHandle * > &InChildren)
Definition PBDRigidClustering.cpp:448
void DisableParticle(FPBDRigidParticleHandle *ParticleToDisable, bool bRemoveFromChildrenMap=true)
Definition PBDRigidClustering.cpp:2449
CHAOS_API void ApplyStrainModifiers(const TArray< FPBDRigidClusteredParticleHandle * > &StrainedParticles)
Definition PBDRigidClustering.cpp:2470
CHAOS_API TSet< FPBDRigidParticleHandle * > DeactivateClusterParticle(FPBDRigidClusteredParticleHandle *ClusteredParticle)
Definition PBDRigidClustering.cpp:680
CHAOS_API void Visitor(FClusterHandle Cluster, FVisitorFunction Function)
Definition PBDRigidClustering.cpp:2004
CHAOS_API TSet< FPBDRigidParticleHandle * > ReleaseClusterParticlesNoInternalCluster(FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bForceRelease=false)
Definition PBDRigidClustering.cpp:1095
CHAOS_API FPBDRigidClusteredParticleHandle * DestroyClusterParticle(FPBDRigidClusteredParticleHandle *ClusteredParticle, const FClusterDestoryParameters &Parameters=FClusterDestoryParameters())
Definition PBDRigidClustering.cpp:2483
CHAOS_API void BreakingModel()
Definition PBDRigidClustering.cpp:1915
CHAOS_API void ResetAllEvents()
Definition PBDRigidClustering.cpp:694
CHAOS_API void UpdateConnectivityGraphUsingDelaunayTriangulationWithBoundsOverlaps(const TArray< FPBDRigidParticleHandle * > &Particles, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
Definition PBDRigidClustering.cpp:3053
static CHAOS_API TArray< FPBDRigidParticleHandle * > FindParticlesWithinRadius(const TArray< FPBDRigidParticleHandle * > &Particles, const FVec3 &WorldLocation, FReal Radius, bool bAlwaysReturnClosest)
Definition PBDRigidClustering.cpp:2096
CHAOS_API Chaos::FPBDRigidClusteredParticleHandle * CreateClusterParticle(const int32 ClusterGroupIndex, TArray< Chaos::FPBDRigidParticleHandle * > &&Children, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const Chaos::FImplicitObjectPtr &ProxyGeometry=nullptr, const FRigidTransform3 *ForceMassOrientation=nullptr, const FUniqueIdx *ExistingIndex=nullptr)
Definition PBDRigidClustering.cpp:211
CHAOS_API TArray< FParticleIsland > FindIslandsInChildren(const FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bTraverseInterclusterEdges)
Definition PBDRigidClustering.cpp:839
FClusterCreationParameters::EConnectionMethod GetClusterUnionConnectionType() const
Definition PBDRigidClustering.h:377
CHAOS_API void CleanupInternalClustersForProxies(TArrayView< IPhysicsProxyBase * > Proxies)
Definition PBDRigidClustering.cpp:1900
CHAOS_API TArray< FPBDRigidParticleHandle * > FindChildrenWithinRadius(const FPBDRigidClusteredParticleHandle *ClusteredParticle, const FVec3 &WorldLocation, FReal Radius, bool bAlwaysReturnClosest) const
Definition PBDRigidClustering.cpp:2086
TArrayCollectionArray< ClusterId > & GetClusterIdsArray()
Definition PBDRigidClustering.h:255
TSet< Chaos::FPBDRigidClusteredParticleHandle * > & GetTopLevelClusterParents()
Definition PBDRigidClustering.h:394
CHAOS_API void ForceReleaseChildParticleAndParents(FPBDRigidClusteredParticleHandle *ChildClusteredParticle, bool bTriggerBreakEvents)
Definition PBDRigidClustering.cpp:1624
const TArray< FBreakingData > & GetAllClusterBreakings() const
Definition PBDRigidClustering.h:306
bool ShouldThrottleParticleRelease() const
Definition PBDRigidClustering.cpp:3094
static CHAOS_API FPBDRigidParticleHandle * FindClosestParticle(const TArray< FPBDRigidParticleHandle * > &Particles, const FVec3 &WorldLocation)
Definition PBDRigidClustering.cpp:2068
CHAOS_API TSet< FPBDRigidParticleHandle * > ReleaseClusterParticles(FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bForceRelease=false)
Definition PBDRigidClustering.cpp:1074
FPBDRigidParticleHandle * FRigidHandle
Definition PBDRigidClustering.h:60
bool GetDoGenerateBreakingData() const
Definition PBDRigidClustering.h:308
CHAOS_API TSet< FPBDRigidParticleHandle * > ReleaseClusterParticlesImpl(FPBDRigidClusteredParticleHandle *ClusteredParticle, bool bForceRelease, bool bCreateNewClusters)
Definition PBDRigidClustering.cpp:1109
const TArray< FCrumblingData > & GetAllClusterCrumblings() const
Definition PBDRigidClustering.h:316
CHAOS_API void SetInternalStrain(FPBDRigidClusteredParticleHandle *Particle, FRealSingle Strain)
Definition PBDRigidClustering.cpp:1049
void ApplySettings(const FChaosSolverConfiguration &Settings)
Definition PBDRigidClustering.cpp:3129
CHAOS_API void GenerateConnectionGraph(const TArray< FPBDRigidParticleHandle * > &Particles, const FClusterCreationParameters &Parameters=FClusterCreationParameters(), const TSet< FPBDRigidParticleHandle * > *FromParticles=nullptr, const TSet< FPBDRigidParticleHandle * > *ToParticles=nullptr)
Definition PBDRigidClustering.cpp:2131
CHAOS_API void RestoreBreakingMomentum()
Definition PBDRigidClustering.cpp:762
const FClusterMap & GetChildrenMap() const
Definition PBDRigidClustering.h:286
Definition ArrayCollectionArray.h:15
const TPBDRigidClusteredParticleHandleImp< T, d, bPersistent > * CastToClustered() const
Definition ParticleHandle.h:1703
Definition PBDRigidClusteredParticles.h:146
const auto & ClusterIdsArray() const
Definition PBDRigidClusteredParticles.h:222
const auto & ClusterGroupIndexArray() const
Definition PBDRigidClusteredParticles.h:231
const auto & ConnectivityEdgesArray() const
Definition PBDRigidClusteredParticles.h:220
const auto & StrainsArray() const
Definition PBDRigidClusteredParticles.h:228
const FRigidClusteredFlags & RigidClusteredFlags(int32 Idx) const
Definition PBDRigidClusteredParticles.h:217
const auto & ChildToParentArray() const
Definition PBDRigidClusteredParticles.h:225
Definition ParticleHandle.h:987
Definition PhysicsProxyBase.h:97
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_FORCEINLINE_HINT void RemoveAtSwap(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2185
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
UE_FORCEINLINE_HINT void Shrink()
Definition Array.h:1278
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
float FRealSingle
Definition Real.h:14
Definition ExternalCollisionData.h:213
Definition ClusterCreationParameters.h:14
EConnectionMethod
Definition ClusterCreationParameters.h:16
Definition PBDRigidClustering.h:21
bool bReturnInternalOnly
Definition PBDRigidClustering.h:22
Definition ExternalCollisionData.h:248
Definition GeometryParticlesfwd.h:87
Definition PBDRigidClusteredParticles.h:48
Definition ChaosSolverConfiguration.h:52
Definition ChaosSolverConfiguration.h:22
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79