---@meta

---@class FRigBodyRecord
local FRigBodyRecord = {}


---@class FRigControlRecord
local FRigControlRecord = {}


---@class FRigJointRecord
local FRigJointRecord = {}


---@class FRigPhysicsBodyComponent : FRigBaseComponent
---@field BodySolverSettings FRigPhysicsBodySolverSettings
---@field Dynamics FRigPhysicsDynamics
---@field Collision FRigPhysicsCollision
---@field BodyData FPhysicsControlModifierData
---@field KinematicTarget FTransform
---@field KinematicTargetSpace ERigPhysicsKinematicTargetSpace
---@field NoCollisionBodies TArray<FRigComponentKey>
local FRigPhysicsBodyComponent = {}



---@class FRigPhysicsBodySolverSettings
---@field PhysicsSolverComponentKey FRigComponentKey
---@field bUseAutomaticSolver boolean
---@field SourceBone FRigElementKey
---@field TargetBone FRigElementKey
local FRigPhysicsBodySolverSettings = {}



---@class FRigPhysicsCollision
---@field Boxes TArray<FRigPhysicsCollisionBox>
---@field Spheres TArray<FRigPhysicsCollisionSphere>
---@field Capsules TArray<FRigPhysicsCollisionCapsule>
---@field Material FRigPhysicsMaterial
local FRigPhysicsCollision = {}



---@class FRigPhysicsCollisionBox : FRigPhysicsCollisionShape
---@field TM FTransform
---@field Extents FVector
local FRigPhysicsCollisionBox = {}



---@class FRigPhysicsCollisionCapsule : FRigPhysicsCollisionShape
---@field TM FTransform
---@field Radius float
---@field Length float
local FRigPhysicsCollisionCapsule = {}



---@class FRigPhysicsCollisionShape
---@field RestOffset float
---@field Name FName
---@field bContributeToMass boolean
local FRigPhysicsCollisionShape = {}



---@class FRigPhysicsCollisionSphere : FRigPhysicsCollisionShape
---@field TM FTransform
---@field Radius float
local FRigPhysicsCollisionSphere = {}



---@class FRigPhysicsControlComponent : FRigBaseComponent
---@field ParentBodyComponentKey FRigComponentKey
---@field bUseParentBodyAsDefault boolean
---@field ChildBodyComponentKey FRigComponentKey
---@field ControlData FPhysicsControlData
---@field ControlMultiplier FPhysicsControlMultiplier
---@field ControlTarget FPhysicsControlTarget
local FRigPhysicsControlComponent = {}



---@class FRigPhysicsDriveData
---@field LinearDriveConstraint FLinearDriveConstraint
---@field AngularDriveConstraint FAngularDriveConstraint
---@field SkeletalAnimationVelocityMultiplier float
local FRigPhysicsDriveData = {}



---@class FRigPhysicsDynamics
---@field Density float
---@field MassOverride float
---@field bOverrideCentreOfMass boolean
---@field CentreOfMassOverride FVector
---@field bOverrideMomentsOfInertia boolean
---@field MomentsOfInertiaOverride FVector
---@field LinearDamping float
---@field AngularDamping float
local FRigPhysicsDynamics = {}



---@class FRigPhysicsJointComponent : FRigBaseComponent
---@field ParentBodyComponentKey FRigComponentKey
---@field ChildBodyComponentKey FRigComponentKey
---@field JointData FRigPhysicsJointData
---@field DriveData FRigPhysicsDriveData
local FRigPhysicsJointComponent = {}



---@class FRigPhysicsJointData
---@field bAutoCalculateParentOffset boolean
---@field ExtraParentOffset FTransform
---@field bAutoCalculateChildOffset boolean
---@field ExtraChildOffset FTransform
---@field LinearConstraint FLinearConstraint
---@field ConeConstraint FConeConstraint
---@field TwistConstraint FTwistConstraint
---@field bDisableCollision boolean
---@field LinearProjectionAmount float
---@field AngularProjectionAmount float
---@field ParentInverseMassScale float
local FRigPhysicsJointData = {}



---@class FRigPhysicsMaterial
---@field Friction float
---@field Restitution float
---@field FrictionCombineMode ERigPhysicsCombineMode
---@field RestitutionCombineMode ERigPhysicsCombineMode
local FRigPhysicsMaterial = {}



---@class FRigPhysicsSimulation : FRigPhysicsSimulationBase
local FRigPhysicsSimulation = {}


