UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SimModuleTree.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
9
10#include "SimModuleTree.generated.h"
11
12#define UE_API CHAOSVEHICLESCORE_API
13
15
16UENUM(BlueprintType)
18{
19 ManualOverride = 0, // User calls simulate on the child modules
20 LeafFirst = 1, // modules simulation from the leaf first
21 RootFirst = 2, // modules simulate from the root first
22 LeafFirstBFS = 3
23};
24
26namespace Chaos
27{
28 class ISimulationModuleBase;
29 class FClusterUnionPhysicsProxy;
30 struct FAllInputs;
31
40
46
47 // Each update tree has it's own local tree hierarchy, this will be translated into the actual tree hierarchy.
49 {
50 public:
52 {
53 NewModules.Add(FPendingModuleAdds(-1, NewSimModuleIn));
54 return NewModules.Num()-1;
55 }
56
58 {
59 NewModules.Add(FPendingModuleAdds(ParentIndex, NewSimModuleIn));
60 return NewModules.Num() - 1;
61 }
62
63 void RemoveNode(int Guid)
64 {
65 DeletedModules.Add(FPendingModuleDeletions(Guid));
66 }
67
69 {
70 NewModules.Empty();
71 DeletedModules.Empty();
72 }
73
74 const TArray<FPendingModuleAdds>& GetNewModules() const { return NewModules; }
75 const TArray<FPendingModuleDeletions>& GetDeletedModules() const { return DeletedModules; }
76
79
80 private:
83 };
84
96
98 {
100
101 public:
103 {
105 : SimModule(nullptr)
107 {
108 }
109
110 bool IsValid() const { return (SimModule != nullptr); }
111
115
116 const static int INVALID_IDX = -1;
117
118 };
119
127
133
134 void Reset()
135 {
137 }
138
139 bool IsEmpty() const { return SimulationModuleTree.IsEmpty(); }
140 int GetParent(int Index) const { check(!SimulationModuleTree.IsEmpty()); return SimulationModuleTree[Index].Parent; }
141 const TSet<int>& GetChildren(int Index) const { check(!SimulationModuleTree.IsEmpty()); return SimulationModuleTree[Index].Children; }
142 const ISimulationModuleBase* GetSimModule(int Index) const { return IsValidNode(Index) ? SimulationModuleTree[Index].SimModule : nullptr; }
144 bool IsValidNode(int Index) const { return (SimulationModuleTree.IsEmpty() || Index >= SimulationModuleTree.Num()) ? false : true; }
145 int NumActiveNodes() const { return SimulationModuleTree.Num() - FreeList.Num(); }
147 int GetNumNodes() const { return SimulationModuleTree.Num(); }
149
150 UE_API int AddRoot(ISimulationModuleBase* SimModule);
151
152 UE_API void Reparent(int Index, int ParentIndex);
154
156
158
159 UE_API void DeleteNode(int AtIndex);
160
162
163 UE_API void Simulate(float DeltaTime, FAllInputs& Inputs, IPhysicsProxyBase* PhysicsProxy, Chaos::FPBDRigidParticleHandle* RootParticle);
164
166
168
172
177
178
180 {
181 return VehicleState;
182 }
183
184 template <typename T>
186 {
188 {
189 if (Node.SimModule && Node.SimModule->IsSimType<T>())
190 {
191 return &Node;
192 }
193 }
194
195 return nullptr;
196 }
197
199 {
200 int LargestIndex = -1;
201 for (int I = 0; I < GetNumNodes(); I++)
202 {
204 {
205 if (SimModule->GetTransformIndex() > LargestIndex)
206 {
207 LargestIndex = SimModule->GetTransformIndex();
208 }
209 }
210 }
211 return LargestIndex;
212 }
213
218
223
224 UE_API void SimulateNode(float DeltaTime, FAllInputs& Inputs, int NodeIdx, IPhysicsProxyBase* PhysicsProxy, Chaos::FPBDRigidParticleHandle* ParticleHandle);
225 protected:
226
227 UE_API void OnContactModificationInternal(int NodeIndex, FCollisionContactModifier& Modifier, IPhysicsProxyBase* PhysicsProxy);
228
229 UE_API void SimulateNodeBFS(float DeltaTime, FAllInputs& Inputs, const TArray<int>& RootNodes, IPhysicsProxyBase* PhysicsProxy, Chaos::FPBDRigidParticleHandle* ParticleHandle);
230
231 UE_API void DeleteNodesBelow(int NodeIdx);
232
233 UE_API int GetNextIndex();
234
236
237
240
243
245
247
250
253
255 };
256
257
258
259
260} // namespace Chaos
261
262#undef UE_API
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define TEXT(x)
Definition Platform.h:1272
#define DECLARE_STATS_GROUP(GroupDesc, GroupId, GroupCat)
Definition Stats.h:689
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UENUM(...)
Definition ObjectMacros.h:749
#define UE_API
Definition SColorGradingComponentViewer.h:12
ESimTreeProcessingOrder
Definition SimModuleTree.h:18
@ LeafFirst
Definition SimModuleTree.h:20
@ LeafFirstBFS
Definition SimModuleTree.h:22
@ ManualOverride
Definition SimModuleTree.h:19
@ RootFirst
Definition SimModuleTree.h:21
Definition ContactModification.h:512
Definition SimModuleTree.h:98
ISimulationModuleBase * AccessSimModule(int Index) const
Definition SimModuleTree.h:143
UE_API int InsertNodeAbove(int AtIndex, ISimulationModuleBase *SimModule)
Definition SimModuleTree.cpp:159
FSimModuleNode & GetNode(int Index)
Definition SimModuleTree.h:153
void SetSimulationEnabled(bool bInEnabled)
Definition SimModuleTree.h:175
TArray< int > FreeList
Definition SimModuleTree.h:242
void SetSimTreeProcessingOrder(ESimTreeProcessingOrder OrderIn)
Definition SimModuleTree.h:167
FDeferredForcesModular DeferredForces
Definition SimModuleTree.h:244
int GetParent(int Index) const
Definition SimModuleTree.h:140
void Reset()
Definition SimModuleTree.h:134
~FSimModuleTree()
Definition SimModuleTree.h:128
UE_API void SetNetState(Chaos::FModuleNetDataArray &ModuleDatas)
Definition SimModuleTree.cpp:553
UE_API void GenerateReplicationStructure(Chaos::FModuleNetDataArray &NetData)
Definition SimModuleTree.cpp:528
UE_API void DeleteNodesBelow(int NodeIdx)
Definition SimModuleTree.cpp:398
UE_API int AddRoot(ISimulationModuleBase *SimModule)
Definition SimModuleTree.cpp:34
UE_API void Simulate(float DeltaTime, FAllInputs &Inputs, IPhysicsProxyBase *PhysicsProxy, Chaos::FPBDRigidParticleHandle *RootParticle)
Definition SimModuleTree.cpp:223
UE_API void OnContactModificationInternal(int NodeIndex, FCollisionContactModifier &Modifier, IPhysicsProxyBase *PhysicsProxy)
Definition SimModuleTree.cpp:385
UE_API void UpdateModuleVelocites(IPhysicsProxyBase *PhysicsProxy, Chaos::FPBDRigidParticleHandle *RootParticle, bool bWake)
Definition SimModuleTree.cpp:432
int NumActiveNodes() const
Definition SimModuleTree.h:145
bool IsValidNode(int Index) const
Definition SimModuleTree.h:144
UE_API void AppendTreeUpdates(const FSimTreeUpdates &TreeUpdates)
Definition SimModuleTree.cpp:81
UE_API int GetNextIndex()
Definition SimModuleTree.cpp:141
int GetLargestComponentIndex()
Definition SimModuleTree.h:198
const TArray< FSimModuleNode > & GetSimulationModuleTree()
Definition SimModuleTree.h:171
Chaos::FAllInputs AllInputs
Definition SimModuleTree.h:246
ESimTreeProcessingOrder GetSimTreeProcessingOrder() const
Definition SimModuleTree.h:148
bool IsEmpty() const
Definition SimModuleTree.h:139
bool bSimulationEnabled
Definition SimModuleTree.h:249
UE_API void DeleteNode(int AtIndex)
Definition SimModuleTree.cpp:185
ESimTreeProcessingOrder SimTreeProcessingOrder
Definition SimModuleTree.h:252
UE_API void InterpolateState(const float LerpFactor, Chaos::FModuleNetDataArray &LerpDatas, const Chaos::FModuleNetDataArray &MinDatas, const Chaos::FModuleNetDataArray &MaxDatas)
Definition SimModuleTree.cpp:601
bool IsSimulationEnabled()
Definition SimModuleTree.h:176
UE_API void SetSimState(const Chaos::FModuleNetDataArray &ModuleDatas)
Definition SimModuleTree.cpp:579
void SetAnimationEnabled(bool bInEnabled)
Definition SimModuleTree.h:173
bool IsAnimationEnabled()
Definition SimModuleTree.h:174
bool bAnimationEnabled
Definition SimModuleTree.h:248
const ISimulationModuleBase * GetSimModule(int Index) const
Definition SimModuleTree.h:142
FVehicleBlackboard * GetSimBlackboard()
Definition SimModuleTree.h:219
FSimModuleNode * LocateNodeByType()
Definition SimModuleTree.h:185
UE_API void OnContactModification(FCollisionContactModifier &Modifier, IPhysicsProxyBase *PhysicsProxy)
Definition SimModuleTree.cpp:255
UE_API void SimulateNode(float DeltaTime, FAllInputs &Inputs, int NodeIdx, IPhysicsProxyBase *PhysicsProxy, Chaos::FPBDRigidParticleHandle *ParticleHandle)
Definition SimModuleTree.cpp:265
UE_API int AddNodeBelow(int AtIndex, ISimulationModuleBase *SimModule)
Definition SimModuleTree.cpp:62
int GetNumNodes() const
Definition SimModuleTree.h:147
UE_API void UpdateVehicleState(Chaos::FPBDRigidParticleHandle *RootParticle)
Definition SimModuleTree.cpp:507
FDeferredForcesModular & AccessDeferredForces()
Definition SimModuleTree.h:169
FSimModuleTree()
Definition SimModuleTree.h:120
TUniquePtr< FVehicleBlackboard > SimBlackboard
Definition SimModuleTree.h:254
UE_API void GetRootNodes(TArray< int > &RootNodesOut)
Definition SimModuleTree.cpp:418
UE_API void UpdateClusterUnionTransformsIfRequired(IPhysicsProxyBase *PhysicsProxy, ISimulationModuleBase *Module)
Definition SimModuleTree.cpp:309
const TSet< int > & GetChildren(int Index) const
Definition SimModuleTree.h:141
UE_API void Reparent(int Index, int ParentIndex)
Definition SimModuleTree.cpp:39
friend class FModularVehicleBuilder
Definition SimModuleTree.h:99
UE_API void SimulateNodeBFS(float DeltaTime, FAllInputs &Inputs, const TArray< int > &RootNodes, IPhysicsProxyBase *PhysicsProxy, Chaos::FPBDRigidParticleHandle *ParticleHandle)
Definition SimModuleTree.cpp:336
const FDeferredForcesModular & GetDeferredForces() const
Definition SimModuleTree.h:170
const FVehicleState & GetVehicleState() const
Definition SimModuleTree.h:179
FVehicleState VehicleState
Definition SimModuleTree.h:251
TArray< FSimModuleNode > SimulationModuleTree
Definition SimModuleTree.h:241
Definition SimModuleTree.h:49
const TArray< FPendingModuleDeletions > & GetDeletedModules() const
Definition SimModuleTree.h:75
void RemoveNode(int Guid)
Definition SimModuleTree.h:63
int AddRoot(ISimulationModuleBase *NewSimModuleIn)
Definition SimModuleTree.h:51
const TArray< FPendingModuleAdds > & GetNewModules() const
Definition SimModuleTree.h:74
TArray< FPendingModuleDeletions > & AccessDeletedModules()
Definition SimModuleTree.h:78
int AddNodeBelow(int ParentIndex, ISimulationModuleBase *NewSimModuleIn)
Definition SimModuleTree.h:57
TArray< FPendingModuleAdds > & AccessNewModules()
Definition SimModuleTree.h:77
void ClearUpdates()
Definition SimModuleTree.h:68
Definition SimulationModuleBase.h:299
Definition ParticleHandle.h:987
Definition DeferredForcesModular.h:28
Definition GeometryCollectionPhysicsProxy.h:143
Definition VehicleBlackboard.h:19
Definition PhysicsProxyBase.h:97
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition UniquePtr.h:107
void Reset(T *InPtr=nullptr)
Definition UniquePtr.h:346
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
Definition SkeletalMeshComponent.h:307
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition SimulationModuleBase.h:65
Definition SimModuleTree.h:33
ISimulationModuleBase * NewSimModule
Definition SimModuleTree.h:38
int ParentIndex
Definition SimModuleTree.h:37
FPendingModuleAdds(int ParentIndexIn, ISimulationModuleBase *NewSimModuleIn)
Definition SimModuleTree.h:34
Definition SimModuleTree.h:42
FPendingModuleDeletions(int GuidIn)
Definition SimModuleTree.h:43
int Guid
Definition SimModuleTree.h:44
Definition SimModuleTree.h:103
ISimulationModuleBase * SimModule
Definition SimModuleTree.h:112
static const int INVALID_IDX
Definition SimModuleTree.h:116
bool IsValid() const
Definition SimModuleTree.h:110
TSet< int > Children
Definition SimModuleTree.h:114
FSimModuleNode()
Definition SimModuleTree.h:104
int Parent
Definition SimModuleTree.h:113
Definition SimModuleTree.h:86
FVector ForwardDir
Definition SimModuleTree.h:90
FVector AngularVelocityRad
Definition SimModuleTree.h:93
FVector Position
Definition SimModuleTree.h:88
FVector RightDir
Definition SimModuleTree.h:91
FQuat Rotation
Definition SimModuleTree.h:89
FVector LinearVelocity
Definition SimModuleTree.h:94
float ForwardSpeedKmh
Definition SimModuleTree.h:87
FVector UpDir
Definition SimModuleTree.h:92