UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IterationSettings.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Chaos/Core.h"
5
6#include <limits>
7
8namespace Chaos
9{
10 namespace Private
11 {
17 template<typename TIndexType>
19 {
20 private:
21 using FIndexType = TIndexType;
22 FIndexType NumPositionIterations;
23 FIndexType NumVelocityIterations;
24 FIndexType NumProjectionIterations;
25
26 public:
28 static const int32 MaxIterations = std::numeric_limits<FIndexType>::max();
29
34
35 // Merge (take the max) of the two iteration settings objects. Returned object has index type of the first parameter.
36 template<typename TOtherIndex>
38 {
40 FMath::Max((int32)L.NumPositionIterations, (int32)R.NumPositionIterations),
41 FMath::Max((int32)L.NumVelocityIterations, (int32)R.NumVelocityIterations),
42 FMath::Max((int32)L.NumProjectionIterations, (int32)R.NumProjectionIterations)
43 );
44 }
45
47 : NumPositionIterations(InvalidIterations)
48 , NumVelocityIterations(InvalidIterations)
49 , NumProjectionIterations(InvalidIterations)
50 {
51 }
52
54 {
58 }
59
60 int32 GetNumPositionIterations() const { return NumPositionIterations; }
61 int32 GetNumVelocityIterations() const { return NumVelocityIterations; }
62 int32 GetNumProjectionIterations() const { return NumProjectionIterations; }
63
64 void SetNumPositionIterations(const int32 InNum) { NumPositionIterations = FIndexType(FMath::Clamp(InNum, InvalidIterations, MaxIterations)); }
65 void SetNumVelocityIterations(const int32 InNum) { NumVelocityIterations = FIndexType(FMath::Clamp(InNum, InvalidIterations, MaxIterations)); }
66 void SetNumProjectionIterations(const int32 InNum) { NumProjectionIterations = FIndexType(FMath::Clamp(InNum, InvalidIterations, MaxIterations)); }
67
68 friend bool operator==(const TIterationSettings& L, const TIterationSettings& R)
69 {
70 return (L.NumPositionIterations == R.NumPositionIterations) && (L.NumVelocityIterations == R.NumVelocityIterations) && (L.NumProjectionIterations == R.NumProjectionIterations);
71 }
72
73 friend bool operator!=(const TIterationSettings& L, const TIterationSettings& R)
74 {
75 return !(L == R);
76 }
77 };
78
79 // NOTE: only use signed types (or modify how we handle TIterationSettings::InvalidIterations above)
82
84 }
85}
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
Definition IterationSettings.h:19
void SetNumPositionIterations(const int32 InNum)
Definition IterationSettings.h:64
friend bool operator==(const TIterationSettings &L, const TIterationSettings &R)
Definition IterationSettings.h:68
static TIterationSettings< FIndexType > Merge(const TIterationSettings< FIndexType > &L, const TIterationSettings< TOtherIndex > &R)
Definition IterationSettings.h:37
void SetNumVelocityIterations(const int32 InNum)
Definition IterationSettings.h:65
static const int32 MaxIterations
Definition IterationSettings.h:28
int32 GetNumVelocityIterations() const
Definition IterationSettings.h:61
int32 GetNumPositionIterations() const
Definition IterationSettings.h:60
static const int32 InvalidIterations
Definition IterationSettings.h:27
int32 GetNumProjectionIterations() const
Definition IterationSettings.h:62
friend bool operator!=(const TIterationSettings &L, const TIterationSettings &R)
Definition IterationSettings.h:73
static TIterationSettings< FIndexType > MakeEmpty()
Definition IterationSettings.h:30
void SetNumProjectionIterations(const int32 InNum)
Definition IterationSettings.h:66
TIterationSettings< int8 > FIterationSettings8
Definition IterationSettings.h:80
Definition SkeletalMeshComponent.h:307
Definition OverriddenPropertySet.cpp:45
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592