8#include "Containers/HashTable.h"
33 #pragma warning (push)
34 #pragma warning(disable:4723)
70template <
typename T,
int d>
73template <
typename T,
int d>
76template <
typename T,
int d>
97template <
typename TPayloadType>
118template <
typename TPayloadType,
typename T = FReal>
195template <
typename TPayload>
203template <
typename TPayload>
224template <
typename TPayloadType,
typename T>
236 template <
typename TPayloadType2>
245 return ::Chaos::GetUniqueIdx(
Payload);
249template <
typename TPayloadType,
typename T>
256template<
typename TPayloadType,
typename T,
int d>
257class ISpatialAcceleration;
259template<ESpatialAcceleration SpatialType,
typename TPayloadType,
typename T,
int d>
265template <
typename TPayloadType,
typename T,
int d>
274 : SyncTimestamp(0), AsyncTimeSlicingComplete(
true), Type(
InType)
347 SyncTimestamp =
Other.SyncTimestamp;
348 AsyncTimeSlicingComplete =
Other.AsyncTimeSlicingComplete;
351#if !UE_BUILD_SHIPPING
373 default:
check(
false);
return nullptr;
384 template <
typename TConcrete>
387 return Type == TConcrete::StaticType ?
static_cast<TConcrete*
>(
this) :
nullptr;
390 template <
typename TConcrete>
393 return Type == TConcrete::StaticType ?
static_cast<const TConcrete*
>(
this) :
nullptr;
396 template <
typename TConcrete>
399 check(Type == TConcrete::StaticType);
403 template <
typename TConcrete>
406 check(Type == TConcrete::StaticType);
407 return static_cast<const TConcrete&
>(*this);
413 return SyncTimestamp;
427 bool AsyncTimeSlicingComplete;
431template <
typename TBase,
typename TDerived>
442template <
typename TDerived,
typename TBase>
451template <
typename TPayloadType,
typename T>
502#ifndef CHAOS_SERIALIZE_OUT
503#define CHAOS_SERIALIZE_OUT WITH_EDITOR
507template <
typename TKey,
typename TValue>
528 return sizeof(FEntry);
535#if CHAOS_SERIALIZE_OUT
539 return AllocatedSize;
544 return Entries.
Max();
550#if CHAOS_SERIALIZE_OUT
558 return Entries.
Num();
564#if CHAOS_SERIALIZE_OUT
574 return &Entries[Idx].Value;
579 const TValue*
Find(
const TKey& Key)
const
582 if(Idx < Entries.
Num() && Entries[Idx].bSet)
584 return &Entries[Idx].Value;
614 TValue&
Add(
const TKey& Key)
617 if(Idx >= Entries.
Num())
621#if CHAOS_SERIALIZE_OUT
626 ensure(Entries[Idx].bSet ==
false);
627 Entries[Idx].bSet =
true;
629#if CHAOS_SERIALIZE_OUT
633 return Entries[Idx].Value;
644 Entries[Idx] = FEntry();
645#if CHAOS_SERIALIZE_OUT
653 if(Idx >= 0 && Idx < Entries.
Num())
655 Entries[Idx] = FEntry();
656#if CHAOS_SERIALIZE_OUT
665#if CHAOS_SERIALIZE_OUT
673#if CHAOS_SERIALIZE_OUT
696 Entries.
Add(Source.Entries[SourceIndex]);
697#if CHAOS_SERIALIZE_OUT
706#if CHAOS_SERIALIZE_OUT
713template <
typename TKey,
typename TValue>
726template <
typename TKey,
typename TValue>
755template <
typename TKey,
typename TValue>
800 HashTable.
Clear(NewSize, FMath::RoundUpToPowerOfTwo(NumElements + 1));
824 const TValue*
Find(
const TKey& Key)
const
972 for(
uint32 i = 0; i < NumElements; ++i)
989template <
typename TKey,
typename TValue>
996template <
typename TKey,
typename TValue>
1003template <
typename TPayload,
typename TVisitor>
1006 if (Visitor.ShouldIgnore(Payload))
1010 if (
const void* QueryData = Visitor.GetQueryData())
1012 return Payload.PrePreQueryFilter(QueryData);
1014 if (
const void* SimData = Visitor.GetSimData())
1016 return Payload.PrePreSimFilter(SimData);
1021template <
typename TPayload,
typename TVisitor>
1027template <
typename TVisitor>
1033#if !UE_MERGED_MODULES
1034#if PLATFORM_COMPILER_CLANG
1035extern template class CHAOS_API ISpatialAcceleration<int32, FReal, 3>;
1038extern template class ISpatialAcceleration<int32, FReal, 3>;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define CHAOS_ENSURE(Condition)
Definition ChaosCheck.h:22
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
uint32 MurmurFinalize32(uint32 Hash)
Definition HashTable.h:23
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define CHAOS_DEBUG_DRAW
Definition Declares.h:20
return true
Definition ExternalRpcRegistry.cpp:601
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
uint32 Size
Definition VulkanMemory.cpp:4034
if(Failed) console_printf("Failed.\n")
Definition ChaosArchive.h:167
Definition ISpatialAcceleration.h:736
uint32 GetIndexSize() const
Definition ISpatialAcceleration.h:743
SIZE_T GetAllocatedSize() const
Definition ISpatialAcceleration.h:738
Definition ISpatialAcceleration.h:166
virtual void Box(const TAABB< T, 3 > &InBox, const TVector< T, 3 > &InLinearColor, float InThickness)=0
virtual ~ISpacialDebugDrawInterface()=default
virtual void Line(const TVector< T, 3 > &InBegin, const TVector< T, 3 > &InEnd, const TVector< T, 3 > &InLinearColor, float InThickness)=0
Definition ISpatialAcceleration.h:267
virtual void SetAsyncTimeSlicingComplete(bool InState)
Definition ISpatialAcceleration.h:423
virtual bool ShouldRebuild()
Definition ISpatialAcceleration.h:285
virtual void DebugDraw(ISpacialDebugDrawInterface< T > *InInterface) const
Definition ISpatialAcceleration.h:352
virtual TArray< TPayloadType > FindAllIntersections(const FAABB3 &Box) const
Definition ISpatialAcceleration.h:295
TConcrete * As()
Definition ISpatialAcceleration.h:385
static ISpatialAcceleration< TPayloadType, T, d > * SerializationFactory(FChaosArchive &Ar, ISpatialAcceleration< TPayloadType, T, d > *Accel)
Definition ISpatialAcceleration.h:358
virtual void PrepareCopyTimeSliced(const ISpatialAcceleration< TPayloadType, T, 3 > &InFrom)
Definition ISpatialAcceleration.h:288
virtual bool UpdateElementIn(const TPayloadType &Payload, const TAABB< T, d > &NewBounds, bool bHasBounds, FSpatialAccelerationIdx Idx)
Definition ISpatialAcceleration.h:333
virtual void Overlap(const FAABB3 &QueryBounds, ISpatialVisitor< TPayloadType, FReal > &Visitor) const
Definition ISpatialAcceleration.h:298
virtual bool NeedUpdateElementIn(const TPayloadType &Payload, const TAABB< T, d > &NewBounds, FSpatialAccelerationIdx Idx)
Definition ISpatialAcceleration.h:328
int32 GetSyncTimestamp()
Definition ISpatialAcceleration.h:411
ISpatialAcceleration(ESpatialAcceleration InType)
Definition ISpatialAcceleration.h:277
virtual void DumpStats() const
Definition ISpatialAcceleration.h:354
virtual void ClearShouldRebuild()
Definition ISpatialAcceleration.h:287
virtual bool IsAsyncTimeSlicingComplete()
Definition ISpatialAcceleration.h:283
virtual bool IsTreeDynamic() const
Definition ISpatialAcceleration.h:286
virtual bool NeedUpdateElement(const TPayloadType &Payload, const TAABB< T, 3 > &NewBounds)
Definition ISpatialAcceleration.h:312
virtual void Serialize(FChaosArchive &Ar)
Definition ISpatialAcceleration.h:377
virtual bool RemoveElement(const TPayloadType &Payload)
Definition ISpatialAcceleration.h:306
virtual void Raycast(const FVec3 &Start, const FVec3 &Dir, const FReal Length, ISpatialVisitor< TPayloadType, FReal > &Visitor) const
Definition ISpatialAcceleration.h:296
TConcrete & AsChecked()
Definition ISpatialAcceleration.h:397
virtual void DeepAssign(const ISpatialAcceleration< TPayloadType, T, d > &Other)
Definition ISpatialAcceleration.h:344
const TConcrete & AsChecked() const
Definition ISpatialAcceleration.h:404
virtual ~ISpatialAcceleration()=default
virtual void CacheOverlappingLeaves()
Definition ISpatialAcceleration.h:292
SpatialAccelerationType GetType() const
Definition ISpatialAcceleration.h:382
virtual bool UpdateElement(const TPayloadType &Payload, const TAABB< T, d > &NewBounds, bool bHasBounds)
Definition ISpatialAcceleration.h:317
virtual void DumpStatsTo(class FOutputDevice &Ar) const
Definition ISpatialAcceleration.h:355
virtual TUniquePtr< ISpatialAcceleration< TPayloadType, T, d > > Copy() const
Definition ISpatialAcceleration.h:338
void SetSyncTimestamp(int32 InTimestamp)
Definition ISpatialAcceleration.h:417
virtual void DebugDrawLeaf(ISpacialDebugDrawInterface< T > &InInterface, const FLinearColor &InLinearColor, float InThickness) const
Definition ISpatialAcceleration.h:353
virtual void Reset()
Definition ISpatialAcceleration.h:300
virtual bool RemoveElementFrom(const TPayloadType &Payload, FSpatialAccelerationIdx Idx)
Definition ISpatialAcceleration.h:323
const TConcrete * As() const
Definition ISpatialAcceleration.h:391
virtual void ProgressAsyncTimeSlicing(bool ForceBuildCompletion=false)
Definition ISpatialAcceleration.h:284
virtual void Sweep(const FVec3 &Start, const FVec3 &Dir, const FReal Length, const FVec3 QueryHalfExtents, ISpatialVisitor< TPayloadType, FReal > &Visitor) const
Definition ISpatialAcceleration.h:297
virtual void ProgressCopyTimeSliced(const ISpatialAcceleration< TPayloadType, T, 3 > &InFrom, int MaximumBytesToCopy)
Definition ISpatialAcceleration.h:289
Definition ISpatialAcceleration.h:120
virtual bool Raycast(const TSpatialVisitorData< TPayloadType > &Instance, FQueryFastData &CurData)=0
virtual const void * GetQueryPayload() const
Definition ISpatialAcceleration.h:152
virtual ~ISpatialVisitor()=default
virtual const void * GetQueryData() const
Definition ISpatialAcceleration.h:145
virtual bool ShouldIgnore(const TSpatialVisitorData< TPayloadType > &Instance) const
Definition ISpatialAcceleration.h:149
virtual bool Sweep(const TSpatialVisitorData< TPayloadType > &Instance, FQueryFastData &CurData)=0
virtual bool Overlap(const TSpatialVisitorData< TPayloadType > &Instance)=0
virtual const void * GetSimData() const
Definition ISpatialAcceleration.h:147
virtual bool HasBlockingHit() const
Definition ISpatialAcceleration.h:154
static FORCEINLINE TAABB< FReal, d > ZeroAABB()
Definition AABB.h:630
Definition ISpatialAcceleration.h:509
TValue & FindChecked(const TKey &Key)
Definition ISpatialAcceleration.h:589
void AddFrom(const TArrayAsMap< TKey, TValue > &Source, int32 SourceIndex)
Definition ISpatialAcceleration.h:694
void Reserve(int32 Size)
Definition ISpatialAcceleration.h:561
TValue & Add(const TKey &Key)
Definition ISpatialAcceleration.h:614
static constexpr uint32 GetTypeSize()
Definition ISpatialAcceleration.h:526
void Reset()
Definition ISpatialAcceleration.h:662
void Remove(const TKey &Key)
Definition ISpatialAcceleration.h:650
const TValue & FindChecked(const TKey &Key) const
Definition ISpatialAcceleration.h:594
int32 Num() const
Definition ISpatialAcceleration.h:556
int32 Capacity() const
Definition ISpatialAcceleration.h:542
TValue * Find(const TKey &Key)
Definition ISpatialAcceleration.h:569
void RemoveChecked(const TKey &Key)
Definition ISpatialAcceleration.h:641
void Serialize(FChaosArchive &Ar)
Definition ISpatialAcceleration.h:670
TValue ElementType
Definition ISpatialAcceleration.h:524
void Empty()
Definition ISpatialAcceleration.h:609
TValue & FindOrAdd(const TKey &Key)
Definition ISpatialAcceleration.h:599
void Add(const TKey &Key, const TValue &Value)
Definition ISpatialAcceleration.h:636
const TValue * Find(const TKey &Key) const
Definition ISpatialAcceleration.h:579
SIZE_T GetAllocatedSize() const
Definition ISpatialAcceleration.h:531
static void SerializeAsAABB(FArchive &Ar, TAABB< T, d > &AABB)
Definition Box.h:467
Definition ParticleHandle.h:2739
Definition ISpatialAcceleration.h:757
FORCEINLINE int32 FindIndex(uint32 InHash, int32 UniqueIndex) const
Definition ISpatialAcceleration.h:951
void Reset()
Definition ISpatialAcceleration.h:939
void Remove(const TKey &Key)
Definition ISpatialAcceleration.h:901
TValue * Find(const TKey &Key)
Definition ISpatialAcceleration.h:812
const TValue * Find(const TKey &Key) const
Definition ISpatialAcceleration.h:824
void RemoveChecked(const TKey &Key)
Definition ISpatialAcceleration.h:894
FORCEINLINE int32 FindIndex(const TKey &Key) const
Definition ISpatialAcceleration.h:945
FORCEINLINE TValue & Add(const TKey &Key)
Definition ISpatialAcceleration.h:870
TArray< PairType > Elements
Definition ISpatialAcceleration.h:985
FORCEINLINE TValue & Add(uint32 InHash, const TKey &Key)
Definition ISpatialAcceleration.h:875
void ResizeHashBuckets(uint32 NewSize)
Definition ISpatialAcceleration.h:797
TValue & FindChecked(const TKey &Key)
Definition ISpatialAcceleration.h:836
SQMapKeyWithValue< TKey, TValue > PairType
Definition ISpatialAcceleration.h:761
TValue ElementType
Definition ISpatialAcceleration.h:760
int32 Num() const
Definition ISpatialAcceleration.h:773
const TValue & FindChecked(const TKey &Key) const
Definition ISpatialAcceleration.h:843
void Reserve(int32 NumToReserve)
Definition ISpatialAcceleration.h:783
void Add(const TKey &Key, const TValue &Value)
Definition ISpatialAcceleration.h:889
void Serialize(FChaosArchive &Ar)
Definition ISpatialAcceleration.h:964
int32 Capacity() const
Definition ISpatialAcceleration.h:778
void AddFrom(const TSQMap< TKey, TValue > &Source, int32 SourceIndex)
Definition ISpatialAcceleration.h:979
FSQHashTable HashTable
Definition ISpatialAcceleration.h:986
static constexpr uint32 GetTypeSize()
Definition ISpatialAcceleration.h:763
SIZE_T GetAllocatedSize() const
Definition ISpatialAcceleration.h:768
void Empty()
Definition ISpatialAcceleration.h:864
TValue & FindOrAdd(const TKey &Key)
Definition ISpatialAcceleration.h:850
Definition ISpatialAcceleration.h:78
TVector< T, d > Start
Definition ISpatialAcceleration.h:90
TSpatialRay()
Definition ISpatialAcceleration.h:80
TVector< T, d > End
Definition ISpatialAcceleration.h:91
TSpatialRay(const TVector< T, d > &InStart, const TVector< T, d > InEnd)
Definition ISpatialAcceleration.h:85
Definition ISpatialAcceleration.h:453
FORCEINLINE bool ShouldIgnore(const TSpatialVisitorData< TPayloadType > &Instance) const
Definition ISpatialAcceleration.h:482
FORCEINLINE bool VisitSweep(const TSpatialVisitorData< TPayloadType > &Instance, FQueryFastData &CurData)
Definition ISpatialAcceleration.h:467
FORCEINLINE bool VisitOverlap(const TSpatialVisitorData< TPayloadType > &Instance)
Definition ISpatialAcceleration.h:457
FORCEINLINE const void * GetSimData() const
Definition ISpatialAcceleration.h:477
FORCEINLINE const void * GetQueryPayload() const
Definition ISpatialAcceleration.h:488
FORCEINLINE bool HasBlockingHit() const
Definition ISpatialAcceleration.h:493
FORCEINLINE const void * GetQueryData() const
Definition ISpatialAcceleration.h:472
TSpatialVisitor(ISpatialVisitor< TPayloadType, T > &InVisitor)
Definition ISpatialAcceleration.h:455
FORCEINLINE bool VisitRaycast(const TSpatialVisitorData< TPayloadType > &Instance, FQueryFastData &CurData)
Definition ISpatialAcceleration.h:462
virtual void Serialize(void *V, int64 Length) override
Definition ArchiveProxy.h:97
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
Definition HashTable.h:210
uint32 HashSize
Definition HashTable.h:249
void Free()
Definition HashTable.h:379
bool IsValid(uint32 Index) const
Definition HashTable.h:409
void Clear()
Definition HashTable.h:350
CORE_API void Resize(uint32 NewIndexSize)
Definition HashTable.cpp:7
void Remove(uint32 Key, uint32 Index)
Definition HashTable.h:437
void Add(uint32 Key, uint32 Index)
Definition HashTable.h:414
uint32 First(uint32 Key) const
Definition HashTable.h:395
uint32 IndexSize
Definition HashTable.h:251
uint32 Next(uint32 Index) const
Definition HashTable.h:402
Definition OutputDevice.h:133
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
SizeType AddDefaulted()
Definition Array.h:2795
UE_REWRITE SizeType Max() const
Definition Array.h:1161
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
void Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
bool SpatialAccelerationEqual(ESpatialAcceleration A, SpatialAccelerationType B)
Definition ISpatialAcceleration.h:189
bool operator==(ESpatialAcceleration A, SpatialAccelerationType B)
Definition ISpatialAcceleration.h:190
ESpatialAcceleration
Definition ISpatialAcceleration.h:180
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
FRealDouble FReal
Definition Real.h:22
@ Add
Definition PendingSpatialData.h:18
bool PrePreFilterHelper(const FAccelerationStructureHandle &Payload, const Private::FSimOverlapVisitor &Visitor)
Definition SpatialAccelerationBroadPhase.h:323
uint8 SpatialAccelerationType
Definition ISpatialAcceleration.h:178
bool operator!=(ESpatialAcceleration A, SpatialAccelerationType B)
Definition ISpatialAcceleration.h:192
TEnableIf<!TIsPointer< TPayload >::Value, FUniqueIdx >::Type GetUniqueIdx(const TPayload &Payload)
Definition ISpatialAcceleration.h:196
U16 Index
Definition radfft.cpp:71
Definition ISpatialAcceleration.h:64
FQueryFastDataVoid()
Definition ISpatialAcceleration.h:65
FVec3 DummyDir
Definition ISpatialAcceleration.h:67
Definition ISpatialAcceleration.h:14
const FVec3 & Dir
Definition ISpatialAcceleration.h:24
void SetLength(const FReal InLength)
Definition ISpatialAcceleration.h:39
const FVec3 InvDir
Definition ISpatialAcceleration.h:25
FQueryFastData(const FVec3 &InDir, const FReal InLength)
Definition ISpatialAcceleration.h:15
FReal CurrentLength
Definition ISpatialAcceleration.h:27
FReal InvCurrentLength
Definition ISpatialAcceleration.h:28
const bool bParallel[3]
Definition ISpatialAcceleration.h:30
FQueryFastData(const FVec3 &InDummyDir)
Definition ISpatialAcceleration.h:55
Definition GeometryParticlesfwd.h:59
Definition GeometryParticlesfwd.h:87
bool IsValid() const
Definition GeometryParticlesfwd.h:92
Definition ISpatialAcceleration.h:715
TValue Value
Definition ISpatialAcceleration.h:723
SQMapKeyWithValue(const TKey &InKey, const TValue &InValue)
Definition ISpatialAcceleration.h:717
TKey Key
Definition ISpatialAcceleration.h:722
SQMapKeyWithValue()=default
Definition ISpatialAcceleration.h:549
TValue Entry
Definition ISpatialAcceleration.h:553
Definition ISpatialAcceleration.h:226
bool HasBoundingBox() const
Definition ISpatialAcceleration.h:239
TAABB< T, 3 > Bounds
Definition ISpatialAcceleration.h:228
TPayloadType Payload
Definition ISpatialAcceleration.h:227
void Serialize(FChaosArchive &Ar)
Definition ISpatialAcceleration.h:230
const TAABB< T, 3 > & BoundingBox() const
Definition ISpatialAcceleration.h:241
TPayloadType2 GetPayload(int32 Idx) const
Definition ISpatialAcceleration.h:237
FUniqueIdx UniqueIdx() const
Definition ISpatialAcceleration.h:243
Definition ISpatialAcceleration.h:261
static CHAOS_API ISpatialAcceleration< TPayloadType, T, d > * Create()
Definition SpatialAcceleration.cpp:12
Definition ISpatialAcceleration.h:99
TPayloadType Payload
Definition ISpatialAcceleration.h:100
TSpatialVisitorData(const TPayloadType &InPayload, const bool bInHasBounds=false, const FAABB3 &InBounds=FAABB3::ZeroAABB())
Definition ISpatialAcceleration.h:101
CORE_API static const FGuid GUID
Definition ExternalPhysicsCustomObjectVersion.h:144
@ SerializeEvolutionGenericAcceleration
Definition ExternalPhysicsCustomObjectVersion.h:25
Definition UnrealMathUtility.h:270
Definition DelegateInstanceInterface.h:67