---@class FRigPhysicsSimulationSpaceSettings
---@field SpaceMovementAmount float
---@field VelocityScaleZ float
---@field bClampLinearVelocity boolean
---@field MaxLinearVelocity float
---@field bClampAngularVelocity boolean
---@field MaxAngularVelocity float
---@field bClampLinearAcceleration boolean
---@field MaxLinearAcceleration float
---@field bClampAngularAcceleration boolean
---@field MaxAngularAcceleration float
---@field LinearAccelerationThresholdForTeleport float
---@field AngularAccelerationThresholdForTeleport float
---@field PositionChangeThresholdForTeleport float
---@field OrientationChangeThresholdForTeleport float
---@field LinearDragMultiplier float
---@field AngularDragMultiplier float
---@field ExternalLinearDrag FVector
---@field ExternalLinearVelocity FVector
---@field ExternalAngularVelocity FVector
local FRigPhysicsSimulationSpaceSettings = {}



---@class FRigPhysicsSolverComponent : FRigBaseComponent
---@field SolverSettings FRigPhysicsSolverSettings
---@field SimulationSpaceSettings FRigPhysicsSimulationSpaceSettings
local FRigPhysicsSolverComponent = {}



---@class FRigPhysicsSolverSettings
---@field bAutomaticallyAddPhysicsComponents boolean
---@field SimulationSpace ERigPhysicsSimulationSpace
---@field CollisionSpace ERigPhysicsSimulationSpace
---@field SpaceBone FRigElementKey
---@field Collision FRigPhysicsCollision
---@field Gravity FVector
---@field PositionIterations int32
---@field VelocityIterations int32
---@field ProjectionIterations int32
---@field MaxNumRollingAverageStepTimes int32
---@field CollisionBoundsExpansion float
---@field BoundsVelocityMultiplier float
---@field MaxVelocityBoundsExpansion float
---@field MaxDepenetrationVelocity float
---@field FixedTimeStep float
---@field MaxTimeSteps int32
---@field MaxDeltaTime float
---@field bUseLinearJointSolver boolean
---@field bSolveJointPositionsLast boolean
---@field bUseManifolds boolean
---@field PositionThresholdForReset float
---@field KinematicSpeedThresholdForReset float
---@field KinematicAccelerationThresholdForReset float
local FRigPhysicsSolverSettings = {}



---@class FRigPhysicsVisualizationSettings
---@field bEnableVisualization boolean
---@field LineThickness float
---@field ShapeSize int32
---@field ShapeDetail int32
---@field bShowActiveContacts boolean
---@field bShowInactiveContacts boolean
local FRigPhysicsVisualizationSettings = {}



---@class FRigUnit_AddPhysicsBody : FRigUnit_PhysicsBaseMutable
---@field Owner FRigElementKey
---@field PhysicsBodyComponentKey FRigComponentKey
---@field Solver FRigPhysicsBodySolverSettings
---@field Dynamics FRigPhysicsDynamics
---@field Collision FRigPhysicsCollision
---@field BodyData FPhysicsControlModifierData
local FRigUnit_AddPhysicsBody = {}



---@class FRigUnit_AddPhysicsComponents : FRigUnit_PhysicsBaseMutable
---@field Owner FRigElementKey
---@field bAddJoint boolean
---@field bAddSimSpaceControl boolean
---@field bAddParentSpaceControl boolean
---@field PhysicsBodyComponentKey FRigComponentKey
---@field PhysicsJointComponentKey FRigComponentKey
---@field SimSpaceControlComponentKey FRigComponentKey
---@field ParentSpaceControlComponentKey FRigComponentKey
---@field Solver FRigPhysicsBodySolverSettings
---@field Dynamics FRigPhysicsDynamics
---@field Collision FRigPhysicsCollision
---@field BodyData FPhysicsControlModifierData
---@field JointData FRigPhysicsJointData
---@field DriveData FRigPhysicsDriveData
---@field SimSpaceControlData FPhysicsControlData
---@field ParentSpaceControlData FPhysicsControlData
local FRigUnit_AddPhysicsComponents = {}



---@class FRigUnit_AddPhysicsControl : FRigUnit_PhysicsBaseMutable
---@field Owner FRigElementKey
---@field ControlComponentKey FRigComponentKey
---@field ParentBodyComponentKey FRigComponentKey
---@field ChildBodyComponentKey FRigComponentKey
---@field ControlData FPhysicsControlData
---@field ControlMultiplier FPhysicsControlMultiplier
---@field ControlTarget FPhysicsControlTarget
local FRigUnit_AddPhysicsControl = {}



