16#include "BodyInstance.generated.h"
18#define UE_API ENGINE_API
23class UPrimitiveComponent;
62#ifndef CHAOS_DEBUG_NAME
63#define CHAOS_DEBUG_NAME 0
66#define USE_BODYINSTANCE_DEBUG_NAMES (!NO_LOGGING && CHAOS_DEBUG_NAME)
86 struct FSerializedDataBuffer;
100template <
typename InAllocatorType = FDefaultAllocator>
130#if USE_BODYINSTANCE_DEBUG_NAMES
162template <
bool bCompileStatic,
typename InAllocatorType = FDefaultAllocator>
184template <
bool bCompileStatic>
249 ENGINE_API void UpdateResponseContainerFromArray();
254 return !(*
this ==
Other);
265 ENGINE_API bool RemoveReponseFromArray(ECollisionChannel Channel);
267 ENGINE_API void UpdateArrayFromResponseContainer();
302 class FRigidBodyHandle_Internal;
333 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=
Physics, meta = (
editcondition = "bOverrideIterationCounts", InlineEditConditionToggle, ClampMin = "0", UIMin = "0"))
337 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category =
Physics, meta = (
editcondition = "bOverrideIterationCounts", InlineEditConditionToggle, ClampMin = "0", UIMin = "0"))
341 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category =
Physics, meta = (
editcondition = "bOverrideIterationCounts", InlineEditConditionToggle, ClampMin = "0", UIMin = "0"))
342 uint8 ProjectionSolverIterationCount;
379 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category =
Physics)
392 uint8 bShapeCollisionEnabledIsSet : 1;
393 uint8 bShapeCollisionResponsesIsSet : 1;
401 uint8 bAllowPartialIslandSleep : 1;
406 uint8 bIgnoreAnalyticCollisions : 1;
410 uint8 bNotifyRigidBodyCollision : 1;
459 uint8 bOverrideMaxAngularVelocity : 1;
468 uint8 bHACK_DisableCollisionResponse : 1;
470 uint8 bHACK_DisableSkelComponentFilterOverriding : 1;
475 UPROPERTY(EditAnywhere, Category =
Physics, meta=(InlineEditConditionToggle))
476 uint8 bOverrideMaxDepenetrationVelocity : 1;
479 UPROPERTY(EditAnywhere, Category =
Physics, meta = (InlineEditConditionToggle))
480 uint8 bOverrideWalkableSlopeOnInstance : 1;
483 UPROPERTY(EditAnywhere, Category =
Physics, meta = (InlineEditConditionToggle))
493 uint8 bInterpolateWhenSubStepping : 1;
496 uint8 bPendingCollisionProfileSetup : 1;
512 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category =
Physics)
516 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category =
Physics)
521 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category =
Physics)
522 uint8 bOverrideSolverAsyncDeltaTime : 1;
526 float SolverAsyncDeltaTime;
528 float GetSolverAsyncDeltaTime()
const {
return SolverAsyncDeltaTime; }
534 void UpdateSolverAsyncDeltaTime();
538 FName CollisionProfileName;
547#if WITH_EDITORONLY_DATA
566 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category =
Physics, meta = (
editcondition =
"bOverrideMaxDepenetrationVelocity", ClampMin =
"0.0", UIMin =
"0.0"))
578 ENGINE_API void UpdateInterpolateWhenSubStepping();
583 bool ShouldInterpolateWhenSubStepping()
const {
return bInterpolateWhenSubStepping; }
603 float AngularDamping;
614 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category =
Physics, meta = (ClampMin = "0.001", UIMin = "0.001"))
618 UPROPERTY(EditAnywhere,BlueprintReadOnly,Category =
Physics, meta = (ClampMin = "0", UIMin = "0", UIMax = "7"))
622 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadWrite, Category =
Physics)
629 ENGINE_API void ClearExternalCollisionProfile();
661 float MaxAngularVelocity;
665 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category =
Physics)
666 float CustomSleepThresholdMultiplier;
669 UPROPERTY(EditAnywhere, AdvancedDisplay, BlueprintReadOnly, Category=
Physics)
670 float StabilizationThresholdMultiplier;
675 float PhysicsBlendWeight;
699#if USE_BODYINSTANCE_DEBUG_NAMES
792 ENGINE_API void InitDynamicProperties_AssumesLocked();
821 bool bNotifyRigidBodyCollision;
916 ENGINE_API bool GetOverrideWalkableSlopeOnInstance()
const;
937 ENGINE_API void SetInertiaConditioningEnabled(
bool bEnabled);
954 ENGINE_API void UpdateInstanceSimulatePhysics();
956 bool IsInstanceSimulatingPhysics()
const;
964 ENGINE_API float GetSleepThresholdMultiplier()
const;
1004 ENGINE_API float GetMaxAngularVelocityInRadians()
const;
1026 ENGINE_API void SetEnableGravity(
bool bGravityEnabled);
1030 ENGINE_API void SetUpdateKinematicFromSimulation(
bool bUpdateKinematicFromSimulation);
1066 ENGINE_API void SetOverrideIterationCounts(
bool bOverride);
1096 struct FBodyInstanceDelegates
1106 struct FBodyInstanceDelegatesPtr :
public TUniquePtr<FBodyInstanceDelegates>
1108 FBodyInstanceDelegatesPtr() =
default;
1109 FBodyInstanceDelegatesPtr(
const FBodyInstanceDelegatesPtr&
Other)
1111 if (
Other.IsValid())
1113 Reset(
new FBodyInstanceDelegates);
1118 FBodyInstanceDelegatesPtr& operator=(
const FBodyInstanceDelegatesPtr&
Other)
1120 if (
Other.IsValid())
1124 Reset(
new FBodyInstanceDelegates);
1138 FBodyInstanceDelegatesPtr BodyInstanceDelegates;
1181 ENGINE_API FVector GetUnrealWorldAngularVelocityInRadians_AssumesLocked()
const;
1276 ENGINE_API bool DoesUseCollisionProfile()
const;
1445 ENGINE_API void ApplyDeferredCollisionProfileName();
1476 ENGINE_API void UpdateMaxDepenetrationVelocity();
1483 ENGINE_API void InvalidateCollisionProfileName();
1493 template<
typename AllocatorType>
1498 friend class FBodyInstanceCustomization;
1499 friend struct FUpdateCollisionResponseHelper;
1500 friend class FBodySetupDetails;
1503 friend class FBodyInstanceCustomizationHelper;
1504 friend class FFoliageTypeCustomizationHelpers;
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
BodyInstanceSceneState
Definition BodyInstance.h:292
ENGINE_API FArchive & operator<<(FArchive &Ar, FBodyInstance &BodyInst)
Definition BodyInstance.cpp:422
ENGINE_API int32 FillInlineShapeArray_AssumesLocked(PhysicsInterfaceTypes::FInlineShapeArray &Array, const FPhysicsActorHandle &Actor)
Definition BodyInstance.cpp:129
ESleepFamily
Definition ChaosEngineInterface.h:102
uint8 FMaskFilter
Definition CollisionFilter.h:14
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_INTERNAL
Definition CoreMiscDefines.h:345
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ETeleportType
Definition EngineTypes.h:2401
EPhysicsReplicationMode
Definition EngineTypes.h:3378
ECollisionChannel
Definition EngineTypes.h:1088
ECollisionResponse
Definition EngineTypes.h:1240
auto Response
Definition ExternalRpcRegistry.cpp:598
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
const bool bTraceComplex
Definition PhysicsInterfaceUtils.h:19
#define UE_API
Definition SColorGradingComponentViewer.h:12
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition PlayerController.h:261
Definition SingleParticlePhysicsProxy.h:58
Definition Archive.h:1208
Definition NameTypes.h:617
Definition PhysScene_Chaos.h:116
Definition ChaosEngineInterface.h:241
Definition ChaosEngineInterface.h:263
Definition PhysicsUserData_Chaos.h:14
Definition PrimitiveDrawInterface.h:19
Definition PhysicsBodyInstanceOwnerInterface.h:35
Definition ArrayView.h:139
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition EnumAsByte.h:22
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition BodySetup.h:128
Definition CollisionProfile.h:161
Definition PhysicalMaterialMask.h:22
Definition PhysicalMaterial.h:104
Definition PhysicsAsset.h:172
Definition BodyInstance.h:90
Definition SkeletalMeshComponent.h:307
ESerializedDataContext
Definition SolverSerializer.h:27
Definition EngineTypes.h:1571
Type
Definition EngineTypes.h:1573
Definition BodyInstance.h:40
Type
Definition BodyInstance.h:42
@ CustomPlane
Definition BodyInstance.h:54
@ SixDOF
Definition BodyInstance.h:46
@ XZPlane
Definition BodyInstance.h:50
@ XYPlane
Definition BodyInstance.h:52
@ YZPlane
Definition BodyInstance.h:48
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
FQuat2D Rot
Definition STestSuite.cpp:5721
Definition SerializedDataBuffer.h:12
Definition BodyInstance.h:93
void UpdateBodyInstanceSolverAsyncDeltaTime(FBodyInstance *BodyInstance)
Definition BodyInstance.cpp:1219
void SetBodyInstanceExternalCollisionProfileBodySetup(FBodyInstance *BodyInstance, UBodySetup *ExternalCollisionProfileBodySetup)
Definition BodyInstance.cpp:1214
Definition PlayerController.h:231
Definition PhysicsInterfaceTypesCore.h:62
Definition PhysicsInterfaceTypesCore.h:69
Definition BodyInstance.h:307
Definition BodyInstanceCore.h:16
PHYSICSCORE_API bool ShouldInstanceSimulatingPhysics() const
Definition BodyInstanceCore.cpp:27
Definition BodyInstance.h:814
FPhysicsActorHandle GetPhysicsActor() const
Definition BodyInstance.h:816
Definition BodyInstance.h:1461
FTransform RelativeTM
Definition BodyInstance.h:1468
FBodyInstance * ChildBI
Definition BodyInstance.h:1467
FWeldInfo(FBodyInstance *InChildBI, const FTransform &InRelativeTM)
Definition BodyInstance.h:1462
Definition BodyInstance.h:320
FBodyInstanceAsyncPhysicsTickHandle GetBodyInstanceAsyncPhysicsTickHandle() const
Definition BodyInstance.h:697
ENGINE_API bool IsValidBodyInstance() const
Definition BodyInstance.cpp:2701
ENGINE_API UPhysicalMaterial * GetSimplePhysicalMaterial() const
Definition BodyInstance.cpp:3129
bool IsInstanceSimulatingPhysics() const
Definition BodyInstance.h:1570
ECollisionEnabled::Type GetCollisionEnabled(bool bCheckOwner=true) const
Definition BodyInstance.h:1241
ENGINE_API FTransform GetMassSpaceLocal() const
Definition BodyInstance.cpp:2914
ENGINE_API FTransform GetMassSpaceToWorldSpace() const
Definition BodyInstance.cpp:2902
ENGINE_API void PostShapeChange()
Definition BodyInstance.cpp:2051
ENGINE_API ~FBodyInstance()
bool IsPartialIslandSleepAllowed() const
Definition BodyInstance.h:590
const FCollisionResponseContainer & GetResponseToChannels() const
Definition BodyInstance.h:1217
static ENGINE_API void AsyncTermBody(FAsyncTermBodyPayload &Payload)
Definition BodyInstance.cpp:1820
ECollisionResponse GetResponseToChannel(ECollisionChannel Channel) const
Definition BodyInstance.h:1202
int32 GetProjectionSolverIterationCount() const
Definition BodyInstance.h:1075
ENGINE_API TArray< UPhysicalMaterial * > GetComplexPhysicalMaterials() const
Definition BodyInstance.cpp:3208
void InitBody(UBodySetup *Setup, const FTransform &Transform, UPrimitiveComponent *PrimComp, FPhysScene *InRBScene)
Definition BodyInstance.h:725
bool IsInertiaConditioningEnabled() const
Definition BodyInstance.h:934
ENGINE_API void CopyBodyInstancePropertiesFrom(const FBodyInstance *FromInst)
Definition BodyInstance.cpp:3009
bool IsUsingMACD() const
Definition BodyInstance.h:588
float GetMassOverride() const
Definition BodyInstance.h:586
int32 GetVelocitySolverIterationCount() const
Definition BodyInstance.h:1072
TWeakObjectPtr< UObject > SourceObject
Definition BodyInstance.h:710
bool OverlapMulti(TArray< struct FOverlapResult > &InOutOverlaps, const class UWorld *World, const FTransform *pWorldToComponent, const FVector &Pos, const FRotator &Rot, ECollisionChannel TestChannel, const struct FComponentQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const FCollisionObjectQueryParams &ObjectQueryParams=FCollisionObjectQueryParams::DefaultObjectQueryParam) const
bool GetOverrideMaxDepenetrationVelocity() const
Definition BodyInstance.h:1007
ENGINE_API bool Weld(FBodyInstance *Body, const FTransform &RelativeTM)
Definition BodyInstance.cpp:1914
FMaskFilter GetMaskFilter() const
Definition BodyInstance.h:1271
bool IsSolverAsyncDeltaTimeSet() const
Definition BodyInstance.h:529
ENGINE_API FAsyncTermBodyPayload StartAsyncTermBody_GameThread()
Definition BodyInstance.cpp:1793
ENGINE_API void DrawCOMPosition(class FPrimitiveDrawInterface *PDI, float COMRenderSize, const FColor &COMRenderColor)
Definition BodyInstance.cpp:3000
bool GetAllowPartialIslandSleep() const
Definition BodyInstance.h:1081
TWeakObjectPtr< class UPrimitiveComponent > OwnerComponent
Definition BodyInstance.h:704
IPhysicsBodyInstanceOwner * BodyInstanceOwner
Definition BodyInstance.h:707
int32 GetPositionSolverIterationCount() const
Definition BodyInstance.h:1069
FVector Scale3D
Definition BodyInstance.h:542
bool GetUseMACD() const
Definition BodyInstance.h:1078
FPhysicsActorHandle ActorHandle
Definition BodyInstance.h:694
float GetMaxDepenetrationVelocity() const
Definition BodyInstance.h:1021
const FCollisionResponse & GetCollisionResponse() const
Definition BodyInstance.h:1442
ENGINE_API void CopyRuntimeBodyInstancePropertiesFrom(const FBodyInstance *FromInst)
Definition BodyInstance.cpp:3021
UPhysicalMaterial * GetPhysMaterialOverride() const
Definition BodyInstance.h:1190
bool OverlapTestForBody(const FVector &Position, const FQuat &Rotation, FBodyInstance *Body, bool bTraceComplex=false) const
Definition BodyInstance.h:1563
FVector GetCOMPosition() const
Definition BodyInstance.h:865
ENGINE_API void ApplyWeldOnChildren()
Definition BodyInstance.cpp:2615
ENGINE_API bool OverlapMulti(TArray< struct FOverlapResult > &InOutOverlaps, const class UWorld *World, const FTransform *pWorldToComponent, const FVector &Pos, const FQuat &Rot, ECollisionChannel TestChannel, const struct FComponentQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const FCollisionObjectQueryParams &ObjectQueryParams=FCollisionObjectQueryParams::DefaultObjectQueryParam) const
Definition BodyInstance.cpp:4307
ENGINE_API void UnWeld(FBodyInstance *Body)
Definition BodyInstance.cpp:2007
ENGINE_API void SetContactReportForceThreshold(float Threshold)
FPhysicsUserData PhysicsUserData
Definition BodyInstance.h:1458
ENGINE_API void SetMassSpaceLocal(const FTransform &NewMassSpaceLocalTM)
Definition BodyInstance.cpp:2926
ENGINE_API void UpdateTriMeshVertices(const TArray< FVector > &NewPositions)
Definition BodyInstance.cpp:495
ECollisionChannel GetObjectType() const
Definition BodyInstance.h:1227
bool OverlapTestForBodies(const FVector &Position, const FQuat &Rotation, const TArray< FBodyInstance * > &Bodies, bool bTraceComplex=false) const
Definition BodyInstance.h:1558
ENGINE_API bool UpdateBodyScale(const FVector &InScale3D, bool bForceUpdate=false)
Definition BodyInstance.cpp:2178
Definition PhysicsPublic.h:91
Definition CollisionQueryParams.h:430
static ENGINE_API FCollisionObjectQueryParams DefaultObjectQueryParam
Definition CollisionQueryParams.h:538
Definition EngineTypes.h:1339
Definition CollisionQueryParams.h:324
Definition BodyInstance.h:227
ECollisionResponse GetResponse(ECollisionChannel Channel) const
Definition BodyInstance.h:243
const FCollisionResponseContainer & GetResponseContainer() const
Definition BodyInstance.h:244
bool operator!=(const FCollisionResponse &Other) const
Definition BodyInstance.h:252
friend struct FBodyInstance
Definition BodyInstance.h:279
Definition CollisionShape.h:21
Definition CollisionQueryParams.h:297
Definition ConstraintInstance.h:255
Definition HitResult.h:21
Definition BodyInstance.h:186
FInitBodiesHelperWithData(TArray< FBodyInstance * > &&InBodies, TArray< FTransform > &&InTransforms, class UBodySetup *InBodySetup, class UPrimitiveComponent *InPrimitiveComp, FPhysScene *InRBScene, const FInitBodySpawnParams &InSpawnParams, FPhysicsAggregateHandle InAggregate, IPhysicsBodyInstanceOwner *InBodyInstanceOwner=nullptr)
Definition BodyInstance.h:188
FInitBodiesHelperWithData(const FInitBodiesHelperWithData &InHelper)
Definition BodyInstance.h:200
FInitBodiesHelperWithData & operator=(const FInitBodiesHelperWithData &InHelper)=delete
FInitBodiesHelperWithData(FInitBodiesHelperWithData &&InHelper)
Definition BodyInstance.h:206
TArray< FBodyInstance * > OwnedBodies
Definition BodyInstance.h:221
FInitBodiesHelperWithData & operator=(FInitBodiesHelperWithData &&InHelper)=delete
FInitBodiesHelperWithData()
Definition BodyInstance.h:187
TArray< FTransform > OwnedTransforms
Definition BodyInstance.h:222
Definition BodyInstance.h:164
FInitBodiesHelper(TArray< FBodyInstance *, InAllocatorType > &InBodies, TArray< FTransform, InAllocatorType > &InTransforms, class UBodySetup *InBodySetup, class UPrimitiveComponent *InComponent, class UObject *InSourceObject, FPhysScene *InRBScene, const FInitBodySpawnParams &InSpawnParams, FPhysicsAggregateHandle InAggregate, IPhysicsBodyInstanceOwner *InBodyInstanceOwner=nullptr)
Definition BodyInstance.h:169
Definition BodyInstance.h:70
bool bStaticPhysics
Definition BodyInstance.h:75
FPhysicsAggregateHandle Aggregate
Definition BodyInstance.h:81
bool bPhysicsTypeDeterminesSimulation
Definition BodyInstance.h:78
Definition EngineTypes.h:2418
Definition UnrealType.h:6865
Definition ResourceSize.h:31
Definition ReplicatedState.h:86
Definition EngineTypes.h:3483
Definition BodyInstance.h:102
FPhysicsAggregateHandle Aggregate
Definition BodyInstance.h:128
FPhysScene * PhysScene
Definition BodyInstance.h:127
UObject * SourceObject
Definition BodyInstance.h:126
const USkeletalMeshComponent * SkelMeshComp
Definition BodyInstance.h:140
void CreateActor_AssumesLocked(FBodyInstance *Instance, const FTransform &Transform) const
Definition BodyInstance.cpp:1290
void UpdateSimulatingAndBlendWeight()
Definition BodyInstance.cpp:1283
float InstanceBlendWeight
Definition BodyInstance.h:138
void InitBodies()
Definition BodyInstance.cpp:1583
TInitBodiesHelperBase(const TInitBodiesHelperBase &InHelper)=delete
class UBodySetup * BodySetup
Definition BodyInstance.h:123
TInitBodiesHelperBase(TInitBodiesHelperBase &&InHelper)=delete
bool bInstanceSimulatePhysics
Definition BodyInstance.h:137
bool CreateShapesAndActors()
Definition BodyInstance.cpp:1432
TArray< FBodyInstance *, InAllocatorType > & Bodies
Definition BodyInstance.h:120
bool CreateShapes_AssumesLocked(FBodyInstance *Instance) const
Definition BodyInstance.cpp:1335
bool bStatic
Definition BodyInstance.h:136
TInitBodiesHelperBase & operator=(const TInitBodiesHelperBase &InHelper)=delete
class UPrimitiveComponent * PrimitiveComp
Definition BodyInstance.h:124
TArray< FTransform, InAllocatorType > & Transforms
Definition BodyInstance.h:121
const FInitBodySpawnParams & SpawnParams
Definition BodyInstance.h:142
TInitBodiesHelperBase & operator=(TInitBodiesHelperBase &&InHelper)=delete
bool DisableQueryOnlyActors
Definition BodyInstance.h:144
bool IsStatic() const
Definition BodyInstance.h:117
IPhysicsBodyInstanceOwner * BodyInstanceOwner
Definition BodyInstance.h:125
Definition ObjectPtr.h:488
Definition StructOpsTypeTraits.h:11
@ WithIdenticalViaEquality
Definition StructOpsTypeTraits.h:18
@ WithCopy
Definition StructOpsTypeTraits.h:17
Definition StructOpsTypeTraits.h:46
Definition WeakObjectPtrTemplates.h:25