15#ifndef TRACK_CHAOS_GEOMETRY
16#define TRACK_CHAOS_GEOMETRY !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
21template<
class T,
int d>
24template<
class T,
int d>
26template<
class T,
int d>
28template<
class T,
int d>
40template<
class T,
int d,
bool bSerializable>
45template<
class T,
int d>
52 return Object.GetReference();
56template<
class T,
int d>
88 return (T::StaticType() ==
InType);
108#define DISALLOW_FIMPLICIT_OBJECT_TAIL_PADDING INTEL_ISPC
114 static constexpr int D = 3;
123 template<
typename TargetType>
130 template<
typename TargetType>
131 const TargetType*
AsA()
const
135 return static_cast<const TargetType*
>(
this);
140 template<
typename TargetType>
145 return static_cast<TargetType*
>(
this);
150 template<
typename TargetType>
154 return static_cast<const TargetType*
>(
this);
157 template<
typename TargetType>
161 return static_cast<TargetType*
>(
this);
164 template<
class T_DERIVED>
167 if (T_DERIVED::StaticType() ==
Type)
174 template<
class T_DERIVED>
177 if (T_DERIVED::StaticType() ==
Type)
179 return static_cast<const T_DERIVED*
>(
this);
184 template<
class T_DERIVED>
188 return static_cast<const T_DERIVED&
>(*this);
191 template<
class T_DERIVED>
229 UE_DEPRECATED(5.4,
"Please use CopyGeometryWithScale instead")
235 UE_DEPRECATED(5.4,
"Please use DeepCopyGeometryWithScale instead")
283#if TRACK_CHAOS_GEOMETRY
291 return FString::Printf(
TEXT(
"ImplicitObject - No Performance String"));
306 OutPosition = Result.First;
307 OutNormal =
Normal(Result.First);
308 OutTime =
Length > 0 ? (OutPosition - StartPoint).
Size() : 0.f;
438 int32 ObjectIndex = 0;
450 int32 ObjectIndex = 0;
462 int32 ObjectIndex = 0;
491 const FAABB3& LocalBounds,
493 const int32 RootObjectIndex,
509 const int32 RootObjectIndex,
522 const int32 RootObjectIndex,
548 :
FVec3(0.f, 0.f, 1.f);
576#if TRACK_CHAOS_GEOMETRY
579#if DISALLOW_FIMPLICIT_OBJECT_TAIL_PADDING
588#if DISALLOW_FIMPLICIT_OBJECT_TAIL_PADDING
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
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#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
return true
Definition ExternalRpcRegistry.cpp:601
FORCEINLINE Chaos::FImplicitObjectPtr MakeImplicitObjectPtr(TArgs &&... Args)
Definition ImplicitObject.h:627
FORCEINLINE Chaos::FConstImplicitObjectPtr MakeImplicitObjectConstPtr(TArgs &&... Args)
Definition ImplicitObject.h:637
const bool
Definition NetworkReplayStreaming.h:178
#define UE_REQUIRES(...)
Definition Requires.h:86
uint32 Size
Definition VulkanMemory.cpp:4034
Definition BVHParticles.h:24
Definition ChaosArchive.h:167
Definition RefCountedObject.h:15
FChaosRefCountedObject()
Definition RefCountedObject.h:17
Definition ImplicitObject.h:111
virtual TUniquePtr< FImplicitObject > DeepCopy() const
Definition ImplicitObject.h:233
virtual FReal GetRadius() const
Definition ImplicitObject.h:208
bool bHasBoundingBox
Definition ImplicitObject.h:574
void SetConvex(const bool Convex=true)
Definition ImplicitObject.h:278
CHAOS_API Pair< FVec3, bool > FindDeepestIntersection(const FImplicitObject *Other, const FBVHParticles *Particles, const FMatrix33 &OtherToLocalTransform, const FReal Thickness) const
Definition ImplicitObject.cpp:126
void SetCollisionType(EImplicitObjectType InCollisionType)
Definition ImplicitObject.h:204
T_DERIVED * GetObject()
Definition ImplicitObject.h:165
const T_DERIVED * GetObject() const
Definition ImplicitObject.h:175
CHAOS_API void Track(TSerializablePtr< FImplicitObject > This, const FString &DebugInfo)
virtual int32 FindClosestFaceAndVertices(const FVec3 &Position, TArray< FVec3 > &FaceVertices, FReal SearchDist=0.01f) const
Definition ImplicitObject.h:351
CHAOS_API FReal SignedDistance(const FVec3 &x) const
Definition ImplicitObject.cpp:105
FRealSingle Margin
Definition ImplicitObject.h:571
virtual TUniquePtr< FImplicitObject > Copy() const
Definition ImplicitObject.h:227
static CHAOS_API FImplicitObject * SerializationFactory(FChaosArchive &Ar, FImplicitObject *Obj)
Definition ImplicitObject.cpp:409
const T_DERIVED & GetObjectChecked() const
Definition ImplicitObject.h:185
void VisitOverlappingLeafObjects(const FAABB3 &LocalBounds, const FImplicitHierarchyVisitor &Visitor) const
Definition ImplicitObject.h:435
FImplicitObject(FImplicitObject &&)=delete
virtual CHAOS_API void FindAllIntersectingObjects(TArray< Pair< const FImplicitObject *, FRigidTransform3 > > &Out, const FAABB3 &LocalBounds) const
Definition ImplicitObject.cpp:294
bool HasBoundingBox() const
Definition ImplicitObject.h:275
virtual void VisitLeafObjectsImpl(const FRigidTransform3 &ObjectTransform, const int32 RootObjectIndex, int32 &ObjectIndex, int32 &LeafObjectIndex, const FImplicitHierarchyVisitor &VisitorFunc) const
Definition ImplicitObject.h:507
const TargetType * AsA() const
Definition ImplicitObject.h:131
virtual FVec3 FindGeometryOpposingNormal(const FVec3 &DenormDir, int32 FaceIndex, const FVec3 &OriginalNormal) const
Definition ImplicitObject.h:365
int32 CountLeafObjectsInHierarchy() const
Definition ImplicitObject.h:425
void SetDoCollide(const bool Collide)
Definition ImplicitObject.h:280
TargetType * AsA()
Definition ImplicitObject.h:141
virtual CHAOS_API Chaos::FImplicitObjectPtr CopyGeometryWithScale(const FVec3 &Scale) const
Definition ImplicitObject.cpp:88
void VisitLeafObjects(const FImplicitHierarchyVisitor &Visitor) const
Definition ImplicitObject.h:447
EImplicitObjectType CollisionType
Definition ImplicitObject.h:586
static int32 GetOffsetOfMargin()
Definition ImplicitObject.h:214
virtual uint32 GetTypeHash() const =0
virtual int32 CountObjectsInHierarchyImpl() const
Definition ImplicitObject.h:480
int32 CountObjectsInHierarchy() const
Definition ImplicitObject.h:420
bool bIsTracked
Definition ImplicitObject.h:577
virtual bool Overlap(const FVec3 &Point, const FReal Thickness) const
Definition ImplicitObject.h:372
virtual FAABB3 CalculateTransformedBounds(const FRigidTransform3 &Transform) const
Definition ImplicitObject.h:269
virtual int32 CountLeafObjectsInHierarchyImpl() const
Definition ImplicitObject.h:484
CHAOS_API EImplicitObjectType GetCollisionType() const
Definition ImplicitObject.cpp:72
static FVec3 ScaleNormalizedHelper(const FVec3 &Normal, const FVec3 &Scale)
Definition ImplicitObject.h:542
static int32 GetOffsetOfType()
Definition ImplicitObject.h:200
TargetType * AsAChecked()
Definition ImplicitObject.h:158
CHAOS_API bool IsUnderlyingMesh() const
Definition ImplicitObject.cpp:99
virtual CHAOS_API const FAABB3 BoundingBox() const
Definition ImplicitObject.cpp:118
FReal TType
Definition ImplicitObject.h:113
static FVec3 GetOuterScaledNormal(const FVec3 &InnerNormal, const FVec3 &Scale)
Definition ImplicitObject.h:553
virtual bool IsOverlappingBoundsImpl(const FAABB3 &LocalBounds) const
Definition ImplicitObject.h:534
void VisitObjects(const FImplicitHierarchyVisitorBool &Visitor) const
Definition ImplicitObject.h:459
virtual FString PerformanceWarningAndSimplifaction()
Definition ImplicitObject.h:289
EImplicitObjectType Type
Definition ImplicitObject.h:585
virtual FReal GetMargin() const
Definition ImplicitObject.h:211
bool IsA() const
Definition ImplicitObject.h:124
virtual FRealSingle GetRadiusf() const
Definition ImplicitObject.h:209
bool bDoCollide
Definition ImplicitObject.h:573
bool IsConvex() const
Definition ImplicitObject.h:277
virtual int32 FindMostOpposingFace(const FVec3 &Position, const FVec3 &UnitDir, int32 HintFaceIndex, FReal SearchDist) const
Definition ImplicitObject.h:320
virtual EImplicitObjectType GetNestedType() const
Definition ImplicitObject.h:198
virtual FReal PhiWithNormalScaled(const FVec3 &Pos, const FVec3 &Scale, FVec3 &Normal) const
Definition ImplicitObject.h:254
virtual void Serialize(FArchive &Ar)
Definition ImplicitObject.h:403
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
virtual FString ToString() const
Definition ImplicitObject.h:391
virtual void AccumulateAllSerializableImplicitObjects(TArray< Pair< TSerializablePtr< FImplicitObject >, FRigidTransform3 > > &Out, const FRigidTransform3 &ParentTM, TSerializablePtr< FImplicitObject > This) const
Definition ImplicitObject.h:384
virtual Chaos::FImplicitObjectPtr DeepCopyGeometryWithScale(const FVec3 &Scale) const
Definition ImplicitObject.h:221
CHAOS_API void SerializeImp(FArchive &Ar)
Definition ImplicitObject.cpp:337
CHAOS_API EImplicitObjectType GetType() const
Definition ImplicitObject.cpp:67
static CHAOS_API FArchive & SerializeLegacyHelper(FArchive &Ar, TUniquePtr< FImplicitObject > &Value)
Definition ImplicitObject.cpp:302
T_DERIVED & GetObjectChecked()
Definition ImplicitObject.h:192
virtual FReal PhiWithNormal(const FVec3 &x, FVec3 &Normal) const =0
void SetMargin(FReal InMargin)
Definition ImplicitObject.h:567
virtual TUniquePtr< FImplicitObject > DeepCopyWithScale(const FVec3 &Scale) const
Definition ImplicitObject.h:236
static FVec3 GetInnerUnscaledNormal(const FVec3 &OuterNormal, const FVec3 &Scale)
Definition ImplicitObject.h:559
const TargetType * AsAChecked() const
Definition ImplicitObject.h:151
virtual CHAOS_API bool IsValidGeometry() const
Definition ImplicitObject.cpp:77
virtual bool Raycast(const FVec3 &StartPoint, const FVec3 &Dir, const FReal Length, const FReal Thickness, FReal &OutTime, FVec3 &OutPosition, FVec3 &OutNormal, int32 &OutFaceIndex) const
Definition ImplicitObject.h:299
static constexpr EImplicitObjectType StaticType()
Definition ImplicitObject.h:398
bool bIsConvex
Definition ImplicitObject.h:572
virtual CHAOS_API ~FImplicitObject() override
Definition ImplicitObject.cpp:38
virtual uint16 GetMaterialIndex(uint32 HintIndex) const
Definition ImplicitObject.h:418
virtual bool VisitObjectsImpl(const FRigidTransform3 &ObjectTransform, const int32 RootObjectIndex, int32 &ObjectIndex, int32 &LeafObjectIndex, const FImplicitHierarchyVisitorBool &VisitorFunc) const
Definition ImplicitObject.h:520
virtual FRealSingle GetMarginf() const
Definition ImplicitObject.h:212
virtual void VisitOverlappingLeafObjectsImpl(const FAABB3 &LocalBounds, const FRigidTransform3 &ObjectTransform, const int32 RootObjectIndex, int32 &ObjectIndex, int32 &LeafObjectIndex, const FImplicitHierarchyVisitor &VisitorFunc) const
Definition ImplicitObject.h:490
void SetMargin(FRealSingle InMargin)
Definition ImplicitObject.h:568
virtual TUniquePtr< FImplicitObject > CopyWithScale(const FVec3 &Scale) const
Definition ImplicitObject.h:230
static constexpr int D
Definition ImplicitObject.h:114
bool GetDoCollide() const
Definition ImplicitObject.h:281
virtual FImplicitObject * Duplicate() const
Definition ImplicitObject.h:224
bool IsOverlappingBounds(const FAABB3 &LocalBounds) const
Definition ImplicitObject.h:473
FImplicitObject(const FImplicitObject &)=delete
CHAOS_API bool IsUnderlyingUnion() const
Definition ImplicitObject.cpp:94
CHAOS_API Pair< FVec3, bool > FindClosestIntersection(const FVec3 &StartPoint, const FVec3 &EndPoint, const FReal Thickness) const
Definition ImplicitObject.cpp:183
virtual Chaos::FImplicitObjectPtr DeepCopyGeometry() const
Definition ImplicitObject.h:220
virtual int32 FindMostOpposingFaceScaled(const FVec3 &Position, const FVec3 &UnitDir, int32 HintFaceIndex, FReal SearchDist, const FVec3 &Scale) const
Definition ImplicitObject.h:326
virtual bool IsPerformanceWarning() const
Definition ImplicitObject.h:288
virtual void AccumulateAllImplicitObjects(TArray< Pair< const FImplicitObject *, FRigidTransform3 > > &Out, const FRigidTransform3 &ParentTM) const
Definition ImplicitObject.h:378
virtual CHAOS_API Chaos::FImplicitObjectPtr CopyGeometry() const
Definition ImplicitObject.cpp:82
FORCEINLINE bool Intersects(const TAABB< TReal, d > &Other) const
Definition AABB.h:112
CHAOSCORE_API TAABB< T, d > TransformedAABB(const FTransform &) const
Definition AABB.cpp:385
Definition Particles.h:32
Definition Serializable.h:10
virtual void Serialize(void *V, int64 Length) override
Definition ArchiveProxy.h:97
Definition Archive.h:1208
Definition NameTypes.h:617
Definition AssetRegistryState.h:50
Definition SharedPointer.h:692
Definition UniquePtr.h:107
@ Unknown
Definition ImplicitObjectType.h:20
Definition SkeletalMeshComponent.h:307
FImplicitObject * FImplicitObjectRef
Definition ImplicitFwd.h:48
TRefCountPtr< FImplicitObject > FImplicitObjectPtr
Definition ImplicitFwd.h:33
TSharedPtr< Chaos::FImplicitObject, ESPMode::ThreadSafe > ThreadSafeSharedPtr_FImplicitObject
Definition ImplicitObject.h:618
uint8 EImplicitObjectType
Definition ImplicitObjectType.h:41
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
FRealDouble FReal
Definition Real.h:22
FImplicitObject FImplicitObject3
Definition ImplicitFwd.h:27
TSharedPtr< Chaos::FImplicitObject, ESPMode::NotThreadSafe > NotThreadSafeSharedPtr_FImplicitObject
Definition ImplicitObject.h:619
Pair< T1, T2 > MakePair(const T1 &First, const T2 &Second)
Definition Pair.h:45
float FRealSingle
Definition Real.h:14
TVector< FReal, 3 > FVec3
Definition Core.h:17
@ false
Definition radaudio_common.h:23
static PtrType Convert(const Chaos::FImplicitObjectPtr &Object)
Definition ImplicitObject.h:50
static PtrType Convert(const Chaos::FImplicitObjectPtr &Object)
Definition ImplicitObject.h:61
Definition ImplicitObject.h:42
Definition ImplicitObject.h:83
static bool IsBaseOf(const EImplicitObjectType InType)
Definition ImplicitObject.h:86
Definition NumericLimits.h:41