33template <
typename TPayloadType,
typename T,
int d>
52template <
typename TPayloadType,
typename T,
int d>
61template <
typename TPayloadType,
typename T,
int d>
73template <
typename TPayloadType,
typename T,
int d>
83template <
typename TObj>
155template <
typename TObj>
180template<
int Idx,
typename ... Rest>
186template<
int Idx,
typename First,
typename... Rest>
193template<
typename First,
typename... Rest>
202template <
int Idx,
typename First,
typename... Rest>
208template <
int Idx,
typename First,
typename... Rest>
214template <
int TypeIdx,
int NumTypes,
typename Tuple,
typename TPayloadType,
typename T,
int d>
217 template <
typename SQVisitor>
232 return TSpatialAccelerationCollectionHelper<NextType < NumTypes ? NextType : 0, NumTypes, Tuple, TPayloadType, T, d>::RaycastFast(Types, Start,
CurData, Visitor, Dir, InvDir, bParallel);
238 template <
typename SQVisitor>
253 return TSpatialAccelerationCollectionHelper < NextType < NumTypes ? NextType : 0, NumTypes, Tuple, TPayloadType, T, d>::SweepFast(Types, Start,
CurData,
QueryHalfExtents, Visitor, Dir, InvDir, bParallel);
259 template <
typename SQVisitor>
312 static void Reset(
const Tuple& Types)
350 using AccelType =
typename std::remove_pointer<typename decltype(GetAccelerationsPerType<TypeIdx>(Types).Objects)::ElementType>::type;
351 if (AccelType::StaticType == Type)
368template <
typename SpatialAccelerationCollection>
374template <
typename SpatialAccelerationCollection>
382 typename std::tuple_element<0, std::tuple< TSpatialAccelerationTypes...>>::type::TType,
383 std::tuple_element<0, std::tuple< TSpatialAccelerationTypes...>>::type::D>
388 using T =
typename FirstAccelerationType::TType;
389 static constexpr int d = FirstAccelerationType::D;
474 using ThisType =
decltype(
this);
501 template <
typename SQVisitor>
505 TSpatialAccelerationCollectionHelper<0, NumTypes,
decltype(Types),
TPayloadType,
T,
d>::RaycastFast(Types, Start, QueryFastData, Visitor, QueryFastData.
Dir, QueryFastData.
InvDir, QueryFastData.
bParallel);
514 template <
typename SQVisitor>
518 TSpatialAccelerationCollectionHelper<0, NumTypes,
decltype(Types),
TPayloadType,
T,
d>::SweepFast(Types, Start, QueryFastData,
QueryHalfExtents, Visitor, QueryFastData.
Dir, QueryFastData.
InvDir, QueryFastData.
bParallel);
527 template <
typename SQVisitor>
533 template <
typename SQVisitor>
559 template <
typename TVisitor>
568 if (Entry.Acceleration)
602 if (!(Idx == SpatialIdx))
605 const bool bRemoved = Buckets[
Buckt].
Objects[Idx.
InnerIdx].Acceleration->RemoveElement(Payload);
631 if (!(Idx == SpatialIdx))
652#if !UE_BUILD_SHIPPING
659 if (Entry.Acceleration)
699#if !UE_BUILD_SHIPPING
715 for(
int EntryIdx = 0; EntryIdx < Bucket.
Objects.
Num(); ++EntryIdx)
717 Ar.
Logf(
TEXT(
"\tEntry %d"), EntryIdx);
718 Bucket.
Objects[EntryIdx].Acceleration->DumpStatsTo(Ar);
757 virtual void DeepAssign(
const ISpatialAcceleration<TPayloadType, FReal, 3>&
Other)
override
769 if (
Accel->template
As<
typename std::tuple_element<0, std::tuple< TSpatialAccelerationTypes...>>::type> ())
774 if (
Accel->template
As<
typename std::tuple_element<ClampedIdx(1), std::tuple< TSpatialAccelerationTypes...>>::type> ())
779 if (
Accel->template
As<
typename std::tuple_element<ClampedIdx(2), std::tuple< TSpatialAccelerationTypes...>>::type> ())
784 if (
Accel->template
As<
typename std::tuple_element<ClampedIdx(3), std::tuple< TSpatialAccelerationTypes...>>::type> ())
789 if (
Accel->template
As<
typename std::tuple_element<ClampedIdx(4), std::tuple< TSpatialAccelerationTypes...>>::type> ())
794 if (
Accel->template
As<
typename std::tuple_element<ClampedIdx(5), std::tuple< TSpatialAccelerationTypes...>>::type> ())
799 if (
Accel->template
As<
typename std::tuple_element<ClampedIdx(6), std::tuple< TSpatialAccelerationTypes...>>::type> ())
804 if (
Accel->template
As<
typename std::tuple_element<ClampedIdx(7), std::tuple< TSpatialAccelerationTypes...>>::type> ())
813 static constexpr uint16 MaxBuckets = 8;
816 static constexpr uint32 NumTypes =
sizeof...(TSpatialAccelerationTypes);
818 friend ::FChaosVDDataWrapperUtils;
#define check(expr)
Definition AssertionMacros.h:314
bool bSuccess
Definition ConvexDecomposition3.cpp:819
#define GLog
Definition CoreGlobals.h:95
#define SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:650
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ChaosArchive.h:167
Definition CollisionContext.h:17
Definition SpatialAccelerationBroadPhase.h:335
Definition ResimCacheBase.h:11
Definition ISpatialAcceleration.h:166
Definition ISpatialAccelerationCollection.h:23
uint8 ActiveBucketsMask
Definition ISpatialAccelerationCollection.h:67
Definition ISpatialAcceleration.h:267
TConcrete * As()
Definition ISpatialAcceleration.h:385
TConcrete & AsChecked()
Definition ISpatialAcceleration.h:397
Definition ISpatialAcceleration.h:120
An allocator and container of collision constraints that supports reuse of constraints from the previ...
Definition CollisionConstraintAllocator.h:234
Definition AABBTree.h:786
bool OverlapFast(const FAABB3 &QueryBounds, SQVisitor &Visitor) const
Definition AABBTree.h:1027
Definition SpatialAccelerationCollection.h:384
virtual bool NeedUpdateElementIn(const TPayloadType &Payload, const TAABB< T, d > &NewBounds, FSpatialAccelerationIdx SpatialIdx)
Definition SpatialAccelerationCollection.h:614
virtual bool RemoveElementFrom(const TPayloadType &Payload, FSpatialAccelerationIdx SpatialIdx) override
Definition SpatialAccelerationCollection.h:592
virtual void SwapSubstructure(ISpatialAccelerationCollection< TPayloadType, T, d > &InOther, FSpatialAccelerationIdx Idx) override
Definition SpatialAccelerationCollection.h:472
TSpatialAccelerationBucketEntry< TPayloadType, T, d > BucketEntryType
Definition SpatialAccelerationCollection.h:390
std::enable_if_t< std::is_same_v< SQVisitor, typename Private::FSimOverlapVisitor >, void > Overlap(const TAABB< T, 3 > &QueryBounds, SQVisitor &Visitor) const
Definition SpatialAccelerationCollection.h:534
virtual void CacheOverlappingLeaves() override
Definition SpatialAccelerationCollection.h:429
TSpatialAccelerationCollection()
Definition SpatialAccelerationCollection.h:393
virtual TArray< FSpatialAccelerationIdx > GetAllSpatialIndices() const override
Definition SpatialAccelerationCollection.h:578
void Sweep(const TVector< T, d > &Start, const TVector< T, d > &Dir, const T Length, const TVector< T, d > QueryHalfExtents, ISpatialVisitor< TPayloadType, T > &Visitor) const override
Definition SpatialAccelerationCollection.h:508
virtual TUniquePtr< ISpatialAcceleration< TPayloadType, T, d > > RemoveSubstructure(FSpatialAccelerationIdx Idx) override
Definition SpatialAccelerationCollection.h:434
virtual void Overlap(const TAABB< T, d > &QueryBounds, ISpatialVisitor< TPayloadType, T > &Visitor) const override
Definition SpatialAccelerationCollection.h:521
typename FirstAccelerationType::PayloadType TPayloadType
Definition SpatialAccelerationCollection.h:387
typename std::tuple_element< 0, std::tuple< TSpatialAccelerationTypes... > >::type FirstAccelerationType
Definition SpatialAccelerationCollection.h:386
virtual TUniquePtr< ISpatialAcceleration< TPayloadType, T, d > > Copy() const
Definition SpatialAccelerationCollection.h:642
virtual void PBDComputeConstraintsLowLevel(T Dt, FSpatialAccelerationBroadPhase &BroadPhase, Private::FCollisionConstraintAllocator *Allocator, const FCollisionDetectorSettings &Settings, IResimCacheBase *ResimCache) const override
Definition SpatialAccelerationCollection.h:647
TSpatialCollectionBucket< BucketEntryType > BucketType
Definition SpatialAccelerationCollection.h:391
virtual FSpatialAccelerationIdx AddSubstructure(TUniquePtr< ISpatialAcceleration< TPayloadType, T, d > > &&Substructure, uint16 BucketIdx, uint16 BucketInnerIdx) override
Definition SpatialAccelerationCollection.h:397
static constexpr int d
Definition SpatialAccelerationCollection.h:389
std::enable_if_t<!std::is_same_v< SQVisitor, typename Private::FSimOverlapVisitor >, void > Overlap(const TAABB< T, 3 > &QueryBounds, SQVisitor &Visitor) const
Definition SpatialAccelerationCollection.h:528
virtual void DebugDraw(ISpacialDebugDrawInterface< T > *InInterface) const override
Definition SpatialAccelerationCollection.h:653
virtual void Raycast(const TVector< T, d > &Start, const TVector< T, d > &Dir, const T Length, ISpatialVisitor< TPayloadType, T > &Visitor) const override
Definition SpatialAccelerationCollection.h:495
void Raycast(const TVector< T, d > &Start, const TVector< T, d > &Dir, const T Length, SQVisitor &Visitor) const
Definition SpatialAccelerationCollection.h:502
void DumpStatsTo(FOutputDevice &Ar) const override
Definition SpatialAccelerationCollection.h:708
void Sweep(const TVector< T, d > &Start, const TVector< T, d > &Dir, const T Length, const TVector< T, d > QueryHalfExtents, SQVisitor &Visitor) const
Definition SpatialAccelerationCollection.h:515
TArray< TPayloadBoundsElement< TPayloadType, T > > GlobalObjects() const
Definition SpatialAccelerationCollection.h:551
virtual void Reset() override
Definition SpatialAccelerationCollection.h:489
void VisitAllSpatialIndices(TVisitor Visitor) const
Definition SpatialAccelerationCollection.h:560
virtual void Serialize(FChaosArchive &Ar)
Definition SpatialAccelerationCollection.h:668
void DumpStats() const override
Definition SpatialAccelerationCollection.h:700
virtual bool UpdateElementIn(const TPayloadType &Payload, const TAABB< T, d > &NewBounds, bool bHasBounds, FSpatialAccelerationIdx SpatialIdx)
Definition SpatialAccelerationCollection.h:621
typename FirstAccelerationType::TType T
Definition SpatialAccelerationCollection.h:388
virtual ISpatialAcceleration< TPayloadType, T, d > * GetSubstructure(FSpatialAccelerationIdx Idx) override
Definition SpatialAccelerationCollection.h:461
Definition ISpatialAcceleration.h:453
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
Definition ChaosVDDataWrapperUtils.h:77
Definition OutputDevice.h:133
void Logf(const FmtType &Fmt)
Definition OutputDevice.h:234
SizeType Remove(const ElementType &Item)
Definition Array.h:3091
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
ElementType Pop(EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:1196
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
FRealDouble FReal
Definition Real.h:22
auto & GetAccelerationsPerType(TSpatialTypeTuple< First, Rest... > &Types)
Definition SpatialAccelerationCollection.h:203
uint8 SpatialAccelerationType
Definition ISpatialAcceleration.h:178
@ Raycast
Definition SimulationModuleBase.h:145
void FreeObjHelper(T *&RawPtr)
Definition SpatialAccelerationCollection.h:28
std::enable_if_t< std::is_same_v< typename SpatialAccelerationCollection::TPayloadType, FAccelerationStructureHandle >, void > PBDComputeConstraintsLowLevel_Helper(FReal Dt, const SpatialAccelerationCollection &Accel, FSpatialAccelerationBroadPhase &BroadPhase, Private::FCollisionConstraintAllocator *Allocator, const FCollisionDetectorSettings &Settings, IResimCacheBase *ResimCache)
Definition SpatialAccelerationCollection.h:369
T CopyFromHelper(const T &Src)
Definition SpatialAccelerationCollection.h:68
ESpatialAccelerationCollectionBucketInnerIdx
Definition SpatialAccelerationCollection.h:20
@ DefaultQueryOnly
Definition SpatialAccelerationCollection.h:23
@ Dynamic
Definition SpatialAccelerationCollection.h:22
@ DynamicQueryOnly
Definition SpatialAccelerationCollection.h:24
@ Default
Definition SpatialAccelerationCollection.h:21
@ NumTypes
Definition InputCoreTypes.h:783
Definition ISpatialAcceleration.h:14
const FVec3 & Dir
Definition ISpatialAcceleration.h:24
const FVec3 InvDir
Definition ISpatialAcceleration.h:25
const bool bParallel[3]
Definition ISpatialAcceleration.h:30
Definition GeometryParticlesfwd.h:59
uint16 InnerIdx
Definition GeometryParticlesfwd.h:61
uint16 Bucket
Definition GeometryParticlesfwd.h:60
Definition ISpatialAcceleration.h:226
Definition SpatialAccelerationCollection.h:35
void CopyFrom(TSpatialAccelerationBucketEntry< TPayloadType, T, d > &Src)
Definition SpatialAccelerationCollection.h:39
TUniquePtr< ISpatialAcceleration< TPayloadType, T, d > > Acceleration
Definition SpatialAccelerationCollection.h:36
TSpatialAccelerationBucketEntry()=default
TSpatialAccelerationBucketEntry< TPayloadType, T, d > & operator=(TSpatialAccelerationBucketEntry< TPayloadType, T, d > &Other)=delete
TSpatialAccelerationBucketEntry(TSpatialAccelerationBucketEntry< TPayloadType, T, d > &&Other)=default
TSpatialAccelerationBucketEntry< TPayloadType, T, d > & operator=(TSpatialAccelerationBucketEntry< TPayloadType, T, d > &&Other)=default
TSpatialAccelerationBucketEntry(const TSpatialAccelerationBucketEntry< TPayloadType, T, d > &Other)=delete
uint16 TypeInnerIdx
Definition SpatialAccelerationCollection.h:37
Definition SpatialAccelerationCollection.h:216
static void GlobalObjects(const Tuple &Types, TArray< TPayloadBoundsElement< TPayloadType, T > > &ObjList)
Definition SpatialAccelerationCollection.h:280
static bool OverlapFast(const Tuple &Types, const TAABB< T, d > QueryBounds, SQVisitor &Visitor)
Definition SpatialAccelerationCollection.h:260
static bool SweepFast(const Tuple &Types, const TVector< T, d > &Start, FQueryFastData &CurData, const TVector< T, d > QueryHalfExtents, SQVisitor &Visitor, const FVec3 &Dir, const FVec3 InvDir, const bool bParallel[3])
Definition SpatialAccelerationCollection.h:239
static bool RaycastFast(const Tuple &Types, const TVector< T, d > &Start, FQueryFastData &CurData, SQVisitor &Visitor, const FVec3 &Dir, const FVec3 InvDir, const bool bParallel[3])
Definition SpatialAccelerationCollection.h:218
static uint16 FindTypeIdx(const Tuple &Types, SpatialAccelerationType Type)
Definition SpatialAccelerationCollection.h:348
static void Reset(const Tuple &Types)
Definition SpatialAccelerationCollection.h:312
static void SetNumFrom(const Tuple &TypesSrc, Tuple &TypesDest)
Definition SpatialAccelerationCollection.h:299
static void CacheOverlappingLeaves(const Tuple &Types)
Definition SpatialAccelerationCollection.h:331
Definition SpatialAccelerationCollection.h:85
TSpatialCollectionBucket< TObj > & operator=(TSpatialCollectionBucket< TObj > &&Other)=default
TArray< TObj > Objects
Definition SpatialAccelerationCollection.h:92
TSpatialCollectionBucket< TObj > & operator=(const TSpatialCollectionBucket< TObj > &Other)=delete
TSpatialCollectionBucket()=default
TSpatialCollectionBucket(const TSpatialCollectionBucket< TObj > &Other)=delete
void UpdateOrAddAt(uint16 Idx, TObj &&Obj)
Definition SpatialAccelerationCollection.h:111
TSpatialCollectionBucket(TSpatialCollectionBucket< TObj > &&Other)=default
TArray< uint16 > FreeIndices
Definition SpatialAccelerationCollection.h:93
int32 Add(TObj &&Obj)
Definition SpatialAccelerationCollection.h:95
void CopyFrom(const TSpatialCollectionBucket &Src)
Definition SpatialAccelerationCollection.h:143
void Remove(uint16 Idx)
Definition SpatialAccelerationCollection.h:130
static auto & Get(TSpatialTypeTuple< First, Rest... > &Types)
Definition SpatialAccelerationCollection.h:196
static const auto & Get(const TSpatialTypeTuple< First, Rest... > &Types)
Definition SpatialAccelerationCollection.h:197
static const auto & Get(const TSpatialTypeTuple< First, Rest... > &Types)
Definition SpatialAccelerationCollection.h:190
static auto & Get(TSpatialTypeTuple< First, Rest... > &Types)
Definition SpatialAccelerationCollection.h:189
Definition SpatialAccelerationCollection.h:182
TSpatialTypeTuple< TRemaining... > Remaining
Definition SpatialAccelerationCollection.h:173
TSpatialCollectionBucket< TAcceleration * > First
Definition SpatialAccelerationCollection.h:172
TSpatialTypeTuple()=default
TSpatialTypeTuple(const TSpatialTypeTuple< TAcceleration, TRemaining... > &Other)=delete
TAcceleration FirstType
Definition SpatialAccelerationCollection.h:171
Definition SpatialAccelerationCollection.h:165