---@class FRigUnit_AddPhysicsJoint : FRigUnit_PhysicsBaseMutable
---@field Owner FRigElementKey
---@field PhysicsJointComponentKey FRigComponentKey
---@field ParentBodyComponentKey FRigComponentKey
---@field ChildBodyComponentKey FRigComponentKey
---@field JointData FRigPhysicsJointData
---@field DriveData FRigPhysicsDriveData
local FRigUnit_AddPhysicsJoint = {}



---@class FRigUnit_AddPhysicsSolver : FRigUnit_PhysicsBaseMutable
---@field Owner FRigElementKey
---@field PhysicsSolverComponentKey FRigComponentKey
---@field SolverSettings FRigPhysicsSolverSettings
---@field SimulationSpaceSettings FRigPhysicsSimulationSpaceSettings
local FRigUnit_AddPhysicsSolver = {}



---@class FRigUnit_GetPhysicsSolverSpaceData : FRigUnit_PhysicsBase
---@field PhysicsSolverComponentKey FRigComponentKey
---@field LinearVelocity FVector
---@field AngularVelocity FVector
---@field LinearAcceleration FVector
---@field AngularAcceleration FVector
---@field Gravity FVector
local FRigUnit_GetPhysicsSolverSpaceData = {}



---@class FRigUnit_HierarchyAutoCalculateCollision : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field MinAspectRatio float
---@field MinSize float
local FRigUnit_HierarchyAutoCalculateCollision = {}



---@class FRigUnit_HierarchyDisableCollisionBetween : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey1 FRigComponentKey
---@field PhysicsBodyComponentKey2 FRigComponentKey
local FRigUnit_HierarchyDisableCollisionBetween = {}



---@class FRigUnit_HierarchyInstantiateFromPhysicsAsset : FRigUnit_PhysicsBaseMutable
---@field Solver FRigPhysicsBodySolverSettings
---@field PhysicsAsset UPhysicsAsset
---@field ConstraintProfileName FName
---@field BonesToUse TArray<FRigElementKey>
---@field bEnableJoints boolean
---@field bEnableDrives boolean
---@field bAddSimSpaceControl boolean
---@field bAddParentSpaceControl boolean
---@field SimSpaceControlData FPhysicsControlData
---@field ParentSpaceControlData FPhysicsControlData
---@field PhysicsBodyComponentKeys TArray<FRigComponentKey>
---@field PhysicsJointComponentKeys TArray<FRigComponentKey>
---@field SimSpaceControlComponentKeys TArray<FRigComponentKey>
---@field ParentSpaceControlComponentKeys TArray<FRigComponentKey>
local FRigUnit_HierarchyInstantiateFromPhysicsAsset = {}



---@class FRigUnit_HierarchySetCollision : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field Collision FRigPhysicsCollision
local FRigUnit_HierarchySetCollision = {}



---@class FRigUnit_HierarchySetControlData : FRigUnit_PhysicsBaseMutable
---@field PhysicsControlComponentKey FRigComponentKey
---@field ControlData FPhysicsControlData
local FRigUnit_HierarchySetControlData = {}



---@class FRigUnit_HierarchySetControlMultiplier : FRigUnit_PhysicsBaseMutable
---@field PhysicsControlComponentKey FRigComponentKey
---@field ControlMultiplier FPhysicsControlMultiplier
local FRigUnit_HierarchySetControlMultiplier = {}



---@class FRigUnit_HierarchySetControlTarget : FRigUnit_PhysicsBaseMutable
---@field PhysicsControlComponentKey FRigComponentKey
---@field ControlTarget FPhysicsControlTarget
local FRigUnit_HierarchySetControlTarget = {}



---@class FRigUnit_HierarchySetDynamics : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field Dynamics FRigPhysicsDynamics
local FRigUnit_HierarchySetDynamics = {}



---@class FRigUnit_HierarchySetJointData : FRigUnit_PhysicsBaseMutable
---@field PhysicsJointComponentKey FRigComponentKey
---@field JointData FRigPhysicsJointData
local FRigUnit_HierarchySetJointData = {}



---@class FRigUnit_HierarchySetJointDriveData : FRigUnit_PhysicsBaseMutable
---@field PhysicsJointComponentKey FRigComponentKey
---@field DriveData FRigPhysicsDriveData
local FRigUnit_HierarchySetJointDriveData = {}



---@class FRigUnit_HierarchySetPhysicsBodyCollisionType : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field CollisionType ECollisionEnabled::Type
local FRigUnit_HierarchySetPhysicsBodyCollisionType = {}



---@class FRigUnit_HierarchySetPhysicsBodyDamping : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field LinearDamping float
---@field AngularDamping float
local FRigUnit_HierarchySetPhysicsBodyDamping = {}



