UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ParticleDirtyFlags.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Chaos/Core.h"
8#include "Chaos/Box.h"
9#include "Chaos/Particles.h"
26
27#ifndef CHAOS_DEBUG_NAME
28#define CHAOS_DEBUG_NAME 0
29#endif
30
31class FName;
32
33namespace Chaos
34{
35
37{
38 int32 GlobalID = INDEX_NONE; //Set by global ID system
39 int32 LocalID = INDEX_NONE; //Set by local client. This can only be used in cases where the LocalID will be set in the same way (for example we always spawn N client only particles)
40
41 bool operator<(const FParticleID& Other) const
42 {
43 if (GlobalID == Other.GlobalID)
44 {
45 return LocalID < Other.LocalID;
46 }
47 return GlobalID < Other.GlobalID;
48 }
49
50 bool operator==(const FParticleID& Other) const
51 {
52 return GlobalID == Other.GlobalID && LocalID == Other.LocalID;
53 }
54};
55
56enum class EResimType: uint8;
57enum class ESleepType: uint8;
58
60{
61public:
63 {
65
66 if (Ar.CustomVer(FFortniteReleaseBranchCustomObjectVersion::GUID) >= FFortniteReleaseBranchCustomObjectVersion::SinglePrecisonParticleData)
67 {
68 Ar << MX << MR;
69 }
70 else
71 {
73 Ar << MX << DoublePrecisionRotation;
74 MR = FRotation3f(MR);
75 }
76
77 }
78
79 template <typename TOther>
80 void CopyFrom(const TOther& Other)
81 {
82 MX = Other.GetX();
83 MR = FRotation3f(Other.GetR());
84 }
85
86 template <typename TOther>
87 bool IsEqual(const TOther& Other) const
88 {
89 return MX == Other.X() && MR == FRotation3f(Other.R());
90 }
91
93 {
94 return IsEqual(Other);
95 }
96
97 const FVec3& X() const { return MX; }
98 const FVec3& GetX() const { return MX; }
99 void SetX(const FVec3& InX){ MX = InX; }
100
101 const FRotation3 R() const { return FRotation3(MR); }
102 const FRotation3 GetR() const { return FRotation3(MR); }
103 void SetR(const FRotation3& InR) { MR = FRotation3f(InR); }
104
105private:
106 FVec3 MX;
107 FRotation3f MR;
108
109};
110
112{
113 Data.Serialize(Ar);
114 return Ar;
115}
116
118{
119public:
121 {
123
124 if (Ar.CustomVer(FFortniteReleaseBranchCustomObjectVersion::GUID) >= FFortniteReleaseBranchCustomObjectVersion::SinglePrecisonParticleData)
125 {
126 Ar << MV << MW;
127 }
128 else
129 {
130 FVec3 MVDouble(MV);
131 FVec3 MWDouble(MW);
132 Ar << MVDouble << MWDouble;
133 MV = FVec3f(MVDouble);
134 MW = FVec3f(MWDouble);
135 }
136
137 }
138
139 template <typename TOther>
140 void CopyFrom(const TOther& Other)
141 {
142 MV = Other.GetV();
143 MW = Other.GetW();
144 }
145
146 template <typename TOther>
147 bool IsEqual(const TOther& Other) const
148 {
149 return MV == FVec3f(Other.GetV()) && MW == FVec3f(Other.GetW());
150 }
151
153 {
154 return IsEqual(Other);
155 }
156
157 const FVec3 V() const { return FVec3(MV); }
158 const FVec3 GetV() const { return FVec3(MV); }
159 void SetV(const FVec3& V) { MV = FVec3f(V); }
160
161 const FVec3 W() const { return FVec3(MW); }
162 const FVec3 GetW() const { return FVec3(MW); }
163 void SetW(const FVec3& W){ MW = FVec3f(W); }
164
165private:
166 FVec3f MV;
167 FVec3f MW;
168};
169
171{
172 Data.Serialize(Ar);
173 return Ar;
174}
175
177{
178public:
180 {
182
183 if (Ar.CustomVer(FFortniteReleaseBranchCustomObjectVersion::GUID) >= FFortniteReleaseBranchCustomObjectVersion::SinglePrecisonParticleData)
184 {
185 Ar << MAcceleration;
186 Ar << MAngularAcceleration;
187 Ar << MLinearImpulseVelocity;
188 Ar << MAngularImpulseVelocity;
189 }
190 else
191 {
192 FVec3 AccelerationDouble(MAcceleration);
193 FVec3 AngularAccelerationDouble(MAngularAcceleration);
194 FVec3 LinearImpulseVelocityDouble(MLinearImpulseVelocity);
195 FVec3 AngularImpulseVelocityDouble(MAngularImpulseVelocity);
196 Ar << AccelerationDouble;
200 MAcceleration = FVec3f(AccelerationDouble);
201 MAngularAcceleration = FVec3f(AngularAccelerationDouble);
202 MLinearImpulseVelocity = FVec3f(LinearImpulseVelocityDouble);
203 MAngularImpulseVelocity = FVec3f(AngularImpulseVelocityDouble);
204 }
205 }
206
207 template <typename TOther>
208 void CopyFrom(const TOther& Other)
209 {
210 MAcceleration = Other.Acceleration();
211 MAngularAcceleration = Other.AngularAcceleration();
212 MLinearImpulseVelocity = Other.LinearImpulseVelocity();
213 MAngularImpulseVelocity = Other.AngularImpulseVelocity();
214 }
215
216 template <typename TOther>
217 bool IsEqual(const TOther& Other) const
218 {
219 return Acceleration() == Other.Acceleration()
220 && AngularAcceleration() == Other.AngularAcceleration()
221 && LinearImpulseVelocity() == Other.LinearImpulseVelocity()
222 && AngularImpulseVelocity() == Other.AngularImpulseVelocity();
223 }
224
226 {
227 return IsEqual(Other);
228 }
229
230 FVec3 Acceleration() const { return FVec3(MAcceleration); }
231 void SetAcceleration(const FVec3& Acceleration){ MAcceleration = FVec3f(Acceleration); }
232
233 FVec3 AngularAcceleration() const { return FVec3(MAngularAcceleration); }
235
236 FVec3 LinearImpulseVelocity() const { return FVec3(MLinearImpulseVelocity); }
238
239 FVec3 AngularImpulseVelocity() const { return FVec3(MAngularImpulseVelocity); }
241
243 {
244 FParticleDynamics Result;
245 Result.MAcceleration = FVec3(0);
246 Result.MAngularAcceleration = FVec3(0);
247 Result.MLinearImpulseVelocity = FVec3(0);
248 Result.MAngularImpulseVelocity = FVec3(0);
249
250 return Result;
251 }
252
253private:
254 FVec3f MAcceleration;
255 FVec3f MAngularAcceleration;
256 FVec3f MLinearImpulseVelocity;
257 FVec3f MAngularImpulseVelocity;
258
259};
260
262
264{
265 FProxyBasePair ParticleProxies = { nullptr, nullptr };
266};
267
269{
271};
272
273struct FPhysicsObject;
275
277{
278 FPhysicsObjectPair PhysicsBodies = { nullptr, nullptr };
279};
280
285
287{
288 Data.Serialize(Ar);
289 return Ar;
290}
291
293{
294public:
296 {
297 Ar << MCenterOfMass;
298 Ar << MRotationOfMass;
299 Ar << MI;
300 Ar << MInvI;
301 Ar << MM;
302 Ar << MInvM;
303 }
304
305 template <typename TOther>
306 void CopyFrom(const TOther& Other)
307 {
308 MCenterOfMass = Other.CenterOfMass();
309 MRotationOfMass = Other.RotationOfMass();
310 MI = Other.I();
311 MInvI = Other.InvI();
312 MM = Other.M();
313 MInvM = Other.InvM();
314 }
315
316 template <typename TOther>
317 bool IsEqual(const TOther& Other) const
318 {
319 return CenterOfMass() == Other.CenterOfMass()
320 && RotationOfMass() == Other.RotationOfMass()
321 && I() == Other.I()
322 && InvI() == Other.InvI()
323 && M() == Other.M()
324 && InvM() == Other.InvM();
325 }
326
328 {
329 return IsEqual(Other);
330 }
331
332 const FVec3& CenterOfMass() const { return MCenterOfMass; }
333 void SetCenterOfMass(const FVec3& InCenterOfMass){ MCenterOfMass = InCenterOfMass; }
334
335 const FRotation3& RotationOfMass() const { return MRotationOfMass; }
337
338 const TVec3<FRealSingle>& I() const { return MI; }
339 void SetI(const TVec3<FRealSingle>& InI){ MI = InI; }
340
341 const TVec3<FRealSingle>& InvI() const { return MInvI; }
342 void SetInvI(const TVec3<FRealSingle>& InInvI){ MInvI = InInvI; }
343
344 FReal M() const { return MM; }
345 void SetM(FReal InM){ MM = InM; }
346
347 FReal InvM() const { return MInvM; }
348 void SetInvM(FReal InInvM){ MInvM = InInvM; }
349
350private:
351 FVec3 MCenterOfMass;
352 FReal MM;
353 FRotation3 MRotationOfMass;
355 TVec3<FRealSingle> MInvI;
356 FReal MInvM;
357
358
359};
360
362{
363 Data.Serialize(Ar);
364 return Ar;
365}
366
368{
369public:
371 {
377
378 const bool bSinglePrecision = Ar.CustomVer(FFortniteReleaseBranchCustomObjectVersion::GUID) >= FFortniteReleaseBranchCustomObjectVersion::SinglePrecisonParticleData;
379
381 {
382 Ar << MLinearEtherDrag;
383 Ar << MAngularEtherDrag;
384 }
385 else
386 {
387 FReal LinearEtherDragDouble = FReal(MLinearEtherDrag);
388 FReal AngularEtherDragDouble = FReal(MAngularEtherDrag);
391 MLinearEtherDrag = FRealSingle(LinearEtherDragDouble);
392 MAngularEtherDrag = FRealSingle(AngularEtherDragDouble);
393 }
394
395 Ar << MObjectState;
396
397 // Flags moved into a bitmask
398 const bool bAddControlFlags = (Ar.CustomVer(FUE5MainStreamObjectVersion::GUID) >= FUE5MainStreamObjectVersion::AddRigidParticleControlFlags);
399 if (!bAddControlFlags && Ar.IsLoading())
400 {
401 bool bGravityEnabled;
402 Ar << bGravityEnabled;
403 MControlFlags.SetGravityEnabled(bGravityEnabled);
404 }
405 Ar << MSleepType;
406 if (!bAddControlFlags && Ar.IsLoading())
407 {
408 bool bOneWayInteraction = false;
410 {
411 Ar << bOneWayInteraction;
412 }
413 MControlFlags.SetOneWayInteractionEnabled(bOneWayInteraction);
414 }
415
416 if (!bAddControlFlags && Ar.IsLoading())
417 {
419 {
420 bool bCCDEnabled;
421 Ar << bCCDEnabled;
422 MControlFlags.SetCCDEnabled(bCCDEnabled);
423 }
424 }
425
427 const bool bAddCollisionConstraintFlagUE5 = (Ar.CustomVer(FUE5MainStreamObjectVersion::GUID) >= FUE5MainStreamObjectVersion::AddCollisionConstraintFlag);
429 {
430 Ar << MCollisionConstraintFlag;
431 }
432
434 const bool bAddDisableFlagUE5 = (Ar.CustomVer(FUE5MainStreamObjectVersion::GUID) >= FUE5MainStreamObjectVersion::AddDisabledFlag);
436 {
437 Ar << bDisabled;
438 }
439
441 const bool bAddChaosMaxLinearAngularSpeedUE5 = (Ar.CustomVer(FUE5ReleaseStreamObjectVersion::GUID) >= FUE5ReleaseStreamObjectVersion::AddChaosMaxLinearAngularSpeed);
443 {
445 {
446 Ar << MMaxLinearSpeedSq;
447 Ar << MMaxAngularSpeedSq;
448 }
449 else
450 {
451 FReal MaxLinearSpeedSqDouble = FReal(MMaxLinearSpeedSq);
452 FReal MaxAngularSpeedSqDouble = FReal(MMaxAngularSpeedSq);
455 MMaxLinearSpeedSq = FRealSingle(MaxLinearSpeedSqDouble);
456 MMaxAngularSpeedSq = FRealSingle(MaxAngularSpeedSqDouble);
457 }
458 }
459
460 // @todo(chaos): add this
461 //Ar << MInitialOverlapDepenetrationVelocity;
462 //Ar << MSleepThresholdMultiplier;
463 //Ar << MIterationSettings
464 if (Ar.IsLoading())
465 {
466 MInitialOverlapDepenetrationVelocity = 0;
467 MSleepThresholdMultiplier = 1.0f;
468 MIterationSettings = MIterationSettings.MakeEmpty();
469 }
470
472 {
473 Ar << MControlFlags;
474 }
475 }
476
477 template <typename TOther>
478 void CopyFrom(const TOther& Other)
479 {
480 SetLinearEtherDrag(Other.LinearEtherDrag());
481 SetAngularEtherDrag(Other.AngularEtherDrag());
482 SetMaxLinearSpeedSq(Other.MaxLinearSpeedSq());
483 SetMaxAngularSpeedSq(Other.MaxAngularSpeedSq());
484 SetInitialOverlapDepenetrationVelocity(Other.InitialOverlapDepenetrationVelocity());
485 SetSleepThresholdMultiplier(Other.SleepThresholdMultiplier());
486 SetObjectState(Other.ObjectState());
487 SetCollisionGroup(Other.CollisionGroup());
488 SetSleepType(Other.SleepType());
489 SetCollisionConstraintFlags(Other.CollisionConstraintFlags());
490 SetControlFlags(Other.ControlFlags());
491 SetIterationSettings(Other.IterationSettings());
492 SetDisabled(Other.Disabled());
493 }
494
495 template <typename TOther>
496 bool IsEqual(const TOther& Other) const
497 {
498 return ObjectState() == Other.ObjectState()
499 && MLinearEtherDrag == FRealSingle(Other.LinearEtherDrag())
500 && MAngularEtherDrag == FRealSingle(Other.AngularEtherDrag())
501 && MMaxLinearSpeedSq == FRealSingle(Other.MaxLinearSpeedSq())
502 && MMaxAngularSpeedSq == FRealSingle(Other.MaxAngularSpeedSq())
503 && InitialOverlapDepenetrationVelocity() == Other.InitialOverlapDepenetrationVelocity()
504 && SleepThresholdMultiplier() == Other.SleepThresholdMultiplier()
505 && CollisionGroup() == Other.CollisionGroup()
506 && SleepType() == Other.SleepType()
507 && CollisionConstraintFlags() == Other.CollisionConstraintFlags()
508 && ControlFlags() == Other.ControlFlags()
509 && IterationSettings() == Other.IterationSettings()
510 && Disabled() == Other.Disabled();
511 }
512
514 {
515 return IsEqual(Other);
516 }
517
518 FReal LinearEtherDrag() const { return FReal(MLinearEtherDrag); }
520
521 FReal AngularEtherDrag() const { return FReal(MAngularEtherDrag); }
523
524 FReal MaxLinearSpeedSq() const { return FReal(MMaxLinearSpeedSq); }
526
527 FReal MaxAngularSpeedSq() const { return FReal(MMaxAngularSpeedSq); }
529
530 FRealSingle InitialOverlapDepenetrationVelocity() const { return MInitialOverlapDepenetrationVelocity; }
531 void SetInitialOverlapDepenetrationVelocity(FRealSingle InVel) { MInitialOverlapDepenetrationVelocity = InVel; }
532
533 FRealSingle SleepThresholdMultiplier() const { return MSleepThresholdMultiplier; }
535
536 EObjectStateType ObjectState() const { return MObjectState; }
538
539 bool GravityEnabled() const { return MControlFlags.GetGravityEnabled(); }
541 int32 GravityGroupIndex() const { return MControlFlags.GetGravityGroupIndex(); }
543
545 void SetUpdateKinematicFromSimulation(bool bUpdateKinematicFromSimulation) { MControlFlags.SetUpdateKinematicFromSimulation(bUpdateKinematicFromSimulation); }
546
547 bool GyroscopicTorqueEnabled() const { return MControlFlags.GetGyroscopicTorqueEnabled(); }
549
550 bool CCDEnabled() const { return MControlFlags.GetCCDEnabled(); }
552
553 bool MACDEnabled() const { return MControlFlags.GetMACDEnabled(); }
555
556 bool PartialIslandSleepAllowed() const { return MControlFlags.GetPartialIslandSleepAllowed(); }
558
562 Private::FIterationSettings IterationSettings() const { return MIterationSettings; }
564
565 bool Disabled() const { return bDisabled; }
566 void SetDisabled(bool bInDisabled) { bDisabled = bInDisabled; }
567
568 int32 CollisionGroup() const { return MCollisionGroup; }
569 void SetCollisionGroup(int32 InGroup){ MCollisionGroup = InGroup; }
570
571 ESleepType SleepType() const { return MSleepType; }
572 void SetSleepType(ESleepType Type) { MSleepType = Type; }
573
574 uint32 CollisionConstraintFlags() const { return MCollisionConstraintFlag; }
576 void AddCollisionConstraintFlag(const ECollisionConstraintFlags Flag) { MCollisionConstraintFlag |= uint32(Flag); }
577 void RemoveCollisionConstraintFlag(const ECollisionConstraintFlags Flag) { MCollisionConstraintFlag &= ~uint32(Flag); }
578
579 bool OneWayInteraction() const { return MControlFlags.GetOneWayInteractionEnabled(); }
581
582 bool InertiaConditioningEnabled() const { return MControlFlags.GetInertiaConditioningEnabled(); }
584
585 FRigidParticleControlFlags ControlFlags() const { return MControlFlags; }
587
588private:
589 //NOTE: MObjectState is the only sim-writable data in this struct
590 //If you add any more, make sure to update SyncSimWritablePropsFromSim
591 //Or consider breaking it (and object state) out of this struct entirely
592 FRealSingle MLinearEtherDrag;
593 FRealSingle MAngularEtherDrag;
594 FRealSingle MMaxLinearSpeedSq;
595 FRealSingle MMaxAngularSpeedSq;
596 FRealSingle MInitialOverlapDepenetrationVelocity = 0;
597 FRealSingle MSleepThresholdMultiplier = 1;
598 int32 MCollisionGroup;
599
600 EObjectStateType MObjectState;
601 EResimType MResimType;
602 ESleepType MSleepType;
603
604 uint32 MCollisionConstraintFlag = 0;
605 FRigidParticleControlFlags MControlFlags;
606
607 Chaos::Private::FIterationSettings MIterationSettings;
608
609 bool bDisabled;
610};
611
613{
614 Data.Serialize(Ar);
615 return Ar;
616}
617
619{
620public:
622 {
623
624 }
625
627 {
628 Ar.SerializePtr(MGeometry);
629 }
630
631 template <typename TOther>
632 void CopyFrom(const TOther& Other)
633 {
634 SetGeometry(Other.GetGeometry());
635 SetUniqueIdx(Other.UniqueIdx());
636 SetSpatialIdx(Other.SpatialIdx());
637
638 // Todo, can these be removed?
639 SetResimType(Other.ResimType());
640 SetEnabledDuringResim(Other.EnabledDuringResim());
641
642#if CHAOS_DEBUG_NAME
643 SetDebugName(Other.DebugName());
644#endif
645 }
646
647 template <typename TOther>
648 bool IsEqual(const TOther& Other) const
649 {
650 return GetGeometry() == Other.GetGeometry()
651 && UniqueIdx() == Other.UniqueIdx()
652 && SpatialIdx() == Other.SpatialIdx();
653 }
654
656 {
657 return IsEqual(Other);
658 }
659
660 //This function should only be used when geometry is not used by physics thread. The owning particle should not have a solver yet
661 //Avoid using this function unless you know the threading model, see TGeometryParticle::ModifyGeometry
663
664 const FImplicitObjectRef GetGeometry() const { return MGeometry.GetReference();}
666
667 UE_DEPRECATED(5.4, "Use GetGeometry instead")
669
670 UE_DEPRECATED(5.4, "Use GetGeometry instead")
672
673 UE_DEPRECATED(5.4, "Use SetGeometry with FImplicitObjectPtr instead")
675
676 const FUniqueIdx& UniqueIdx() const { return MUniqueIdx; }
677 void SetUniqueIdx(FUniqueIdx InIdx){ MUniqueIdx = InIdx; }
678
679 FSpatialAccelerationIdx SpatialIdx() const { return MSpatialIdx; }
681
682 EResimType ResimType() const { return MResimType; }
683
685 {
686 MResimType = InType;
687 }
688
690 {
691 MParticleID = ParticleID;
692 }
693
694 const FParticleID& ParticleID() const { return MParticleID; }
695
696 bool EnabledDuringResim() const { return MEnabledDuringResim; }
697 void SetEnabledDuringResim(bool bEnabledDuringResim) { MEnabledDuringResim = bEnabledDuringResim; }
698
699#if CHAOS_DEBUG_NAME
700 const TSharedPtr<FString, ESPMode::ThreadSafe>& DebugName() const { return MDebugName; }
701 void SetDebugName(const TSharedPtr<FString, ESPMode::ThreadSafe>& InName) { MDebugName = InName; }
702#endif
703private:
704 FImplicitObjectPtr MGeometry;
705 FUniqueIdx MUniqueIdx;
706 FSpatialAccelerationIdx MSpatialIdx;
707 EResimType MResimType;
708 bool MEnabledDuringResim;
709 FParticleID MParticleID;
710#if CHAOS_DEBUG_NAME
712#endif
713};
714
716{
717 Data.Serialize(Ar);
718 return Ar;
719}
720
722{
723 UE_DEPRECATED(5.7, "Use Get/SetCombinedShapeFilterData instead")
725 UE_DEPRECATED(5.7, "Use Get/SetCombinedShapeFilterData instead")
727
728 void* UserData;
733
742
744 FCollisionData(const FCollisionData& Rhs) = default;
746
750
755
758
761
764
766 bool HasQueryOnlyData() const { return !bSimCollision && bQueryCollision; }
767
769 {
773
775 Ar << QueryData;
776 Ar << SimData;
778
780 {
783 Ar << EnableSim;
784 Ar << EnableQuery;
787 }
789 {
790 bool Disable = !bSimCollision;
791 Ar << Disable;
793 }
794
797 {
798 bool Simulate = bSimCollision;
799 Ar << Simulate;
800 bSimCollision = Simulate;
801 }
802
804 {
806 Ar << Data;
808 }
809
810 if (Ar.CustomVer(FFortniteSeasonBranchObjectVersion::GUID) >= FFortniteSeasonBranchObjectVersion::AddShapeIsProbe)
811 {
813 Ar << IsProbe;
815 }
816 }
817};
818
820{
821 //TODO: should this only work with dirty flag? Not sure if this path really matters at this point
822 Data.Serialize(Ar);
823 return Ar;
824}
825
849
851{
852 //TODO: should this only work with dirty flag? Not sure if this path really matters at this point
853 Data.Serialize(Ar);
854 return Ar;
855}
856
857#define CHAOS_PROPERTY(PropName, Type, ProxyType) PropName,
859 {
860#include "ParticleProperties.inl"
862 };
863
864#undef CHAOS_PROPERTY
865
866#define CHAOS_PROPERTY(PropName, Type, ProxyType) PropName = (uint32)1 << (uint32)EChaosProperty::PropName,
867
869 {
870 #include "ParticleProperties.inl"
872 };
873#undef CHAOS_PROPERTY
874
876 {
877 switch(Prop)
878 {
879#define CHAOS_PROPERTY(PropName, Type, ProxyType) case EChaosProperty::PropName: return EChaosPropertyFlags::PropName;
880#include "ParticleProperties.inl"
881#undef CHAOS_PROPERTY
882 default: return (EChaosPropertyFlags)0;
883 }
884 }
885
886
887#define SHAPE_PROPERTY(PropName, Type) PropName,
889 {
890#include "ShapeProperties.inl"
892 };
893
894#undef SHAPE_PROPERTY
895
896#define SHAPE_PROPERTY(PropName, Type) PropName = (uint32)1 << (uint32)EShapeProperty::PropName,
897
898 enum class EShapeFlags: uint32
899 {
900#include "ShapeProperties.inl"
902 };
903#undef SHAPE_PROPERTY
904
906 {
907 switch(Prop)
908 {
909#define SHAPE_PROPERTY(PropName, Type) case EShapeProperty::PropName: return EShapeFlags::PropName;
910#include "ShapeProperties.inl"
911#undef SHAPE_PROPERTY
912 default: return (EShapeFlags)0;
913 }
914 }
915
916 template <typename FlagsType>
918 {
919 public:
920 TDirtyFlags() : Bits(0) { }
921
922 bool IsDirty() const
923 {
924 return Bits != 0;
925 }
926
927 bool IsDirty(const FlagsType CheckBits) const
928 {
929 return (Bits & (int32)CheckBits) != 0;
930 }
931
932 bool IsDirty(const int32 CheckBits) const
933 {
934 return (Bits & CheckBits) != 0;
935 }
936
938 {
939 Bits |= (int32)DirtyBits;
940 }
941
943 {
944 Bits &= ~(int32)CleanBits;
945 }
946
947 void Clear()
948 {
949 Bits = 0;
950 }
951
952 bool IsClean() const
953 {
954 return Bits == 0;
955 }
956
958 {
959 return Bits;
960 }
961
962 private:
963 int32 Bits;
964 };
965
968
970 {
973 };
974
975 template <typename T>
977 {
978 public:
979 const T& GetElement(int32 Idx) const { return Elements[Idx]; }
980 T& GetElement(int32 Idx){ return Elements[Idx]; }
981
982 void Reset(int32 Idx)
983 {
984 Elements[Idx] = T();
985 }
986
988 {
989 Elements.SetNum(Num);
990 }
991
992 int32 Num() const
993 {
994 return Elements.Num();
995 }
996
997 private:
998
999 TArray<T> Elements;
1000 };
1001
1002
1006{
1009
1010 void Reset()
1011 {
1012 for (int32 Idx = 0; Idx < (uint32)EPhysicsProxyType::Count; ++Idx) { Num[Idx] = 0; }
1013 TotalNum = 0;
1014 }
1015
1016 void GetBucketIdx(int32 Idx, int32& OutBucketIdx, int32& InnerIdx) const
1017 {
1018 int32 Remaining = Idx;
1020 {
1021 if (Remaining < Num[BucketIdx])
1022 {
1023 InnerIdx = Remaining;
1025 return;
1026 }
1027 else
1028 {
1029 Remaining -= Num[BucketIdx];
1030 }
1031 }
1032
1033 check(false); //couldn't find bucket for the given index
1034 }
1035};
1036
1037
1039{
1040public:
1041
1043 {
1044#define CHAOS_PROPERTY(PropName, Type, ProxyType) PropName##Pool.SetNum(DirtyProxiesBucketInfo.Num[(uint32)ProxyType]);
1045#include "ParticleProperties.inl"
1046#undef CHAOS_PROPERTY
1047 }
1048
1050 {
1051#define SHAPE_PROPERTY(PropName, Type) PropName##ShapePool.SetNum(NumShapes);
1052#include "ShapeProperties.inl"
1053#undef SHAPE_PROPERTY
1054 }
1055
1056 template <typename T, EChaosProperty PropName>
1058 {
1059 switch(PropName)
1060 {
1061#define CHAOS_PROPERTY(PropName, Type, ProxyType) case EChaosProperty::PropName: return (TDirtyElementPool<T>&)PropName##Pool;
1062#include "ParticleProperties.inl"
1063#undef CHAOS_PROPERTY
1064 default: check(false);
1065 }
1066
1068 return ErrorPool;
1069 }
1070
1071 template <typename T,EChaosProperty PropName>
1073 {
1074 switch(PropName)
1075 {
1076#define CHAOS_PROPERTY(PropName, Type, ProxyType) case EChaosProperty::PropName: return (TDirtyElementPool<T>&)PropName##Pool;
1077#include "ParticleProperties.inl"
1078#undef CHAOS_PROPERTY
1079 default: check(false);
1080 }
1081
1083 return ErrorPool;
1084 }
1085
1086 template <typename T,EShapeProperty PropName>
1088 {
1089 switch(PropName)
1090 {
1091#define SHAPE_PROPERTY(PropName, Type) case EShapeProperty::PropName: return (TDirtyElementPool<T>&)PropName##ShapePool;
1092#include "ShapeProperties.inl"
1093#undef SHAPE_PROPERTY
1094 default: check(false);
1095 }
1096
1098 return ErrorPool;
1099 }
1100
1101 template <typename T,EShapeProperty PropName>
1103 {
1104 switch(PropName)
1105 {
1106#define SHAPE_PROPERTY(PropName, Type) case EShapeProperty::PropName: return (TDirtyElementPool<T>&)PropName##ShapePool;
1107#include "ShapeProperties.inl"
1108#undef SHAPE_PROPERTY
1109 default: check(false);
1110 }
1111
1113 return ErrorPool;
1114 }
1115
1116private:
1117
1118#define CHAOS_PROPERTY(PropName, Type, ProxyType) TDirtyElementPool<Type> PropName##Pool;
1119#include "ParticleProperties.inl"
1120#undef CHAOS_PROPERTY
1121
1122#define SHAPE_PROPERTY(PropName, Type) TDirtyElementPool<Type> PropName##ShapePool;
1123#include "ShapeProperties.inl"
1124#undef SHAPE_PROPERTY
1125
1126};
1127
1129{
1130public:
1131
1133 {
1134 ParticleBufferType = Type;
1135 }
1136
1137 //NOTE: this is only valid if the proxy is a particle type and SetParticleBufferType was used
1138 //TODO: remove this from API
1140 {
1141 return ParticleBufferType;
1142 }
1143
1145 {
1146 Flags = InFlags;
1147 }
1148
1150 {
1151 return Flags;
1152 }
1153
1155 {
1156 Flags.MarkDirty(Flag);
1157 }
1158
1159 template <typename T, EChaosProperty PropName>
1160 void SyncRemote(FDirtyPropertiesManager& Manager, int32 Idx, const T& Val) const
1161 {
1163 {
1164 Manager.GetChaosPropertyPool<T,PropName>().GetElement(Idx) = Val;
1165 }
1166 }
1167
1169 {
1170#define CHAOS_PROPERTY(PropName, Type, ProxyType) ClearHelper<Type, EChaosProperty::PropName>(Manager, Idx);
1171#include "ParticleProperties.inl"
1172#undef CHAOS_PROPERTY
1173 Flags.Clear();
1174 }
1175
1177 {
1178 return Flags.IsDirty(InBits);
1179 }
1180
1182 {
1183#define CHAOS_PROPERTY(PropName, Type, ProxyType) MoveDataHelper<Type, EChaosProperty::PropName>(Manager, FromIdx, ToIdx);
1184#include "ParticleProperties.inl"
1185#undef CHAOS_PROPERTY
1186 }
1187
1188#define CHAOS_PROPERTY(PropName, Type, ProxyType)\
1189Type const & Get##PropName(const FDirtyPropertiesManager& Manager, int32 Idx) const { return ReadImp<Type, EChaosProperty::PropName>(Manager, Idx); }\
1190bool Has##PropName() const { return Flags.IsDirty(ChaosPropertyToFlag(EChaosProperty::PropName)); }\
1191Type const * Find##PropName(const FDirtyPropertiesManager& Manager, int32 Idx) const { return Has##PropName() ? &Get##PropName(Manager, Idx) : nullptr; }
1192
1193#include "ParticleProperties.inl"
1194#undef CHAOS_PROPERTY
1195
1196private:
1198 EParticleType ParticleBufferType;
1199
1200 template <typename T,EChaosProperty PropName>
1201 const T& ReadImp(const FDirtyPropertiesManager& Manager, int32 Idx) const
1202 {
1203 ensure(Flags.IsDirty(ChaosPropertyToFlag(PropName)));
1204 return Manager.GetChaosPropertyPool<T,PropName>().GetElement(Idx);
1205 }
1206
1207 template <typename T, EChaosProperty PropName>
1208 void ClearHelper(FDirtyPropertiesManager& Manager, int32 Idx)
1209 {
1210 if(Flags.IsDirty(ChaosPropertyToFlag(PropName)))
1211 {
1212 Manager.GetChaosPropertyPool<T, PropName>().Reset(Idx);
1213 }
1214 }
1215
1216 template <typename T, EChaosProperty PropName>
1217 void MoveDataHelper(FDirtyPropertiesManager& Manager, int32 FromIdx, int32 ToIdx)
1218 {
1219 if (Flags.IsDirty(ChaosPropertyToFlag(PropName)))
1220 {
1221 Manager.GetChaosPropertyPool<T, PropName>().GetElement(ToIdx) = Manager.GetChaosPropertyPool<T, PropName>().GetElement(FromIdx);
1222 Manager.GetChaosPropertyPool<T, PropName>().Reset(FromIdx);
1223 }
1224 }
1225};
1226
1228{
1229public:
1230
1232 : ShapeIdx(InShapeIdx)
1233 {
1234
1235 }
1236
1237 int32 GetShapeIdx() const { return ShapeIdx; }
1238
1240 {
1241 Flags = InFlags;
1242 }
1243
1244 template <typename T,EShapeProperty PropName>
1245 void SyncRemote(FDirtyPropertiesManager& Manager,int32 Idx, const T& Val) const
1246 {
1247 if(Flags.IsDirty(ShapePropToFlag(PropName)))
1248 {
1249 Manager.GetShapePool<T,PropName>().GetElement(Idx) = Val;
1250 }
1251 }
1252
1253 template <EShapeProperty PropName>
1254 bool IsDirty() const
1255 {
1256 return Flags.IsDirty(ShapePropToFlag(PropName));
1257 }
1258
1260 {
1261#define SHAPE_PROPERTY(PropName, Type) ClearHelper<Type, EShapeProperty::PropName>(Manager, Idx);
1262#include "ShapeProperties.inl"
1263#undef SHAPE_PROPERTY
1264 Flags.Clear();
1265 }
1266
1267#define SHAPE_PROPERTY(PropName, Type)\
1268Type const & Get##PropName(const FDirtyPropertiesManager& Manager, int32 Idx) const { return ReadImp<Type, EShapeProperty::PropName>(Manager, Idx); }\
1269bool Has##PropName() const { return Flags.IsDirty(ShapePropToFlag(EShapeProperty::PropName)); }\
1270Type const * Find##PropName(const FDirtyPropertiesManager& Manager, int32 Idx) const { return Has##PropName() ? &Get##PropName(Manager, Idx) : nullptr; }
1271
1272#include "ShapeProperties.inl"
1273#undef CHAOS_PROPERTY
1274
1275private:
1276 int32 ShapeIdx;
1277 FShapeDirtyFlags Flags;
1278
1279 template <typename T,EShapeProperty PropName>
1280 const T& ReadImp(const FDirtyPropertiesManager& Manager, int32 Idx) const
1281 {
1282 ensure(Flags.IsDirty(ShapePropToFlag(PropName)));
1283 return Manager.GetShapePool<T,PropName>().GetElement(Idx);
1284 }
1285
1286 template <typename T,EShapeProperty PropName>
1287 void ClearHelper(FDirtyPropertiesManager& Manager, int32 Idx)
1288 {
1289 if(Flags.IsDirty(ShapePropToFlag(PropName)))
1290 {
1291 Manager.GetShapePool<T,PropName>().Reset(Idx);
1292 }
1293 }
1294};
1295
1296template <typename T>
1297class TPropertyPool;
1298
1300
1301template <typename T>
1303{
1304public:
1305
1307 {
1308 if(FreeList.Num())
1309 {
1310 OutIdx = FreeList.Pop();
1311 return Elements[OutIdx];
1312 }
1313 else
1314 {
1315 OutIdx = Elements.AddDefaulted(1);
1316 return Elements[OutIdx];
1317 }
1318 }
1319
1321 {
1322 Elements[Idx] = T();
1323 FreeList.Push(Idx);
1324 }
1325
1327 {
1328 return Elements[Idx];
1329 }
1330
1331 const T& GetElement(const FPropertyIdx Idx) const
1332 {
1333 return Elements[Idx];
1334 }
1335
1337 {
1338 ensure(Elements.Num() == FreeList.Num()); //All elements have been freed
1339 }
1340
1341private:
1342
1343 TArray<T> Elements;
1344 TArray<FPropertyIdx> FreeList;
1345};
1346
1347//Similar to FDirtyPropertiesManager but is not needed to be used across threads
1348//This means we just have one big pool per property that you can new/free into
1350{
1351public:
1352 template <typename T, EChaosProperty PropName>
1354 {
1355 switch (PropName)
1356 {
1357#define CHAOS_PROPERTY(PropName, Type, ProxyType) case EChaosProperty::PropName: return (TPropertyPool<T>&)PropName##Pool;
1358#include "ParticleProperties.inl"
1359#undef CHAOS_PROPERTY
1360 default: check(false);
1361 }
1362
1364 return ErrorPool;
1365 }
1366
1367 template <typename T, EChaosProperty PropName>
1369 {
1370 switch (PropName)
1371 {
1372#define CHAOS_PROPERTY(PropName, Type, ProxyType) case EChaosProperty::PropName: return (TPropertyPool<T>&)PropName##Pool;
1373#include "ParticleProperties.inl"
1374#undef CHAOS_PROPERTY
1375 default: check(false);
1376 }
1377
1379 return ErrorPool;
1380 }
1381
1382private:
1383
1384#define CHAOS_PROPERTY(PropName, Type, ProxyType) TPropertyPool<Type> PropName##Pool;
1385#include "ParticleProperties.inl"
1386#undef CHAOS_PROPERTY
1387};
1388}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_INTERNAL
Definition CoreMiscDefines.h:345
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
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
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
ESPMode
Definition SharedPointerFwd.h:12
float Val(const FString &Value)
Definition UnrealMath.cpp:3163
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ChaosArchive.h:167
void SerializePtr(TSerializablePtr< T > &Obj)
Definition ChaosArchive.h:176
Definition ParticleDirtyFlags.h:1129
void SyncRemote(FDirtyPropertiesManager &Manager, int32 Idx, const T &Val) const
Definition ParticleDirtyFlags.h:1160
void DirtyFlag(EChaosPropertyFlags Flag)
Definition ParticleDirtyFlags.h:1154
void Clear(FDirtyPropertiesManager &Manager, int32 Idx)
Definition ParticleDirtyFlags.h:1168
FDirtyChaosPropertyFlags GetFlags() const
Definition ParticleDirtyFlags.h:1149
void SetFlags(FDirtyChaosPropertyFlags InFlags)
Definition ParticleDirtyFlags.h:1144
bool IsDirty(EChaosPropertyFlags InBits) const
Definition ParticleDirtyFlags.h:1176
void MoveData(FDirtyPropertiesManager &Manager, int32 FromIdx, int32 ToIdx)
Definition ParticleDirtyFlags.h:1181
EParticleType GetParticleBufferType() const
Definition ParticleDirtyFlags.h:1139
void SetParticleBufferType(EParticleType Type)
Definition ParticleDirtyFlags.h:1132
Definition ParticleDirtyFlags.h:1039
TDirtyElementPool< T > & GetChaosPropertyPool()
Definition ParticleDirtyFlags.h:1057
const TDirtyElementPool< T > & GetShapePool() const
Definition ParticleDirtyFlags.h:1102
const TDirtyElementPool< T > & GetChaosPropertyPool() const
Definition ParticleDirtyFlags.h:1072
void PrepareBuckets(const FDirtyProxiesBucketInfo &DirtyProxiesBucketInfo)
Definition ParticleDirtyFlags.h:1042
void SetNumShapes(int32 NumShapes)
Definition ParticleDirtyFlags.h:1049
TDirtyElementPool< T > & GetShapePool()
Definition ParticleDirtyFlags.h:1087
Definition ParticleDirtyFlags.h:1350
TPropertyPool< T > & GetPool()
Definition ParticleDirtyFlags.h:1353
const TPropertyPool< T > & GetPool() const
Definition ParticleDirtyFlags.h:1368
Definition ImplicitObject.h:111
Definition ParticleDirtyFlags.h:368
void AddCollisionConstraintFlag(const ECollisionConstraintFlags Flag)
Definition ParticleDirtyFlags.h:576
void SetPartialIslandSleepAllowed(bool bInPartialIslandSleepAllowed)
Definition ParticleDirtyFlags.h:557
void SetInitialOverlapDepenetrationVelocity(FRealSingle InVel)
Definition ParticleDirtyFlags.h:531
void SetMACDEnabled(bool bInMACDEnabled)
Definition ParticleDirtyFlags.h:554
bool IsEqual(const TOther &Other) const
Definition ParticleDirtyFlags.h:496
void SetInertiaConditioningEnabled(bool bInEnabled)
Definition ParticleDirtyFlags.h:583
void SetCCDEnabled(bool bInCCDEnabled)
Definition ParticleDirtyFlags.h:551
void SetMaxLinearSpeedSq(FReal InMaxLinearSpeed)
Definition ParticleDirtyFlags.h:525
void CopyFrom(const TOther &Other)
Definition ParticleDirtyFlags.h:478
FRigidParticleControlFlags ControlFlags() const
Definition ParticleDirtyFlags.h:585
uint32 CollisionConstraintFlags() const
Definition ParticleDirtyFlags.h:574
void RemoveCollisionConstraintFlag(const ECollisionConstraintFlags Flag)
Definition ParticleDirtyFlags.h:577
void SetDisabled(bool bInDisabled)
Definition ParticleDirtyFlags.h:566
FRealSingle SleepThresholdMultiplier() const
Definition ParticleDirtyFlags.h:533
bool MACDEnabled() const
Definition ParticleDirtyFlags.h:553
void SetVelocitySolverIterationCount(const int32 VelocitySolverIterationCountIn)
Definition ParticleDirtyFlags.h:560
void SetControlFlags(const FRigidParticleControlFlags &InFlags)
Definition ParticleDirtyFlags.h:586
void SetOneWayInteraction(bool bInOneWayInteraction)
Definition ParticleDirtyFlags.h:580
FReal AngularEtherDrag() const
Definition ParticleDirtyFlags.h:521
void Serialize(FChaosArchive &Ar)
Definition ParticleDirtyFlags.h:370
ESleepType SleepType() const
Definition ParticleDirtyFlags.h:571
FReal MaxLinearSpeedSq() const
Definition ParticleDirtyFlags.h:524
bool InertiaConditioningEnabled() const
Definition ParticleDirtyFlags.h:582
void SetProjectionSolverIterationCount(const int32 ProjectionSolverIterationCountIn)
Definition ParticleDirtyFlags.h:561
void SetGravityGroupIndex(int32 InIndex)
Definition ParticleDirtyFlags.h:542
void SetIterationSettings(const Private::FIterationSettings &SolverIterationSettings)
Definition ParticleDirtyFlags.h:563
bool PartialIslandSleepAllowed() const
Definition ParticleDirtyFlags.h:556
FReal LinearEtherDrag() const
Definition ParticleDirtyFlags.h:518
void SetGravityEnabled(bool bInGravity)
Definition ParticleDirtyFlags.h:540
Private::FIterationSettings IterationSettings() const
Definition ParticleDirtyFlags.h:562
void SetLinearEtherDrag(FReal InLinearEtherDrag)
Definition ParticleDirtyFlags.h:519
bool UpdateKinematicFromSimulation() const
Definition ParticleDirtyFlags.h:544
void SetPositionSolverIterationCount(const int32 PositionSolverIterationCountIn)
Definition ParticleDirtyFlags.h:559
bool CCDEnabled() const
Definition ParticleDirtyFlags.h:550
FRealSingle InitialOverlapDepenetrationVelocity() const
Definition ParticleDirtyFlags.h:530
void SetObjectState(EObjectStateType InState)
Definition ParticleDirtyFlags.h:537
void SetSleepThresholdMultiplier(FRealSingle InSleepThresholdMultiplier)
Definition ParticleDirtyFlags.h:534
void SetMaxAngularSpeedSq(FReal InMaxAngularSpeed)
Definition ParticleDirtyFlags.h:528
void SetCollisionGroup(int32 InGroup)
Definition ParticleDirtyFlags.h:569
void SetCollisionConstraintFlags(uint32 InCollisionConstraintFlag)
Definition ParticleDirtyFlags.h:575
bool OneWayInteraction() const
Definition ParticleDirtyFlags.h:579
int32 GravityGroupIndex() const
Definition ParticleDirtyFlags.h:541
void SetSleepType(ESleepType Type)
Definition ParticleDirtyFlags.h:572
void SetGyroscopicTorqueEnabled(bool bInGyroscopicTorqueEnabled)
Definition ParticleDirtyFlags.h:548
void SetUpdateKinematicFromSimulation(bool bUpdateKinematicFromSimulation)
Definition ParticleDirtyFlags.h:545
int32 CollisionGroup() const
Definition ParticleDirtyFlags.h:568
bool GravityEnabled() const
Definition ParticleDirtyFlags.h:539
bool operator==(const FParticleDynamicMisc &Other) const
Definition ParticleDirtyFlags.h:513
bool GyroscopicTorqueEnabled() const
Definition ParticleDirtyFlags.h:547
void SetAngularEtherDrag(FReal InAngularEtherDrag)
Definition ParticleDirtyFlags.h:522
EObjectStateType ObjectState() const
Definition ParticleDirtyFlags.h:536
FReal MaxAngularSpeedSq() const
Definition ParticleDirtyFlags.h:527
bool Disabled() const
Definition ParticleDirtyFlags.h:565
Definition ParticleDirtyFlags.h:177
void CopyFrom(const TOther &Other)
Definition ParticleDirtyFlags.h:208
static FParticleDynamics ZeroValue()
Definition ParticleDirtyFlags.h:242
void SetAcceleration(const FVec3 &Acceleration)
Definition ParticleDirtyFlags.h:231
FVec3 LinearImpulseVelocity() const
Definition ParticleDirtyFlags.h:236
bool IsEqual(const TOther &Other) const
Definition ParticleDirtyFlags.h:217
void Serialize(FChaosArchive &Ar)
Definition ParticleDirtyFlags.h:179
FVec3 Acceleration() const
Definition ParticleDirtyFlags.h:230
void SetAngularAcceleration(const FVec3 &AngularAcceleration)
Definition ParticleDirtyFlags.h:234
void SetLinearImpulseVelocity(const FVec3 &LinearImpulseVelocity)
Definition ParticleDirtyFlags.h:237
void SetAngularImpulseVelocity(const FVec3 &AngularImpulseVelocity)
Definition ParticleDirtyFlags.h:240
FVec3 AngularAcceleration() const
Definition ParticleDirtyFlags.h:233
bool operator==(const FParticleDynamics &Other) const
Definition ParticleDirtyFlags.h:225
FVec3 AngularImpulseVelocity() const
Definition ParticleDirtyFlags.h:239
Definition ParticleDirtyFlags.h:293
void SetInvI(const TVec3< FRealSingle > &InInvI)
Definition ParticleDirtyFlags.h:342
const TVec3< FRealSingle > & I() const
Definition ParticleDirtyFlags.h:338
void SetInvM(FReal InInvM)
Definition ParticleDirtyFlags.h:348
void Serialize(FChaosArchive &Ar)
Definition ParticleDirtyFlags.h:295
const FVec3 & CenterOfMass() const
Definition ParticleDirtyFlags.h:332
FReal M() const
Definition ParticleDirtyFlags.h:344
FReal InvM() const
Definition ParticleDirtyFlags.h:347
void SetI(const TVec3< FRealSingle > &InI)
Definition ParticleDirtyFlags.h:339
void CopyFrom(const TOther &Other)
Definition ParticleDirtyFlags.h:306
bool operator==(const FParticleMassProps &Other) const
Definition ParticleDirtyFlags.h:327
void SetCenterOfMass(const FVec3 &InCenterOfMass)
Definition ParticleDirtyFlags.h:333
const FRotation3 & RotationOfMass() const
Definition ParticleDirtyFlags.h:335
bool IsEqual(const TOther &Other) const
Definition ParticleDirtyFlags.h:317
void SetRotationOfMass(const FRotation3 &InRotationOfMass)
Definition ParticleDirtyFlags.h:336
const TVec3< FRealSingle > & InvI() const
Definition ParticleDirtyFlags.h:341
void SetM(FReal InM)
Definition ParticleDirtyFlags.h:345
Definition ParticleDirtyFlags.h:619
const FUniqueIdx & UniqueIdx() const
Definition ParticleDirtyFlags.h:676
void CopyFrom(const TOther &Other)
Definition ParticleDirtyFlags.h:632
void SetUniqueIdx(FUniqueIdx InIdx)
Definition ParticleDirtyFlags.h:677
const FParticleID & ParticleID() const
Definition ParticleDirtyFlags.h:694
void SetParticleID(const FParticleID &ParticleID)
Definition ParticleDirtyFlags.h:689
void SetGeometry(const FImplicitObjectPtr &InGeometry)
Definition ParticleDirtyFlags.h:665
bool IsEqual(const TOther &Other) const
Definition ParticleDirtyFlags.h:648
void SetEnabledDuringResim(bool bEnabledDuringResim)
Definition ParticleDirtyFlags.h:697
FSpatialAccelerationIdx SpatialIdx() const
Definition ParticleDirtyFlags.h:679
EResimType ResimType() const
Definition ParticleDirtyFlags.h:682
const TSharedPtr< const FImplicitObject, ESPMode::ThreadSafe > & SharedGeometryLowLevel() const
Definition ParticleDirtyFlags.h:671
FParticleNonFrequentData()
Definition ParticleDirtyFlags.h:621
void SetResimType(EResimType InType)
Definition ParticleDirtyFlags.h:684
bool EnabledDuringResim() const
Definition ParticleDirtyFlags.h:696
const FImplicitObjectRef GetGeometry() const
Definition ParticleDirtyFlags.h:664
void SetSpatialIdx(FSpatialAccelerationIdx InIdx)
Definition ParticleDirtyFlags.h:680
TSerializablePtr< FImplicitObject > Geometry() const
Definition ParticleDirtyFlags.h:668
void Serialize(FChaosArchive &Ar)
Definition ParticleDirtyFlags.h:626
FImplicitObject * AccessGeometryDangerous()
Definition ParticleDirtyFlags.h:662
bool operator==(const FParticleNonFrequentData &Other) const
Definition ParticleDirtyFlags.h:655
Definition ParticleDirtyFlags.h:60
const FVec3 & X() const
Definition ParticleDirtyFlags.h:97
const FRotation3 GetR() const
Definition ParticleDirtyFlags.h:102
const FVec3 & GetX() const
Definition ParticleDirtyFlags.h:98
bool IsEqual(const TOther &Other) const
Definition ParticleDirtyFlags.h:87
void SetR(const FRotation3 &InR)
Definition ParticleDirtyFlags.h:103
void SetX(const FVec3 &InX)
Definition ParticleDirtyFlags.h:99
const FRotation3 R() const
Definition ParticleDirtyFlags.h:101
void CopyFrom(const TOther &Other)
Definition ParticleDirtyFlags.h:80
void Serialize(FChaosArchive &Ar)
Definition ParticleDirtyFlags.h:62
bool operator==(const FParticlePositionRotation &Other) const
Definition ParticleDirtyFlags.h:92
Definition ParticleDirtyFlags.h:118
void SetV(const FVec3 &V)
Definition ParticleDirtyFlags.h:159
const FVec3 GetW() const
Definition ParticleDirtyFlags.h:162
const FVec3 W() const
Definition ParticleDirtyFlags.h:161
bool IsEqual(const TOther &Other) const
Definition ParticleDirtyFlags.h:147
void Serialize(FChaosArchive &Ar)
Definition ParticleDirtyFlags.h:120
const FVec3 GetV() const
Definition ParticleDirtyFlags.h:158
bool operator==(const FParticleVelocities &Other) const
Definition ParticleDirtyFlags.h:152
void CopyFrom(const TOther &Other)
Definition ParticleDirtyFlags.h:140
void SetW(const FVec3 &W)
Definition ParticleDirtyFlags.h:163
const FVec3 V() const
Definition ParticleDirtyFlags.h:157
Enable/Disable the features on a particle These flags are externally controlled and should not be cha...
Definition RigidParticleControlFlags.h:18
bool GetGyroscopicTorqueEnabled() const
Definition RigidParticleControlFlags.h:36
FRigidParticleControlFlags & SetGyroscopicTorqueEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:37
int32 GetGravityGroupIndex() const
Definition RigidParticleControlFlags.h:39
bool GetUpdateKinematicFromSimulation() const
Definition RigidParticleControlFlags.h:33
bool GetInertiaConditioningEnabled() const
Definition RigidParticleControlFlags.h:60
bool GetOneWayInteractionEnabled() const
Definition RigidParticleControlFlags.h:56
FRigidParticleControlFlags & SetPartialIslandSleepAllowed(const bool bEnabled)
Definition RigidParticleControlFlags.h:54
bool GetCCDEnabled() const
Definition RigidParticleControlFlags.h:47
FRigidParticleControlFlags & SetMACDEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:51
FRigidParticleControlFlags & SetCCDEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:48
FRigidParticleControlFlags & SetGravityGroupIndex(const int32 GravityGroupIndex)
Definition RigidParticleControlFlags.h:40
FRigidParticleControlFlags & SetInertiaConditioningEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:61
bool GetPartialIslandSleepAllowed() const
Definition RigidParticleControlFlags.h:53
FRigidParticleControlFlags & SetGravityEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:31
bool GetGravityEnabled() const
Definition RigidParticleControlFlags.h:30
FRigidParticleControlFlags & SetUpdateKinematicFromSimulation(const bool bUpdateKinematicFromSimulation)
Definition RigidParticleControlFlags.h:34
bool GetMACDEnabled() const
Definition RigidParticleControlFlags.h:50
FRigidParticleControlFlags & SetOneWayInteractionEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:57
Definition ParticleDirtyFlags.h:1228
int32 GetShapeIdx() const
Definition ParticleDirtyFlags.h:1237
void SyncRemote(FDirtyPropertiesManager &Manager, int32 Idx, const T &Val) const
Definition ParticleDirtyFlags.h:1245
void SetFlags(FShapeDirtyFlags InFlags)
Definition ParticleDirtyFlags.h:1239
bool IsDirty() const
Definition ParticleDirtyFlags.h:1254
void Clear(FDirtyPropertiesManager &Manager, int32 Idx)
Definition ParticleDirtyFlags.h:1259
FShapeDirtyData(int32 InShapeIdx)
Definition ParticleDirtyFlags.h:1231
Definition IterationSettings.h:19
void SetNumPositionIterations(const int32 InNum)
Definition IterationSettings.h:64
void SetNumVelocityIterations(const int32 InNum)
Definition IterationSettings.h:65
static TIterationSettings< FIndexType > MakeEmpty()
Definition IterationSettings.h:30
void SetNumProjectionIterations(const int32 InNum)
Definition IterationSettings.h:66
Definition ParticleDirtyFlags.h:977
int32 Num() const
Definition ParticleDirtyFlags.h:992
const T & GetElement(int32 Idx) const
Definition ParticleDirtyFlags.h:979
void SetNum(int32 Num)
Definition ParticleDirtyFlags.h:987
T & GetElement(int32 Idx)
Definition ParticleDirtyFlags.h:980
void Reset(int32 Idx)
Definition ParticleDirtyFlags.h:982
Definition ParticleDirtyFlags.h:918
TDirtyFlags()
Definition ParticleDirtyFlags.h:920
bool IsDirty() const
Definition ParticleDirtyFlags.h:922
bool IsClean() const
Definition ParticleDirtyFlags.h:952
void MarkDirty(const FlagsType DirtyBits)
Definition ParticleDirtyFlags.h:937
void MarkClean(const FlagsType CleanBits)
Definition ParticleDirtyFlags.h:942
bool IsDirty(const FlagsType CheckBits) const
Definition ParticleDirtyFlags.h:927
void Clear()
Definition ParticleDirtyFlags.h:947
int32 GetBits() const
Definition ParticleDirtyFlags.h:957
bool IsDirty(const int32 CheckBits) const
Definition ParticleDirtyFlags.h:932
Definition ParticleDirtyFlags.h:1303
~TPropertyPool()
Definition ParticleDirtyFlags.h:1336
void RemoveElement(const FPropertyIdx Idx)
Definition ParticleDirtyFlags.h:1320
T & AddElement(FPropertyIdx &OutIdx)
Definition ParticleDirtyFlags.h:1306
const T & GetElement(const FPropertyIdx Idx) const
Definition ParticleDirtyFlags.h:1331
T & GetElement(const FPropertyIdx Idx)
Definition ParticleDirtyFlags.h:1326
Definition Rotation.h:49
Definition Serializable.h:10
Definition Vector.h:407
Definition Vector.h:1000
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
Definition NameTypes.h:617
Definition PhysicsProxyBase.h:97
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT void Push(ElementType &&Item)
Definition Array.h:1224
SizeType AddDefaulted()
Definition Array.h:2795
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
ElementType Pop(EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:1196
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Definition SharedPointer.h:692
Flags
Definition SoundFileIOEnums.h:78
Definition SkeletalMeshComponent.h:307
EShapeProperty
Definition ParticleDirtyFlags.h:889
EParticleType
Definition GeometryParticlesfwd.h:11
TVector< FRealSingle, 3 > FVec3f
Definition Core.h:27
EResimType
Definition GeometryParticles.h:143
TRefCountPtr< FImplicitObject > FImplicitObjectPtr
Definition ImplicitFwd.h:33
EChaosPropertyFlags
Definition ParticleDirtyFlags.h:869
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
constexpr EChaosPropertyFlags ChaosPropertyToFlag(EChaosProperty Prop)
Definition ParticleDirtyFlags.h:875
FRealDouble FReal
Definition Real.h:22
TRotation< FReal, 3 > FRotation3
Definition Core.h:19
ECollisionConstraintFlags
Flags for user-control over per-particle collision behaviour.
Definition CollisionConstraintFlags.h:22
EObjectStateType
Definition ObjectState.h:10
int32 FPropertyIdx
Definition ParticleDirtyFlags.h:1299
EChaosCollisionTraceFlag
Definition Particles.h:231
TVector< FPhysicsObject *, 2 > FPhysicsObjectPair
Definition ParticleDirtyFlags.h:274
float FRealSingle
Definition Real.h:14
TVector< IPhysicsProxyBase *, 2 > FProxyBasePair
Definition ParticleDirtyFlags.h:261
TVector< FReal, 3 > FVec3
Definition Core.h:17
ESleepType
Definition RigidParticles.h:23
constexpr EShapeFlags ShapePropToFlag(EShapeProperty Prop)
Definition ParticleDirtyFlags.h:905
EChaosProperty
Definition ParticleDirtyFlags.h:859
EShapeFlags
Definition ParticleDirtyFlags.h:899
TRotation< FRealSingle, 3 > FRotation3f
Definition Core.h:28
void GetElement(const UTypedElementRegistry *InRegistry, const HandleType &InElementHandle, TTypedElement< BaseInterfaceType > &OutElement)
Definition TypedElementList.h:39
@ false
Definition radaudio_common.h:23
Definition ParticleDirtyFlags.h:722
EChaosCollisionTraceFlag CollisionTraceType
Definition ParticleDirtyFlags.h:729
bool HasQueryOnlyData() const
Definition ParticleDirtyFlags.h:766
uint8 bSimCollision
Definition ParticleDirtyFlags.h:730
PRAGMA_ENABLE_DEPRECATION_WARNINGS UE_INTERNAL CHAOS_API const FCollisionFilterData & GetQueryData() const
Definition ParticleDirtyFlags.cpp:7
FCollisionFilterData SimData
Definition ParticleDirtyFlags.h:726
FCollisionFilterData QueryData
Definition ParticleDirtyFlags.h:724
FCollisionData(FCollisionData &Rhs)=default
UE_INTERNAL CHAOS_API void SetQueryData(const FCollisionFilterData &InQueryData)
Definition ParticleDirtyFlags.cpp:14
uint8 bIsProbe
Definition ParticleDirtyFlags.h:732
FCollisionData & operator=(FCollisionData &&Rhs)=default
CHAOS_API void SetFilterInstanceData(const Chaos::Filter::FInstanceData &InstanceData)
Definition ParticleDirtyFlags.cpp:52
UE_INTERNAL CHAOS_API void SetSimData(const FCollisionFilterData &InSimData)
Definition ParticleDirtyFlags.cpp:28
void * UserData
Definition ParticleDirtyFlags.h:728
void Serialize(FChaosArchive &Ar)
Definition ParticleDirtyFlags.h:768
bool HasCollisionData() const
Definition ParticleDirtyFlags.h:765
FCollisionData & operator=(const FCollisionData &Rhs)=default
CHAOS_API void SetCombinedShapeFilterData(const Chaos::Filter::FCombinedShapeFilterData &CombinedShapeFilter)
Definition ParticleDirtyFlags.cpp:64
UE_INTERNAL CHAOS_API const FCollisionFilterData & GetSimData() const
Definition ParticleDirtyFlags.cpp:21
CHAOS_API Chaos::Filter::FShapeFilterData GetShapeFilterData() const
Definition ParticleDirtyFlags.cpp:35
PRAGMA_DISABLE_DEPRECATION_WARNINGS FCollisionData(const FCollisionData &Rhs)=default
CHAOS_API void SetShapeFilterData(const Chaos::Filter::FShapeFilterData &ShapeFilter)
Definition ParticleDirtyFlags.cpp:40
uint8 bQueryCollision
Definition ParticleDirtyFlags.h:731
CHAOS_API Chaos::Filter::FInstanceData GetFilterInstanceData() const
Definition ParticleDirtyFlags.cpp:47
CHAOS_API Chaos::Filter::FCombinedShapeFilterData GetCombinedShapeFilterData() const
Definition ParticleDirtyFlags.cpp:59
Definition ParticleDirtyFlags.h:970
uint32 Entry
Definition ParticleDirtyFlags.h:972
uint32 bHasEntry
Definition ParticleDirtyFlags.h:971
Definition ParticleDirtyFlags.h:1006
void Reset()
Definition ParticleDirtyFlags.h:1010
int32 TotalNum
Definition ParticleDirtyFlags.h:1008
void GetBucketIdx(int32 Idx, int32 &OutBucketIdx, int32 &InnerIdx) const
Definition ParticleDirtyFlags.h:1016
int32 Num[(uint32)(EPhysicsProxyType::Count)]
Definition ParticleDirtyFlags.h:1007
Definition ParticleDirtyFlags.h:827
TArray< FMaterialMaskHandle > MaterialMasks
Definition ParticleDirtyFlags.h:829
void Serialize(FChaosArchive &Ar)
Definition ParticleDirtyFlags.h:833
TArray< FMaterialHandle > MaterialMaskMapMaterials
Definition ParticleDirtyFlags.h:831
TArray< FMaterialHandle > Materials
Definition ParticleDirtyFlags.h:828
TArray< uint32 > MaterialMaskMaps
Definition ParticleDirtyFlags.h:830
Definition ParticleDirtyFlags.h:37
bool operator==(const FParticleID &Other) const
Definition ParticleDirtyFlags.h:50
bool operator<(const FParticleID &Other) const
Definition ParticleDirtyFlags.h:41
int32 LocalID
Definition ParticleDirtyFlags.h:39
int32 GlobalID
Definition ParticleDirtyFlags.h:38
Definition ParticleDirtyFlags.h:277
FPhysicsObjectPair PhysicsBodies
Definition ParticleDirtyFlags.h:278
Definition ParticleDirtyFlags.h:282
FPhysicsObject * PhysicsBody
Definition ParticleDirtyFlags.h:283
Definition PhysicsObjectInternal.h:16
Definition ParticleDirtyFlags.h:264
FProxyBasePair ParticleProxies
Definition ParticleDirtyFlags.h:265
Definition ParticleDirtyFlags.h:269
IPhysicsProxyBase * Proxy
Definition ParticleDirtyFlags.h:270
Definition GeometryParticlesfwd.h:59
Definition GeometryParticlesfwd.h:87
Definition CollisionFilterData.h:187
Definition CollisionFilterData.h:81
Definition CollisionFilterData.h:107
Definition CollisionFilterData.h:46
CORE_API static const FGuid GUID
Definition ExternalPhysicsCustomObjectVersion.h:144
@ AddShapeCollisionDisable
Definition ExternalPhysicsCustomObjectVersion.h:79
@ SerializeCollisionTraceType
Definition ExternalPhysicsCustomObjectVersion.h:118
@ AddShapeSimAndQueryCollisionEnabled
Definition ExternalPhysicsCustomObjectVersion.h:127
@ RemoveShapeSimAndQueryDuplicateRepresentations
Definition ExternalPhysicsCustomObjectVersion.h:130
@ AddOneWayInteraction
Definition ExternalPhysicsCustomObjectVersion.h:136
@ SerializePerShapeDataSimulateFlag
Definition ExternalPhysicsCustomObjectVersion.h:91
@ AddedMaterialManager
Definition ExternalPhysicsCustomObjectVersion.h:67
CORE_API static const FGuid GUID
Definition ExternalPhysicsMaterialCustomObjectVersion.h:24
@ AddedMaterialMasks
Definition ExternalPhysicsMaterialCustomObjectVersion.h:16
CORE_API static const FGuid GUID
Definition FortniteReleaseBranchCustomObjectVersion.h:22
CORE_API static const FGuid GUID
Definition FortniteSeasonBranchObjectVersion.h:21
@ AddChaosMaxLinearAngularSpeed
Definition PhysicsObjectVersion.h:67
@ AddCollisionConstraintFlag
Definition PhysicsObjectVersion.h:61
@ AddDisabledFlag
Definition PhysicsObjectVersion.h:64
@ AddCCDEnableFlag
Definition PhysicsObjectVersion.h:31
CORE_API static const FGuid GUID
Definition PhysicsObjectVersion.h:78
CORE_API static const FGuid GUID
Definition UE5MainStreamObjectVersion.h:22
CORE_API static const FGuid GUID
Definition UE5ReleaseStreamObjectVersion.h:22