UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ParticleCollisions.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#include "Chaos/Core.h"
6
9
10namespace Chaos
11{
12 class FParticlePairMidPhase;
13
21 {
22 public:
23 // In a mostly stationary scene the choice of container doesn't matter much. In a highly dynamic
24 // scene it matters a lot. This was tested with TMap, TSortedMap, and TArray. TArray was better in all cases.
25 // We store the list of overlapping particle pairs for every particle. This list can get quite
26 // large for world objects. We need to make sure that Add / Remove are not O(N).
27 // We also search this list to find an existing MidPhase for a specific particle pair. However
28 // we always search the particle with the fewest overlaps, which will be a dynamic particle
29 // that should not have too many contacts.
31
34
35 inline int32 Num() const
36 {
37 return MidPhases.Num();
38 }
39
43 inline void Reset()
44 {
45 MidPhases.Reset();
46 }
47
55
60
65 {
66 if (MidPhases.IsValidIndex(InIndex))
67 {
68 return MidPhases[InIndex].Value;
69 }
70 return nullptr;
71 }
72
79 {
80 for (int32 Index = 0; Index < MidPhases.Num(); ++Index)
81 {
82 if (MidPhases[Index].Key == InKey)
83 {
84 return MidPhases[Index].Value;
85 }
86 }
87 return nullptr;
88 }
89
96 template<typename TLambda>
98
105 template<typename TLambda>
106 inline ECollisionVisitorResult VisitConstMidPhases(const TLambda& Lambda) const;
107
114 template<typename TLambda>
116
123 template<typename TLambda>
125
126 private:
127 FContainerType MidPhases;
128 };
129
130}
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Knows about all the collisions detectors associated with a particular particle. Used when particles a...
Definition ParticleCollisions.h:21
int32 Num() const
Definition ParticleCollisions.h:35
CHAOS_API void AddMidPhase(FGeometryParticleHandle *InParticle, FParticlePairMidPhase *InMidPhase)
Add a mid phase to the list We are passing the particle and midphase here rather than just the key be...
Definition ParticleCollisions.cpp:18
CHAOS_API void RemoveMidPhase(FGeometryParticleHandle *InParticle, FParticlePairMidPhase *InMidPhase)
Remove a mid phase.
Definition ParticleCollisions.cpp:29
FParticlePairMidPhase * GetMidPhase(const int32 InIndex)
Get a midphase by its index.
Definition ParticleCollisions.h:64
ECollisionVisitorResult VisitConstCollisions(const TLambda &Visitor, const ECollisionVisitorFlags VisitFlags=ECollisionVisitorFlags::VisitDefault) const
Visit all the collisions on this particle.
Definition CollisionConstraintAllocator.h:809
void Reset()
Clear the list of midphases. Only for use in shutdown.
Definition ParticleCollisions.h:43
ECollisionVisitorResult VisitMidPhases(const TLambda &Lambda)
Visit all of the midphases on the particle and call the specified function.
Definition CollisionConstraintAllocator.h:770
ECollisionVisitorResult VisitCollisions(const TLambda &Visitor, const ECollisionVisitorFlags VisitFlags=ECollisionVisitorFlags::VisitDefault)
Visit all the collisions on this particle.
Definition CollisionConstraintAllocator.h:796
CHAOS_API FParticleCollisions()
Definition ParticleCollisions.cpp:10
CHAOS_API ~FParticleCollisions()
Definition ParticleCollisions.cpp:14
FParticlePairMidPhase * FindMidPhase(const uint64 InKey)
Find the mid phase with the matching key.
Definition ParticleCollisions.h:78
ECollisionVisitorResult VisitConstMidPhases(const TLambda &Lambda) const
Visit all of the midphases on the particle and call the specified function.
Definition CollisionConstraintAllocator.h:783
TArray< TPair< uint64, FParticlePairMidPhase * > > FContainerType
Definition ParticleCollisions.h:30
Produce collisions for a particle pair A FParticlePairMidPhase object is created for every particle p...
Definition ParticlePairMidPhase.h:192
Definition ParticleHandle.h:436
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
Definition SkeletalMeshComponent.h:307
ECollisionVisitorResult
Return value in collision visitors to indicate whether we should continue visiting for stop.
Definition CollisionVisitor.h:14
ECollisionVisitorFlags
Definition CollisionVisitor.h:23
U16 Index
Definition radfft.cpp:71