21 class FCollisionConstraintAllocator;
24 class FParticlePairMidPhaseCollisionKey;
81 return Constraint.
IsValid() && (LastUsedEpoch >= Epoch);
94 const FVec3f& RelativeMovement,
107 const FVec3f& RelativeMovement,
118 const int32 CurrentEpoch);
132 const FVec3f& RelativeMovement,
138 const FVec3f& RelativeMovement,
145 const FVec3f& RelativeMovement,
154 const FVec3f& RelativeMovement,
155 const int32 CurrentEpoch);
161 const FReal CullDistance,
277 const FReal CullDistance,
294 template<
typename TLambda>
302 template<
typename TLambda>
356 UE_DEPRECATED(5.6,
"Use SetConvexOptimizationIsActive which takes an OnDestroyingCollision functor")
399 const FVec3f& RelativeMovement,
452 friend ::FChaosVDDataWrapperUtils;
476 const
FVec3f& RelativeMovement,
488 const
int32 ShapeIndex1);
521 const
FVec3f& RelativeMovement,
536 CHAOS_API void GenerateCollisionsBVHImplicitHierarchy(
542 CHAOS_API void GenerateCollisionsImplicitHierarchyImplicitHierarchy(
548 CHAOS_API void GenerateCollisionsBVHImplicitLeaf(
554 CHAOS_API void GenerateCollisionsImplicitLeafImplicitLeaf(
609 const
FVec3f& RelativeMovement,
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
Definition BVHParticles.h:24
Definition CollisionContext.h:83
Definition ParticlePairMidPhase.h:507
Definition ImplicitObject.h:111
A contact constraint.
Definition PBDCollisionConstraint.h:225
Definition ParticlePairMidPhase.cpp:238
Produce collisions for a particle pair A FParticlePairMidPhase object is created for every particle p...
Definition ParticlePairMidPhase.h:192
int32 GetParticleCollisionsIndex(FGeometryParticleHandle *InParticle) const
Cookie for use by FParticleCollisions.
Definition ParticlePairMidPhase.h:308
UE_NONCOPYABLE(FParticlePairMidPhase)
virtual int32 GenerateCollisionsImpl(const FRealSingle Dt, const FRealSingle CullDistance, const FVec3f &RelativeMovement, const FCollisionContext &Context)=0
virtual void InjectCollisionImpl(const FPBDCollisionConstraint &Constraint, const FCollisionContext &Context)=0
void SetParticleCollisionsIndex(FGeometryParticleHandle *InParticle, const int32 InIndex)
Cookie for use by FParticleCollisions.
Definition ParticlePairMidPhase.h:324
FGeometryParticleHandle * GetParticle0() const
Definition ParticlePairMidPhase.h:219
int32 LastUsedEpoch
Definition ParticlePairMidPhase.h:445
virtual CHAOS_API ~FParticlePairMidPhase()
Definition ParticlePairMidPhase.cpp:788
static CHAOS_API FParticlePairMidPhase * Make(FGeometryParticleHandle *InParticle0, FGeometryParticleHandle *InParticle1)
Definition ParticlePairMidPhase.cpp:846
bool IsUsedSince(const int32 Epoch) const
Have we run collision detection since this Epoch (inclusive)
Definition ParticlePairMidPhase.h:236
FGeometryParticleHandle * Particle0
Definition ParticlePairMidPhase.h:438
FRealSingle CullDistanceScale
Definition ParticlePairMidPhase.h:441
CHAOS_API void InjectCollision(const FPBDCollisionConstraint &Constraint, const FCollisionContext &Context)
Copy a collision and activate it This is used by the Resim system to restore saved colisions....
Definition ParticlePairMidPhase.cpp:1064
bool IsSleeping() const
Whether the particle pair is sleeping and therefore contacts should not be culled (they will be reuse...
Definition ParticlePairMidPhase.h:245
bool IsCCD() const
Definition ParticlePairMidPhase.h:373
void SetIsActive(bool bIsActive)
By default midphases are active. If IsActive is set to false, this midphase will not generate a narro...
Definition ParticlePairMidPhase.h:341
FFlags Flags
Definition ParticlePairMidPhase.h:436
CHAOS_API void ResetModifications()
Definition ParticlePairMidPhase.cpp:891
bool IsValid() const
Definition ParticlePairMidPhase.h:225
bool IsCCDActive() const
Definition ParticlePairMidPhase.h:381
static CHAOS_API EParticlePairMidPhaseType CalculateMidPhaseType(FGeometryParticleHandle *InParticle0, FGeometryParticleHandle *InParticle1)
Definition ParticlePairMidPhase.cpp:792
virtual void WakeCollisionsImpl(const int32 CurrentEpoch)=0
virtual void ResetImpl()=0
CHAOS_API void GenerateCollisions(const FReal CullDistance, const FReal Dt, const FCollisionContext &Context)
Create collision constraints for all colliding shape pairs.
Definition ParticlePairMidPhase.cpp:988
void SetConvexOptimizationIsActive(bool bSetConvexOptimizationIsActive)
Definition ParticlePairMidPhase.h:357
ECollisionVisitorResult VisitConstCollisions(const TLambda &Visitor, const ECollisionVisitorFlags VisitFlags=ECollisionVisitorFlags::VisitDefault) const
Call a lambda on each active collision constraint.
Definition CollisionConstraintAllocator.h:715
EParticlePairMidPhaseType GetMidPhaseType() const
Definition ParticlePairMidPhase.h:202
virtual void BuildDetectorsImpl()=0
Build the list of potentially colliding shape pairs. This is all the shape pairs in the partilces' sh...
CHAOS_API void DetachParticle(FGeometryParticleHandle *Particle)
Destroy all collisions and prevent this midphasae from being used any more. Called when one of its pa...
Definition ParticlePairMidPhase.cpp:863
int32 NumActiveConstraints
Definition ParticlePairMidPhase.h:446
int32 ParticleCollisionsIndex0
Definition ParticlePairMidPhase.h:449
const Private::FCollisionParticlePairKey & GetKey() const
Definition ParticlePairMidPhase.h:223
CHAOS_API bool IsInConstraintGraph() const
Definition ParticlePairMidPhase.cpp:1106
FGeometryParticleHandle * Particle1
Definition ParticlePairMidPhase.h:439
EParticlePairMidPhaseType MidPhaseType
Definition ParticlePairMidPhase.h:435
CHAOS_API void Reset()
Delete all cached data and collisions. Should be called when a particle changes its shapes.
Definition ParticlePairMidPhase.cpp:877
void CachePrefetch()
Definition ParticlePairMidPhase.h:228
FGeometryParticleHandle * GetParticle1() const
Definition ParticlePairMidPhase.h:221
void SetCCDIsActive(bool bCCDIsActive)
Override the CCD condition for this mid-phase. Used by the MidPhase modifier and gets reset every fra...
Definition ParticlePairMidPhase.h:350
CHAOS_API bool ShouldEnableCCDSweep(const FReal Dt)
Decide whether we should have CCD enabled on this constraint.
Definition ParticlePairMidPhase.cpp:943
CHAOS_API void InitThresholds()
Definition ParticlePairMidPhase.cpp:966
CHAOS_API void SetIsSleeping(const bool bInIsSleeping, const int32 CurrentEpoch)
Update the sleeping state If this switches the state to Awake, it will reactivate any collisions betw...
Definition ParticlePairMidPhase.cpp:1071
ECollisionVisitorResult VisitCollisions(const TLambda &Visitor, const ECollisionVisitorFlags VisitFlags=ECollisionVisitorFlags::VisitDefault)
Call a lambda on each active collision constraint This includes sleeping constraints,...
Definition CollisionConstraintAllocator.h:659
Private::FCollisionParticlePairKey ParticlePairKey
Definition ParticlePairMidPhase.h:443
int32 ParticleCollisionsIndex1
Definition ParticlePairMidPhase.h:450
virtual void SetConvexOptimizationIsActive(bool bSetConvexOptimizationIsActive, TFunctionRef< void(FPBDCollisionConstraint *)> OnDestroyingCollision)
Override whether convex optimization if used this mid-phase. Used by the MidPhase modifier and gets r...
Definition ParticlePairMidPhase.h:368
Definition ShapeInstance.h:36
Definition ShapeInstance.h:554
Definition ParticlePairMidPhase.h:463
virtual CHAOS_API void WakeCollisionsImpl(const int32 CurrentEpoch) override final
Definition ParticlePairMidPhase.cpp:1222
CHAOS_API FShapePairParticlePairMidPhase()
Definition ParticlePairMidPhase.cpp:1129
virtual CHAOS_API void InjectCollisionImpl(const FPBDCollisionConstraint &Constraint, const FCollisionContext &Context) override final
Definition ParticlePairMidPhase.cpp:1230
virtual CHAOS_API void ResetImpl() override final
Definition ParticlePairMidPhase.cpp:1135
virtual CHAOS_API void BuildDetectorsImpl() override final
Build the list of potentially colliding shape pairs. This is all the shape pairs in the partilces' sh...
Definition ParticlePairMidPhase.cpp:1140
virtual CHAOS_API int32 GenerateCollisionsImpl(const FRealSingle Dt, const FRealSingle CullDistance, const FVec3f &RelativeMovement, const FCollisionContext &Context) override final
Definition ParticlePairMidPhase.cpp:1194
Handles collision detection for a pair of simple shapes (i.e., not compound shapes)
Definition ParticlePairMidPhase.h:50
FSingleShapePairCollisionDetector(const FSingleShapePairCollisionDetector &R)=delete
int32 GenerateCollisionCCD(const bool bEnableCCDSweep, const FReal CullDistance, const FReal Dt, const FCollisionContext &Context)
Generate a SweptConstraint as long as AABBs overlap.
Definition ParticlePairMidPhase.h:102
CHAOS_API void WakeCollision(const int32 SleepEpoch, const int32 CurrentEpoch)
Reactivate the constraint @parame SleepEpoch The tick on which the particle went to sleep....
Definition ParticlePairMidPhase.cpp:718
CHAOS_API void SetCollision(const FPBDCollisionConstraint &Constraint, const FCollisionContext &Context)
Set the collision from the parameter and activate it This is used by the Resim restore functionality.
Definition ParticlePairMidPhase.cpp:746
const FPerShapeData * GetShape0() const
Definition ParticlePairMidPhase.h:73
FGeometryParticleHandle * GetParticle1()
Definition ParticlePairMidPhase.h:72
const FGeometryParticleHandle * GetParticle0() const
Definition ParticlePairMidPhase.h:69
int32 GenerateCollision(const FReal CullDistance, const FReal Dt, const FCollisionContext &Context)
Perform a bounds check and run the narrow phase if necessary.
Definition ParticlePairMidPhase.h:89
CHAOS_API ~FSingleShapePairCollisionDetector()
Definition ParticlePairMidPhase.cpp:355
FGeometryParticleHandle * GetParticle0()
Definition ParticlePairMidPhase.h:70
const FPerShapeData * GetShape1() const
Definition ParticlePairMidPhase.h:74
FSingleShapePairCollisionDetector & operator=(const FSingleShapePairCollisionDetector &R)=delete
const FGeometryParticleHandle * GetParticle1() const
Definition ParticlePairMidPhase.h:71
bool IsUsedSince(const int32 Epoch) const
Have we run collision detection since this Epoch (inclusive)
Definition ParticlePairMidPhase.h:79
const FPBDCollisionConstraint * GetConstraint() const
Definition ParticlePairMidPhase.h:67
FPBDCollisionConstraint * GetConstraint()
Definition ParticlePairMidPhase.h:68
Definition ParticlePairMidPhase.h:596
Definition CollisionKeys.h:59
Definition CollisionKeys.h:261
Definition ParticleHandle.h:436
Definition Constraints.Build.cs:6
Definition ChaosVDDataWrapperUtils.h:77
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition ContainerAllocationPolicies.h:894
bool IsValid() const
Definition UniquePtr.h:280
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
Definition SkeletalMeshComponent.h:307
TVector< FRealSingle, 3 > FVec3f
Definition Core.h:27
FRealDouble FReal
Definition Real.h:22
float FRealSingle
Definition Real.h:14
EContactShapesType
Definition CollisionResolutionTypes.h:55
EParticlePairMidPhaseType
Definition ParticlePairMidPhase.h:30
@ Generic
Definition ParticlePairMidPhase.h:33
@ ShapePair
Definition ParticlePairMidPhase.h:38
@ SphereApproximation
Definition ParticlePairMidPhase.h:41
ECollisionVisitorResult
Return value in collision visitors to indicate whether we should continue visiting for stop.
Definition CollisionVisitor.h:14
ECollisionVisitorFlags
Definition CollisionVisitor.h:23
Definition OverriddenPropertySet.cpp:45
Definition ParticlePairMidPhase.h:417
uint16 bIsCCDActive
Definition ParticlePairMidPhase.h:423
uint16 bIsMACD
Definition ParticlePairMidPhase.h:425
uint16 Bits
Definition ParticlePairMidPhase.h:431
uint16 bIsModified
Definition ParticlePairMidPhase.h:429
FFlags()
Definition ParticlePairMidPhase.h:418
uint16 bIsConvexOptimizationActive
Definition ParticlePairMidPhase.h:426
uint16 bIsCCD
Definition ParticlePairMidPhase.h:422
uint16 bIsConvexOptimizationUsed
Definition ParticlePairMidPhase.h:427
uint16 bUseSweep
Definition ParticlePairMidPhase.h:424
uint16 bIsSleeping
Definition ParticlePairMidPhase.h:428
uint16 bIsActive
Definition ParticlePairMidPhase.h:421
Definition PBDCollisionConstraint.h:138