---@class FRigUnit_HierarchySetPhysicsBodyGravityMultiplier : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field GravityMultiplier float
local FRigUnit_HierarchySetPhysicsBodyGravityMultiplier = {}



---@class FRigUnit_HierarchySetPhysicsBodyKinematicTarget : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field KinematicTargetSpace ERigPhysicsKinematicTargetSpace
---@field KinematicTarget FTransform
local FRigUnit_HierarchySetPhysicsBodyKinematicTarget = {}



---@class FRigUnit_HierarchySetPhysicsBodyMovementType : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field MovementType EPhysicsMovementType
local FRigUnit_HierarchySetPhysicsBodyMovementType = {}



---@class FRigUnit_HierarchySetPhysicsBodyPhysicsBlendWeight : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field PhysicsBlendWeight float
local FRigUnit_HierarchySetPhysicsBodyPhysicsBlendWeight = {}



---@class FRigUnit_HierarchySetPhysicsBodySourceBone : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field SourceBone FRigElementKey
local FRigUnit_HierarchySetPhysicsBodySourceBone = {}



---@class FRigUnit_HierarchySetPhysicsBodySparseData : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field Data FPhysicsControlModifierSparseData
local FRigUnit_HierarchySetPhysicsBodySparseData = {}



---@class FRigUnit_HierarchySetPhysicsBodyTargetBone : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field TargetBone FRigElementKey
local FRigUnit_HierarchySetPhysicsBodyTargetBone = {}



---@class FRigUnit_HierarchySetPhysicsBodyUpdateKinematicFromSimulation : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field bUpdateKinematicFromSimulation boolean
local FRigUnit_HierarchySetPhysicsBodyUpdateKinematicFromSimulation = {}



---@class FRigUnit_HierarchySetPhysicsBodyUseSkeletalAnimation : FRigUnit_PhysicsBaseMutable
---@field PhysicsBodyComponentKey FRigComponentKey
---@field bUseSkeletalAnimation boolean
local FRigUnit_HierarchySetPhysicsBodyUseSkeletalAnimation = {}



---@class FRigUnit_InstantiatePhysics : FRigUnit_PhysicsBaseMutable
---@field PhysicsSolverComponentKey FRigComponentKey
local FRigUnit_InstantiatePhysics = {}



---@class FRigUnit_MakeArticulationDriveData : FRigUnit_PhysicsBase
---@field bEnableAngularDrive boolean
---@field AngularDriveMode EAngularDriveMode::Type
---@field AngularStrength float
---@field AngularDampingRatio float
---@field AngularExtraDamping float
---@field SkeletalAnimationVelocityMultiplier float
---@field DriveData FRigPhysicsDriveData
local FRigUnit_MakeArticulationDriveData = {}



---@class FRigUnit_MakeArticulationJointData : FRigUnit_PhysicsBase
---@field AngularLimit FVector
---@field SoftStrength FVector
---@field SoftDampingRatio FVector
---@field JointData FRigPhysicsJointData
local FRigUnit_MakeArticulationJointData = {}



---@class FRigUnit_MakeDriveData : FRigUnit_PhysicsBase
---@field bEnableLinearDrive boolean
---@field LinearStrength float
---@field LinearDampingRatio float
---@field LinearExtraDamping float
---@field bEnableAngularDrive boolean
---@field AngularDriveMode EAngularDriveMode::Type
---@field AngularStrength float
---@field AngularDampingRatio float
---@field AngularExtraDamping float
---@field SkeletalAnimationVelocityMultiplier float
---@field DriveData FRigPhysicsDriveData
local FRigUnit_MakeDriveData = {}



---@class FRigUnit_PhysicsBase : FRigUnit
local FRigUnit_PhysicsBase = {}


---@class FRigUnit_PhysicsBaseMutable : FRigUnitMutable
local FRigUnit_PhysicsBaseMutable = {}


---@class FRigUnit_StepPhysicsSolver : FRigUnit_PhysicsBaseMutable
---@field PhysicsSolverComponentKey FRigComponentKey
---@field DeltaTimeOverride float
---@field SimulationSpaceDeltaTimeOverride float
---@field Alpha float
---@field VisualizationSettings FRigPhysicsVisualizationSettings
local FRigUnit_StepPhysicsSolver = {}



---@class FRigUnit_TrackInputPose : FRigUnit_PhysicsBaseMutable
---@field PhysicsSolverComponentKey FRigComponentKey
---@field NumberOfFrames int32
---@field bForceNumberOfFrames boolean
local FRigUnit_TrackInputPose = {}



