4#include "Containers/Queue.h"
28template<
class T,
int d>
76template<
class T,
int d>
98 , MLinearImpulseVelocity(
MoveTemp(
Other.MLinearImpulseVelocity))
99 , MAngularImpulseVelocity(
MoveTemp(
Other.MAngularImpulseVelocity))
111 , MInitialOverlapDepenetrationVelocity(
MoveTemp(
Other.MInitialOverlapDepenetrationVelocity))
112 , MSleepThresholdMultiplier(
MoveTemp(
Other.MSleepThresholdMultiplier))
117 , MParticleIterationCounts(
MoveTemp(
Other.MParticleIterationCounts))
291 return FString::Printf(
TEXT(
"%s, MAcceleration:%s, MAngularAcceleration:%s, MLinearImpulseVelocity:%s, MAngularImpulseVelocity:%s, MI:%s, MInvI:%s, MM:%f, MInvM:%f, MCenterOfMass:%s, MRotationOfMass:%s, MCollisionParticles(num):%d, MCollisionGroup:%d, MDisabled:%d, MSleeping:%d"),
305 FLegacyData LegacyData;
310 LegacyData.CopyFromCoreData(CoreData);
318 Ar << MRotationOfMass;
321 Ar << MAcceleration << MAngularAcceleration << MLinearImpulseVelocity << MAngularImpulseVelocity;
334 MI.Add(
IArray[Idx].GetDiagonal());
343 MInvIConditioning.Resize(MInvI.Num());
354 Ar << MLinearEtherDrag << MAngularEtherDrag;
357 Ar << MCollisionParticles << LegacyData.MCollisionGroup <<
LegacyIslandIndex << LegacyData.MDisabled << LegacyData.MObjectState << MSleepType;
363 LegacyData.CopyToCoreData(CoreData);
382 MCollisionGroup.
Resize(Source.Num());
383 MObjectState.
Resize(Source.Num());
384 MDisabled.
Resize(Source.Num());
388 MCollisionGroup[
Index] = Source[
Index].CollisionGroup;
389 MObjectState[
Index] = Source[
Index].ObjectState;
396 Dest.Resize(MCollisionGroup.
Num());
400 Dest[
Index].CollisionGroup = MCollisionGroup[
Index];
401 Dest[
Index].ObjectState = MObjectState[
Index];
426 TArrayCollectionArray<FRealSingle> MInitialOverlapDepenetrationVelocity;
427 TArrayCollectionArray<FRealSingle> MSleepThresholdMultiplier;
429 TArrayCollectionArray<ESleepType> MSleepType;
430 TArrayCollectionArray<int8> MSleepCounter;
431 TArrayCollectionArray<int8> MDisableCounter;
440template <
typename T,
int d>
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ChaosArchive.h:167
Enable/Disable the features on a particle These flags are externally controlled and should not be cha...
Definition RigidParticleControlFlags.h:18
Transient flags for indicating somethings needs to be updated based on a change to the particle Typic...
Definition RigidParticleControlFlags.h:121
Definition IterationSettings.h:19
Definition ArrayCollectionArray.h:15
void Resize(const int Num) override
Definition ArrayCollectionArray.h:79
int32 AddArray(TArrayCollectionArrayBase *Array)
Definition ArrayCollection.h:36
uint32 Size() const
Definition ArrayCollection.h:66
Definition ParticleHandle.h:436
bool Sleeping() const
Definition ParticleHandle.h:717
Definition GeometryParticles.h:152
Definition KinematicGeometryParticles.h:13
virtual void Serialize(FChaosArchive &Ar) override
Definition KinematicGeometryParticles.h:67
FString ToString(int32 index) const
Definition KinematicGeometryParticles.h:55
Definition Particles.h:32
Definition RigidParticles.h:78
void RegisterArrays()
Definition RigidParticles.h:122
FORCEINLINE TVec3< FRealSingle > & InvIConditioning(const int32 Index)
Definition RigidParticles.h:181
FORCEINLINE TVector< T, d > & VSmooth(const int32 Index)
Definition RigidParticles.h:157
FORCEINLINE bool & DisabledRef(const int32 Index)
Definition RigidParticles.h:232
FORCEINLINE const TVector< T, d > & LinearImpulseVelocity(const int32 Index) const
Definition RigidParticles.h:168
FORCEINLINE const TVector< T, d > & WSmooth(const int32 Index) const
Definition RigidParticles.h:159
FORCEINLINE uint32 CollisionConstraintFlags(const int32 Index) const
Definition RigidParticles.h:228
FORCEINLINE ESleepType SleepType(const int32 Index) const
Definition RigidParticles.h:244
FORCEINLINE void SetDisabledLowLevel(const int32 Index, bool InDisabled)
Definition RigidParticles.h:236
FORCEINLINE const TVec3< FRealSingle > & InvI(const int32 Index) const
Definition RigidParticles.h:177
FORCEINLINE T & M(const int32 Index)
Definition RigidParticles.h:184
TRigidParticles(TRigidParticles< T, d > &&Other)
Definition RigidParticles.h:91
FORCEINLINE const TRotation< T, d > & RotationOfMass(const int32 Index) const
Definition RigidParticles.h:192
FORCEINLINE const T & MaxLinearSpeedSq(const int32 index) const
Definition RigidParticles.h:201
virtual void Serialize(FChaosArchive &Ar) override
Definition RigidParticles.h:297
FORCEINLINE int8 & DisableCounter(const int32 Index)
Definition RigidParticles.h:251
FORCEINLINE const T M(const int32 Index) const
Definition RigidParticles.h:183
FORCEINLINE FRealSingle & InitialOverlapDepenetrationVelocity(const int32 index)
Definition RigidParticles.h:208
FORCEINLINE T & LinearEtherDrag(const int32 index)
Definition RigidParticles.h:196
FORCEINLINE const T & MaxAngularSpeedSq(const int32 index) const
Definition RigidParticles.h:204
FORCEINLINE TVector< T, d > & WSmooth(const int32 Index)
Definition RigidParticles.h:160
FORCEINLINE int32 & CollisionGroup(const int32 Index)
Definition RigidParticles.h:222
FORCEINLINE TUniquePtr< TBVHParticles< T, d > > & CollisionParticles(const int32 Index)
Definition RigidParticles.h:219
FORCEINLINE void AddSleepData(TGeometryParticleHandle< T, d > *Particle, bool Sleeping)
Definition RigidParticles.h:258
FORCEINLINE void SetCollisionConstraintFlags(const int32 Index, const uint32 Flags)
Definition RigidParticles.h:227
FORCEINLINE const bool Sleeping(const int32 Index) const
Definition RigidParticles.h:284
FORCEINLINE int8 SleepCounter(const int32 Index) const
Definition RigidParticles.h:247
void ClearSleepData()
Definition RigidParticles.h:268
FORCEINLINE const T InvM(const int32 Index) const
Definition RigidParticles.h:186
FORCEINLINE FRigidParticleControlFlags & ControlFlags(const int32 Index)
Definition RigidParticles.h:239
FORCEINLINE void AddCollisionConstraintFlag(const ECollisionConstraintFlags Flag, const int32 Index)
Definition RigidParticles.h:225
FORCEINLINE const EObjectStateType ObjectState(const int32 Index) const
Definition RigidParticles.h:276
FORCEINLINE ESleepType & SleepType(const int32 Index)
Definition RigidParticles.h:245
FORCEINLINE TVec3< FRealSingle > & I(const int32 Index)
Definition RigidParticles.h:175
FORCEINLINE FString ToString(int32 Index) const
Definition RigidParticles.h:288
void SetCollisionParticles(const int32 Index, TParticles< T, d > &&Particles)
Definition RigidParticles.cpp:18
FORCEINLINE T & AngularEtherDrag(const int32 index)
Definition RigidParticles.h:199
FORCEINLINE const T & LinearEtherDrag(const int32 index) const
Definition RigidParticles.h:195
FORCEINLINE const bool Disabled(const int32 Index) const
Definition RigidParticles.h:230
TRigidParticles(const TRigidParticles< T, d > &Other)=delete
FORCEINLINE bool HasCollisionConstraintFlag(const ECollisionConstraintFlags Flag, const int32 Index) const
Definition RigidParticles.h:224
FORCEINLINE const TVector< T, d > & VSmooth(const int32 Index) const
Definition RigidParticles.h:156
FORCEINLINE EObjectStateType & PreObjectState(const int32 Index)
Definition RigidParticles.h:280
FORCEINLINE TVector< T, d > & AngularImpulseVelocity(const int32 Index)
Definition RigidParticles.h:172
FORCEINLINE const T & AngularEtherDrag(const int32 index) const
Definition RigidParticles.h:198
FORCEINLINE const TVector< T, d > & Acceleration(const int32 Index) const
Definition RigidParticles.h:165
FORCEINLINE TVector< T, d > & CenterOfMass(const int32 Index)
Definition RigidParticles.h:190
FORCEINLINE FRealSingle & SleepThresholdMultiplier(const int32 Index)
Definition RigidParticles.h:211
FORCEINLINE Private::FIterationSettings & ParticleIterationCounts(const int32 Index)
Definition RigidParticles.h:254
FORCEINLINE const TVector< T, d > & AngularAcceleration(const int32 Index) const
Definition RigidParticles.h:162
FORCEINLINE const FRealSingle & InitialOverlapDepenetrationVelocity(const int32 index) const
Definition RigidParticles.h:207
FORCEINLINE int32 CollisionParticlesSize(int32 Index) const
Definition RigidParticles.h:213
FORCEINLINE const EObjectStateType PreObjectState(const int32 Index) const
Definition RigidParticles.h:279
FORCEINLINE int8 DisableCounter(const int32 Index) const
Definition RigidParticles.h:250
FORCEINLINE const int32 CollisionGroup(const int32 Index) const
Definition RigidParticles.h:221
virtual ~TRigidParticles()
Definition RigidParticles.h:153
FORCEINLINE const TVec3< FRealSingle > & InvIConditioning(const int32 Index) const
Definition RigidParticles.h:180
TRigidParticles()
Definition RigidParticles.h:84
FORCEINLINE const TVector< T, d > & CenterOfMass(const int32 Index) const
Definition RigidParticles.h:189
void CollisionParticlesInitIfNeeded(const int32 Index)
Definition RigidParticles.cpp:9
FORCEINLINE const TUniquePtr< TBVHParticles< T, d > > & CollisionParticles(const int32 Index) const
Definition RigidParticles.h:218
UE_DEPRECATED(5.3, "No longer supported") int32 &IslandIndex(const int32 Index)
Definition RigidParticles.h:369
FORCEINLINE const FRigidParticleTransientFlags & TransientFlags(const int32 Index) const
Definition RigidParticles.h:241
FORCEINLINE void RemoveCollisionConstraintFlag(const ECollisionConstraintFlags Flag, const int32 Index)
Definition RigidParticles.h:226
FORCEINLINE TVector< T, d > & AngularAcceleration(const int32 Index)
Definition RigidParticles.h:163
UE_DEPRECATED(5.3, "No longer supported") const int32 IslandIndex(const int32 Index) const
Definition RigidParticles.h:368
FORCEINLINE const bool HasInfiniteMass(const int32 Index) const
Definition RigidParticles.h:286
FORCEINLINE T & InvM(const int32 Index)
Definition RigidParticles.h:187
FORCEINLINE TArray< TSleepData< T, d > > & GetSleepData()
Definition RigidParticles.h:257
FORCEINLINE TVector< T, d > & LinearImpulseVelocity(const int32 Index)
Definition RigidParticles.h:169
FORCEINLINE const bool Dynamic(const int32 Index) const
Definition RigidParticles.h:282
FORCEINLINE const FRealSingle & SleepThresholdMultiplier(const int32 Index) const
Definition RigidParticles.h:210
FORCEINLINE FRigidParticleTransientFlags & TransientFlags(const int32 Index)
Definition RigidParticles.h:242
FORCEINLINE TVec3< FRealSingle > & InvI(const int32 Index)
Definition RigidParticles.h:178
FORCEINLINE Private::FIterationSettings ParticleIterationCounts(const int32 Index) const
Definition RigidParticles.h:253
FORCEINLINE const FRigidParticleControlFlags & ControlFlags(const int32 Index) const
Definition RigidParticles.h:238
FORCEINLINE const TVector< T, d > & AngularImpulseVelocity(const int32 Index) const
Definition RigidParticles.h:171
FORCEINLINE FRWLock & GetSleepDataLock()
Definition RigidParticles.h:274
FORCEINLINE EObjectStateType & ObjectState(const int32 Index)
Definition RigidParticles.h:277
FORCEINLINE int8 & SleepCounter(const int32 Index)
Definition RigidParticles.h:248
FORCEINLINE T & MaxAngularSpeedSq(const int32 index)
Definition RigidParticles.h:205
FORCEINLINE TVector< T, d > & Acceleration(const int32 Index)
Definition RigidParticles.h:166
FORCEINLINE TRotation< T, d > & RotationOfMass(const int32 Index)
Definition RigidParticles.h:193
FORCEINLINE T & MaxLinearSpeedSq(const int32 index)
Definition RigidParticles.h:202
FORCEINLINE const TVec3< FRealSingle > & I(const int32 Index) const
Definition RigidParticles.h:174
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
@ X
Definition SimulationModuleBase.h:152
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
ECollisionConstraintFlags
Flags for user-control over per-particle collision behaviour.
Definition CollisionConstraintFlags.h:22
EObjectStateType
Definition ObjectState.h:10
constexpr int8 NumBitsNeeded(const int8 MaxValue)
Definition RigidParticles.h:48
float FRealSingle
Definition Real.h:14
@ Disabled
Definition SimulationModuleBase.h:138
ESleepType
Definition RigidParticles.h:23
constexpr int8 LowBitsMask(const int8 NumBits)
Definition RigidParticles.h:54
U16 Index
Definition radfft.cpp:71
Definition RigidParticles.h:66
FRigidParticleControlFlags ControlFlags
Definition RigidParticles.h:69
EObjectStateType ObjectState
Definition RigidParticles.h:71
bool bDisabled
Definition RigidParticles.h:73
uint32 CollisionConstraintFlags
Definition RigidParticles.h:68
FRigidParticleTransientFlags TransientFlags
Definition RigidParticles.h:70
int32 CollisionGroup
Definition RigidParticles.h:67
EObjectStateType PreObjectState
Definition RigidParticles.h:72
Definition RigidParticles.h:30
TSleepData(TGeometryParticleHandle< T, d > *InParticle, bool InSleeping)
Definition RigidParticles.h:36
bool Sleeping
Definition RigidParticles.h:43
TSleepData()
Definition RigidParticles.h:31
TGeometryParticleHandle< T, d > * Particle
Definition RigidParticles.h:42
CORE_API static const FGuid GUID
Definition ExternalPhysicsCustomObjectVersion.h:144
@ AddDampingToRigids
Definition ExternalPhysicsCustomObjectVersion.h:85
@ KinematicCentersOfMass
Definition ExternalPhysicsCustomObjectVersion.h:76
CORE_API static const FGuid GUID
Definition FortniteMainBranchObjectVersion.h:21
CORE_API static const FGuid GUID
Definition UE5ReleaseStreamObjectVersion.h:22