UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CCDModification.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#include "ParticleHandleFwd.h"
6
7namespace Chaos
8{
9 class FCCDModifier;
10 class FCCDModifierAccessor;
11 class FCCDModifierParticleIterator;
12 class FCCDModifierParticleRange;
13 class FPBDCollisionConstraint;
14
15 /*
16 * Allows the user to modify the results of CCD collision detection prior to the CCD rewind being
17 * applied. This is in addition to the midphase modification phase which happens before collision
18 * detection has been run, and the contact modifier phase which happens after we have rewound
19 *
20 * The CCD "contact" details reported here do not necessarily represent the contact details
21 * that will be used in the contact solving phase. The CCD data provides raw first-touch data from
22 * a swept collision detection test, but we will be rebuilding a full contact manifold at the
23 * post-CCD position. The CCD normal and position here are not used again. For example, it is not
24 * a good idea to use the CCD data to categorize collisions as wall or floor contacts. If you need
25 * to know the actual contact positions and normals that will be used in the contact reoslution
26 * phase, then see FCollisionContactModifier.
27 *
28 * @see FMidPhaseModifier, FContactPairModifier
29 */
31 {
32 public:
34 : Constraint(nullptr)
35 {}
36
37 bool IsValid() const
38 {
39 return Constraint != nullptr;
40 }
41
42 //
43 // Accessor functions
44 //
45
46 // Whether the two particle actually hit each other in the sweep
47 CHAOS_API bool IsSweepHit() const;
48
49 // Get the time of impact. This is as a fraction of total movement and will be in the range [0,1] if a hit was found
51
52 // Get the sweep impact position for the specified body
53 // NOTE: See class comments.
54 CHAOS_API FVec3 GetWorldSweepHitLocation(const int32 ParticleIndex) const;
55
56 // Get the sweep impact normal
57 // NOTE: See class comments.
59
60 CHAOS_API const FGeometryParticleHandle* GetParticle(const int32 ParticleIndex) const;
62
63 //
64 // Modifying functions
65 //
66
67 // Re-enable this contact (if it was previously disabled)
68 CHAOS_API void Enable();
69
70 // Disable this contact
71 CHAOS_API void Disable();
72
73 // Convert this contact to a probe
75
76 private:
80 : Accessor(InAccessor)
81 , Constraint(InConstraint)
82 {}
83
84 void Reset()
85 {
86 Accessor = nullptr;
87 Constraint = nullptr;
88 }
89
90 FCCDModifierAccessor* Accessor;
91 FPBDCollisionConstraint* Constraint;
92
94 };
95
96 /*
97 * Class for iterating over ccd results involving a specific particle
98 */
100 {
101 public:
103 {
104 return PairModifier;
105 }
106
108 {
109 return &PairModifier;
110 }
111
113 {
114 return MoveToNext();
115 }
116
117 explicit operator bool() const
118 {
119 return PairModifier.IsValid();
120 }
121
123 {
124 return (L.Range == R.Range) && (L.ConstraintIndex == R.ConstraintIndex);
125 }
126
128 {
129 return !(L == R);
130 }
131
132 private:
134 : Range(InRange)
135 , ConstraintIndex(INDEX_NONE)
136 {
137 }
138
139 CHAOS_API FCCDModifierParticleIterator& MoveToBegin();
140 CHAOS_API FCCDModifierParticleIterator& MoveToEnd();
141 CHAOS_API FCCDModifierParticleIterator& MoveToNext();
142
144 int32 ConstraintIndex;
145 FCCDModifier PairModifier;
146
148 };
149
150 /*
151 * Represents all the swept constraints on a particle to allow for iteration.
152 */
154 {
155 public:
159
162
163 private:
164 FCCDModifierAccessor* GetAccessor() const { return Accessor; }
165 FGeometryParticleHandle* GetParticle() const { return Particle; }
166 int32 GetNumConstraints() const { return Constraints.Num(); }
167 FPBDCollisionConstraint* GetConstraint(const int32 Index) const { return Constraints[Index]; }
168 CHAOS_API void CollectConstraints();
169
170 FCCDModifierAccessor* Accessor;
171 FGeometryParticleHandle* Particle;
173
175 };
176
177 /*
178 * Provides access to CCD modifiers
179 */
181 {
182 public:
184
185 // Get an object which allows for range iteration over the CCD modifiers for a particle
187
188 FReal GetDt() const
189 {
190 return Dt;
191 }
192
193 private:
194 FReal Dt;
195 };
196}
@ 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
const bool
Definition NetworkReplayStreaming.h:178
Definition CCDModification.h:181
CHAOS_API FCCDModifierParticleRange GetModifiers(FGeometryParticleHandle *Particle)
Definition CCDModification.cpp:209
FReal GetDt() const
Definition CCDModification.h:188
Definition CCDModification.h:100
friend class FCCDModifierParticleRange
Definition CCDModification.h:147
FCCDModifierParticleIterator & operator++()
Definition CCDModification.h:112
friend bool operator==(const FCCDModifierParticleIterator &L, const FCCDModifierParticleIterator &R)
Definition CCDModification.h:122
friend bool operator!=(const FCCDModifierParticleIterator &L, const FCCDModifierParticleIterator &R)
Definition CCDModification.h:127
FCCDModifier * operator->()
Definition CCDModification.h:107
FCCDModifier & operator*()
Definition CCDModification.h:102
Definition CCDModification.h:154
CHAOS_API FCCDModifierParticleIterator end()
Definition CCDModification.cpp:180
CHAOS_API FCCDModifierParticleIterator begin()
Definition CCDModification.cpp:175
Definition CCDModification.h:31
CHAOS_API void Disable()
Definition CCDModification.cpp:110
bool IsValid() const
Definition CCDModification.h:37
CHAOS_API const FGeometryParticleHandle * GetOtherParticle(const FGeometryParticleHandle *InParticle) const
Definition CCDModification.cpp:83
CHAOS_API void ConvertToProbe()
Definition CCDModification.cpp:119
CHAOS_API const FGeometryParticleHandle * GetParticle(const int32 ParticleIndex) const
Definition CCDModification.cpp:64
CHAOS_API void Enable()
Definition CCDModification.cpp:101
CHAOS_API FReal GetSweepHitTOI() const
Definition CCDModification.cpp:21
CHAOS_API FVec3 GetWorldSweepHitNormal() const
Definition CCDModification.cpp:49
CHAOS_API bool IsSweepHit() const
Definition CCDModification.cpp:12
FCCDModifier()
Definition CCDModification.h:33
CHAOS_API FVec3 GetWorldSweepHitLocation(const int32 ParticleIndex) const
Definition CCDModification.cpp:30
A contact constraint.
Definition PBDCollisionConstraint.h:225
Definition ParticleHandle.h:436
Definition Constraints.Build.cs:6
Definition Array.h:670
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
U16 Index
Definition radfft.cpp:71