UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MidPhaseModification.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"
6#include "ParticleHandleFwd.h"
7
8namespace Chaos
9{
10 namespace Private
11 {
12 class FCollisionConstraintAllocator; // Container for solver's constraints and midphase pairs
13 }
14 class FParticlePairMidPhase; // The underlying midphase type
15 class FMidPhaseModifier; // Modifier for a particular midphase
16 class FMidPhaseModifierAccessor; // Access class for all midphase pair modifiers
17
18 /*
19 * Wrapper around a MidPhase object which exposes limited access and manipulation functions.
20 * Also contains the Modifier, which is responsible for iterating over PairModifiers, and
21 * storing and executing requested modifications.
22 */
24 {
25 public:
27 : MidPhase(nullptr)
28 , Accessor(nullptr)
29 {}
30
35
36 // Since a modifier can be invalid (ie, null midphase and/or accessor), make it
37 // castable to bool so that users can check validity.
38 bool IsValid() const
39 {
40 return
41 MidPhase != nullptr &&
42 Accessor != nullptr;
43 }
44
45 //
46 // Modifying functions
47 //
48
49 // Disable this midphase entirely
50 CHAOS_API void Disable();
51
52 // Disable CCD for this pair
53 CHAOS_API void DisableCCD();
54
55 // Disable convex optimization for this pair
57
58 //
59 // Accessor functions
60 //
61
62 CHAOS_API void GetParticles(FGeometryParticleHandle** Particle0, FGeometryParticleHandle** Particle1) const;
63
65
67
68 private:
69
70 FParticlePairMidPhase* MidPhase;
72 };
73
74 /*
75 * Class for iterating over midphases involving a specific particle
76 */
78 {
79 public:
84 : Particle(InParticle)
85 , Accessor(InAccessor)
86 , MidPhaseIndex(InMidPhaseIndex)
87 , PairModifier(Particle->ParticleCollisions().GetMidPhase(MidPhaseIndex), Accessor)
88 { }
89
91 {
92 return PairModifier;
93 }
94
96 {
97 return &PairModifier;
98 }
99
101 {
102 ++MidPhaseIndex;
103 PairModifier = FMidPhaseModifier(Particle->ParticleCollisions().GetMidPhase(MidPhaseIndex), Accessor);
104 return *this;
105 }
106
107 explicit operator bool() const
108 {
109 return MidPhaseIndex < Particle->ParticleCollisions().Num();
110 }
111
113 {
114 return MidPhaseIndex == Other.MidPhaseIndex;
115 }
116
118 {
119 return !operator==(Other);
120 }
121
122 private:
125 int32 MidPhaseIndex;
126 FMidPhaseModifier PairModifier;
127
129 };
130
131 /*
132 * A range-iterable object for accessing all mid-phases which include a particular particle
133 */
135 {
136 public:
139
140 private:
143 : Accessor(InAccessor)
144 , Particle(InParticle) { }
145
147 FGeometryParticleHandle* Particle;
148
149 // Befriend the accessor so that it alone can instantiate this range object
151 };
152
153 /*
154 * Provides interface for accessing midphase pair modifiers
155 */
157 {
158 public:
162
163 // Get an object which allows for range iteration over the list of
164 // midphases for a particle
166
167 // Get a midphase modifier for a particular object pair
169
170 // Provide visitor access to all midphase modifiers
171 CHAOS_API void VisitMidPhases(const TFunction<void(FMidPhaseModifier&)>& Visitor);
172
173 private:
174 friend class FMidPhaseModifier;
175
176 FPBDRigidsEvolutionGBF& GetEvolution() { return Evolution; }
177
178 FPBDRigidsEvolutionGBF& Evolution;
179 };
180}
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
Definition MidPhaseModification.h:157
CHAOS_API FMidPhaseModifier GetMidPhase(FGeometryParticleHandle *Particle0, FGeometryParticleHandle *Particle1)
Definition MidPhaseModification.cpp:105
CHAOS_API void VisitMidPhases(const TFunction< void(FMidPhaseModifier &)> &Visitor)
Definition MidPhaseModification.cpp:133
CHAOS_API FMidPhaseModifierParticleRange GetMidPhases(FGeometryParticleHandle *Particle)
Definition MidPhaseModification.cpp:100
FMidPhaseModifierAccessor(FPBDRigidsEvolutionGBF &InEvolution)
Definition MidPhaseModification.h:159
Definition MidPhaseModification.h:78
FMidPhaseModifierParticleIterator & operator++()
Definition MidPhaseModification.h:100
bool operator==(const FMidPhaseModifierParticleIterator &Other) const
Definition MidPhaseModification.h:112
FMidPhaseModifier & operator*()
Definition MidPhaseModification.h:90
FMidPhaseModifier * operator->()
Definition MidPhaseModification.h:95
bool operator!=(const FMidPhaseModifierParticleIterator &Other) const
Definition MidPhaseModification.h:117
FMidPhaseModifierParticleIterator(FMidPhaseModifierAccessor *InAccessor, TGeometryParticleHandle< FReal, 3 > *InParticle, int32 InMidPhaseIndex=0)
Definition MidPhaseModification.h:80
Definition MidPhaseModification.h:135
CHAOS_API FMidPhaseModifierParticleIterator begin() const
Definition MidPhaseModification.cpp:90
CHAOS_API FMidPhaseModifierParticleIterator end() const
Definition MidPhaseModification.cpp:95
Definition MidPhaseModification.h:24
FMidPhaseModifier(FParticlePairMidPhase *InMidPhase, FMidPhaseModifierAccessor *InAccessor)
Definition MidPhaseModification.h:31
CHAOS_API void DisableConvexOptimization()
Definition MidPhaseModification.cpp:24
bool IsValid() const
Definition MidPhaseModification.h:38
CHAOS_API void Disable()
Definition MidPhaseModification.cpp:14
CHAOS_API FGeometryParticleHandle * GetOtherParticle(const FGeometryParticleHandle *InParticle)
Definition MidPhaseModification.cpp:54
CHAOS_API void DisableCCD()
Definition MidPhaseModification.cpp:19
CHAOS_API void GetParticles(FGeometryParticleHandle **Particle0, FGeometryParticleHandle **Particle1) const
Definition MidPhaseModification.cpp:46
FMidPhaseModifier()
Definition MidPhaseModification.h:26
Definition PBDRigidsEvolutionGBF.h:51
Produce collisions for a particle pair A FParticlePairMidPhase object is created for every particle p...
Definition ParticlePairMidPhase.h:192
Definition ParticleHandle.h:436
Definition AndroidPlatformMisc.h:14
Definition SkeletalMeshComponent.h:307
Definition OverriddenPropertySet.cpp:45