UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RigidParticleControlFlags.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
5
6class FString;
7
8namespace Chaos
9{
10 class FChaosArchive;
11
18 {
19 public:
21
23 : Bits(0)
24 {
25 }
26
27 FStorage GetFlags() const { return Bits; }
28 void SetFlags(const FStorage InBits) { Bits = InBits; }
29
30 bool GetGravityEnabled() const { return Flags.bGravityEnabled; }
31 FRigidParticleControlFlags& SetGravityEnabled(const bool bEnabled) { Flags.bGravityEnabled = bEnabled; return *this; }
32
33 bool GetUpdateKinematicFromSimulation() const { return Flags.bUpdateKinematicFromSimulation; }
34 FRigidParticleControlFlags& SetUpdateKinematicFromSimulation(const bool bUpdateKinematicFromSimulation) { Flags.bUpdateKinematicFromSimulation = bUpdateKinematicFromSimulation; return *this; }
35
36 bool GetGyroscopicTorqueEnabled() const { return Flags.bGyroscopicTorqueEnabled; }
37 FRigidParticleControlFlags& SetGyroscopicTorqueEnabled(const bool bEnabled) { Flags.bGyroscopicTorqueEnabled = bEnabled; return *this; }
38
39 int32 GetGravityGroupIndex() const { return Flags.GravityGroupIndex; }
41 {
42 ensure(GravityGroupIndex < 8);
43 Flags.GravityGroupIndex = static_cast<FStorage>(GravityGroupIndex);
44 return *this;
45 }
46
47 bool GetCCDEnabled() const { return Flags.bCCDEnabled; }
48 FRigidParticleControlFlags& SetCCDEnabled(const bool bEnabled) { Flags.bCCDEnabled = bEnabled; return *this; }
49
50 bool GetMACDEnabled() const { return Flags.bMACDEnabled; }
51 FRigidParticleControlFlags& SetMACDEnabled(const bool bEnabled) { Flags.bMACDEnabled = bEnabled; return *this; }
52
53 bool GetPartialIslandSleepAllowed() const { return Flags.bPartialIslandSleepAllowed; }
54 FRigidParticleControlFlags& SetPartialIslandSleepAllowed(const bool bEnabled) { Flags.bPartialIslandSleepAllowed = bEnabled; return *this; }
55
56 bool GetOneWayInteractionEnabled() const { return Flags.bOneWayInteractionEnabled; }
57 FRigidParticleControlFlags& SetOneWayInteractionEnabled(const bool bEnabled) { Flags.bOneWayInteractionEnabled = bEnabled; return *this; }
58
59 // If enabled, inertia may be increased to improve stability
60 bool GetInertiaConditioningEnabled() const { return Flags.bInertiaConditioningEnabled; }
61 FRigidParticleControlFlags& SetInertiaConditioningEnabled(const bool bEnabled) { Flags.bInertiaConditioningEnabled = bEnabled; return *this; }
62
63 // Used by rewind system debuging
64 FString ToString() const;
65
66 // Used by MarshallingManager and dirty data system
67 friend bool operator==(const FRigidParticleControlFlags& L, const FRigidParticleControlFlags& R) { return L.GetFlags() == R.GetFlags(); }
68 friend bool operator!=(const FRigidParticleControlFlags& L, const FRigidParticleControlFlags& R) { return L.GetFlags() != R.GetFlags(); }
69
70 // Serialization
72
73 UE_DEPRECATED(5.4, "Not used")
75
76 UE_DEPRECATED(5.4, "Not used")
78
79 private:
80 struct FFlags
81 {
82 FStorage bGravityEnabled : 1;
83 FStorage bCCDEnabled : 1;
84 FStorage bOneWayInteractionEnabled : 1;
85 FStorage bEnableInitialOverlapDepenetration : 1;
86 FStorage bInertiaConditioningEnabled : 1;
87 FStorage GravityGroupIndex : 3;
88 FStorage bUpdateKinematicFromSimulation : 1;
89 FStorage bMACDEnabled : 1;
90 FStorage bPartialIslandSleepAllowed : 1;
91 FStorage bGyroscopicTorqueEnabled : 1;
92 // Add new properties above this line
93 // Change FStorage typedef if we exceed the max bits
94 };
95 union
96 {
97 FFlags Flags;
99 };
100 };
101
102 // If we add more bits and exceed the storage size...
103 static_assert(sizeof(FRigidParticleControlFlags) == sizeof(FRigidParticleControlFlags::FStorage), "Change FRigidParticleControlFlags::FStorage to be larger");
104
105
121 {
122 public:
124
126 : Bits(0)
127 {
128 }
129
130 FStorage GetFlags() const { return Bits; }
132
133 // Set to true when some property of the particle changes and we should regenerate the inertia conditioning vector
134 bool GetInertiaConditioningDirty() const { return Flags.bInertiaConditioningDirty; }
135 void SetInertiaConditioningDirty() { Flags.bInertiaConditioningDirty = true; }
136 void ClearInertiaConditioningDirty() { Flags.bInertiaConditioningDirty = false; }
137
138 // Set to true when the particle has one or more entries in the CollisionIgnoreManager
139 bool GetUseIgnoreCollisionManager() const { return Flags.bUseIgnoreCollisionManager; }
140 void SetUseIgnoreCollisionManager() { Flags.bUseIgnoreCollisionManager = true; }
141 void ClearUseIgnoreCollisionManager() { Flags.bUseIgnoreCollisionManager = false; }
142
143 // Is this particle kinematic and moving (velocity and angular velocity are non-zero). This is updated in ApplyKinematicTargets
144 // to help avoid checking velocity and angular velocity (especially for kinematics).
145 bool GetIsMovingKinematic() const { return Flags.bIsMovingKinematic; }
146 void SetIsMovingKinematic() { Flags.bIsMovingKinematic = true; }
147 void ClearIsMovingKinematic() { Flags.bIsMovingKinematic = false; }
148
149 private:
150 struct FFlags
151 {
152 FStorage bInertiaConditioningDirty : 1;
153 FStorage bUseIgnoreCollisionManager : 1;
154 FStorage bIsMovingKinematic : 1;
155 // Add new properties above this line
156 // Change FStorage typedef if we exceed the max bits
157 };
158 union
159 {
160 FFlags Flags;
162 };
163 };
164
165 // If we add more bits and exceed the storage size...
166 static_assert(sizeof(FRigidParticleTransientFlags) == sizeof(FRigidParticleTransientFlags::FStorage), "Change FRigidParticleTransientFlags::FStorage to be larger");
167}
#define ensure( InExpression)
Definition AssertionMacros.h:464
#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
const bool
Definition NetworkReplayStreaming.h:178
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
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
uint16 FStorage
Definition RigidParticleControlFlags.h:20
bool GetGyroscopicTorqueEnabled() const
Definition RigidParticleControlFlags.h:36
friend bool operator!=(const FRigidParticleControlFlags &L, const FRigidParticleControlFlags &R)
Definition RigidParticleControlFlags.h:68
FRigidParticleControlFlags & SetGyroscopicTorqueEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:37
int32 GetGravityGroupIndex() const
Definition RigidParticleControlFlags.h:39
bool GetUpdateKinematicFromSimulation() const
Definition RigidParticleControlFlags.h:33
FFlags Flags
Definition RigidParticleControlFlags.h:97
bool GetInertiaConditioningEnabled() const
Definition RigidParticleControlFlags.h:60
bool GetOneWayInteractionEnabled() const
Definition RigidParticleControlFlags.h:56
void SetFlags(const FStorage InBits)
Definition RigidParticleControlFlags.h:28
FRigidParticleControlFlags & SetPartialIslandSleepAllowed(const bool bEnabled)
Definition RigidParticleControlFlags.h:54
FRigidParticleControlFlags()
Definition RigidParticleControlFlags.h:22
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
friend bool operator==(const FRigidParticleControlFlags &L, const FRigidParticleControlFlags &R)
Definition RigidParticleControlFlags.h:67
FString ToString() const
Definition RigidParticleControlFlags.cpp:10
FRigidParticleControlFlags & SetInertiaConditioningEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:61
FRigidParticleControlFlags & SetMaxDepenetrationVelocityOverrideEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:77
FStorage GetFlags() const
Definition RigidParticleControlFlags.h:27
bool GetPartialIslandSleepAllowed() const
Definition RigidParticleControlFlags.h:53
FRigidParticleControlFlags & SetGravityEnabled(const bool bEnabled)
Definition RigidParticleControlFlags.h:31
bool GetGravityEnabled() const
Definition RigidParticleControlFlags.h:30
bool GetMaxDepenetrationVelocityOverrideEnabled() const
Definition RigidParticleControlFlags.h:74
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
friend FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Data)
Definition RigidParticleControlFlags.cpp:15
FStorage Bits
Definition RigidParticleControlFlags.h:98
Transient flags for indicating somethings needs to be updated based on a change to the particle Typic...
Definition RigidParticleControlFlags.h:121
void ClearInertiaConditioningDirty()
Definition RigidParticleControlFlags.h:136
void SetFlags(const FStorage InFlags)
Definition RigidParticleControlFlags.h:131
uint8 FStorage
Definition RigidParticleControlFlags.h:123
FRigidParticleTransientFlags()
Definition RigidParticleControlFlags.h:125
void SetIsMovingKinematic()
Definition RigidParticleControlFlags.h:146
bool GetIsMovingKinematic() const
Definition RigidParticleControlFlags.h:145
FStorage GetFlags() const
Definition RigidParticleControlFlags.h:130
FStorage Bits
Definition RigidParticleControlFlags.h:161
bool GetUseIgnoreCollisionManager() const
Definition RigidParticleControlFlags.h:139
void SetInertiaConditioningDirty()
Definition RigidParticleControlFlags.h:135
bool GetInertiaConditioningDirty() const
Definition RigidParticleControlFlags.h:134
FFlags Flags
Definition RigidParticleControlFlags.h:160
void ClearIsMovingKinematic()
Definition RigidParticleControlFlags.h:147
void ClearUseIgnoreCollisionManager()
Definition RigidParticleControlFlags.h:141
void SetUseIgnoreCollisionManager()
Definition RigidParticleControlFlags.h:140
Definition SkeletalMeshComponent.h:307