---@meta

---@class FChaosVDAABBTreeDataWrapper : FChaosVDAccelerationStructureBase
---@field RootNodeIndex int32
---@field TreeDepth int32
---@field NodesNum int32
---@field LeavesNum int32
---@field bDynamicTree boolean
---@field MaxChildrenInLeaf int32
---@field MaxTreeDepth int32
---@field MaxPayloadBounds double
local FChaosVDAABBTreeDataWrapper = {}



---@class FChaosVDAABBTreeLeafDataWrapper : FChaosVDWrapperDataBase
---@field Elements TArray<FChaosVDAABBTreePayloadBoundsElement>
---@field Bounds FBox
local FChaosVDAABBTreeLeafDataWrapper = {}



---@class FChaosVDAABBTreeNodeDataWrapper : FChaosVDWrapperDataBase
---@field ChildrenBounds FBox
---@field ChildrenNodes int32
---@field ParentNode int32
---@field bLeaf boolean
---@field bDirtyNode boolean
local FChaosVDAABBTreeNodeDataWrapper = {}



---@class FChaosVDAABBTreePayloadBoundsElement : FChaosVDWrapperDataBase
---@field ParticleIndex int32
---@field Bounds FBox
local FChaosVDAABBTreePayloadBoundsElement = {}



---@class FChaosVDAccelerationStructureBase : FChaosVDWrapperDataBase
---@field SolverId int32
---@field Type EChaosVDAccelerationStructureType
local FChaosVDAccelerationStructureBase = {}



---@class FChaosVDAccelerationStructureContainer
local FChaosVDAccelerationStructureContainer = {}


---@class FChaosVDBVCellElementDataWrapper : FChaosVDWrapperDataBase
---@field Bounds FBox
---@field ParticleIndex int32
local FChaosVDBVCellElementDataWrapper = {}



---@class FChaosVDBoundingVolumeDataWrapper : FChaosVDAccelerationStructureBase
---@field MaxPayloadBounds double
local FChaosVDBoundingVolumeDataWrapper = {}



---@class FChaosVDCharacterGroundConstraint : FChaosVDConstraintDataWrapperBase
---@field ConstraintIndex int32
---@field State FChaosVDCharacterGroundConstraintStateDataWrapper
---@field Settings FChaosVDCharacterGroundConstraintSettingsDataWrapper
---@field Data FChaosVDCharacterGroundConstraintDataDataWrapper
local FChaosVDCharacterGroundConstraint = {}



---@class FChaosVDCharacterGroundConstraintDataDataWrapper : FChaosVDWrapperDataBase
---@field GroundNormal FVector
---@field TargetDeltaPosition FVector
---@field TargetDeltaFacing double
---@field GroundDistance double
---@field CosMaxWalkableSlopeAngle double
local FChaosVDCharacterGroundConstraintDataDataWrapper = {}



---@class FChaosVDCharacterGroundConstraintSettingsDataWrapper : FChaosVDWrapperDataBase
---@field VerticalAxis FVector
---@field TargetHeight double
---@field RadialForceLimit double
---@field FrictionForceLimit double
---@field TwistTorqueLimit double
---@field SwingTorqueLimit double
---@field CosMaxWalkableSlopeAngle double
---@field DampingFactor double
---@field AssumedOnGroundHeight double
local FChaosVDCharacterGroundConstraintSettingsDataWrapper = {}



---@class FChaosVDCharacterGroundConstraintStateDataWrapper : FChaosVDWrapperDataBase
---@field bDisabled boolean
---@field SolverAppliedForce FVector
---@field SolverAppliedTorque FVector
local FChaosVDCharacterGroundConstraintStateDataWrapper = {}



---@class FChaosVDCollisionChannelInfo
---@field DisplayName FString
---@field CollisionChannel int32
---@field bIsTraceType boolean
local FChaosVDCollisionChannelInfo = {}



---@class FChaosVDCollisionChannelsInfoContainer
---@field CustomChannelsNames FChaosVDCollisionChannelInfo
local FChaosVDCollisionChannelsInfoContainer = {}



---@class FChaosVDCollisionFilterData
---@field Word0 uint32
---@field Word1 uint32
---@field Word2 uint32
---@field Word3 uint32
local FChaosVDCollisionFilterData = {}



---@class FChaosVDCollisionMaterial
---@field FaceIndex int32
---@field MaterialDynamicFriction float
---@field MaterialStaticFriction float
---@field MaterialRestitution float
---@field DynamicFriction float
---@field StaticFriction float
---@field Restitution float
---@field RestitutionThreshold float
---@field InvMassScale0 float
---@field InvMassScale1 float
---@field InvInertiaScale0 float
---@field InvInertiaScale1 float
local FChaosVDCollisionMaterial = {}



---@class FChaosVDCollisionObjectQueryParams : FChaosVDWrapperDataBase
---@field ObjectTypesToQuery uint8
---@field IgnoreMask uint8
local FChaosVDCollisionObjectQueryParams = {}



---@class FChaosVDCollisionQueryParams : FChaosVDWrapperDataBase
---@field TraceTag FName
---@field OwnerTag FName
---@field bTraceComplex boolean
---@field bFindInitialOverlaps boolean
---@field bReturnFaceIndex boolean
---@field bReturnPhysicalMaterial boolean
---@field bIgnoreBlocks boolean
---@field bIgnoreTouches boolean
---@field bSkipNarrowPhase boolean
---@field bTraceIntoSubComponents boolean
---@field bReplaceHitWithSubComponents boolean
---@field IgnoreMask uint8
---@field IgnoredActorsNames TArray<FName>
---@field IgnoredComponentsNames TArray<FName>
local FChaosVDCollisionQueryParams = {}



---@class FChaosVDCollisionResponseParams : FChaosVDWrapperDataBase
local FChaosVDCollisionResponseParams = {}


---@class FChaosVDConnectivityEdge
---@field SiblingParticleID int32
---@field Strain float
local FChaosVDConnectivityEdge = {}



---@class FChaosVDConstraint
---@field bIsCurrent boolean
---@field bDisabled boolean
---@field bUseManifold boolean
---@field bUseIncrementalManifold boolean
---@field bCanRestoreManifold boolean
---@field bWasManifoldRestored boolean
---@field bIsQuadratic0 boolean
---@field bIsQuadratic1 boolean
---@field bIsProbe boolean
---@field bCCDEnabled boolean
---@field bCCDSweepEnabled boolean
---@field bModifierApplied boolean
---@field bMaterialSet boolean
---@field Material FChaosVDCollisionMaterial
---@field AccumulatedImpulse FVector
---@field ShapesType EChaosVDContactShapesType
---@field ShapeWorldTransforms FTransform
---@field ImplicitTransforms FTransform
---@field CullDistance float
---@field CollisionMargins TArray<float>
---@field CollisionTolerance float
---@field ClosestManifoldPointIndex int32
---@field ExpectedNumManifoldPoints int32
---@field LastShapeWorldPositionDelta FVector
---@field LastShapeWorldRotationDelta FQuat
---@field Stiffness float
---@field MinInitialPhi float
---@field InitialOverlapDepenetrationVelocity float
---@field CCDTimeOfImpact float
---@field CCDEnablePenetration float
---@field CCDTargetPenetration float
---@field ManifoldPoints TArray<FChaosVDManifoldPoint>
---@field Particle0Index int32
---@field Particle1Index int32
---@field SolverId int32
local FChaosVDConstraint = {}



---@class FChaosVDConstraintDataWrapperBase : FChaosVDWrapperDataBase
local FChaosVDConstraintDataWrapperBase = {}


---@class FChaosVDContactPoint
---@field ShapeContactPoints FVector
---@field ShapeContactNormal FVector
---@field Phi float
---@field FaceIndex int32
---@field ContactType EChaosVDContactPointType
local FChaosVDContactPoint = {}



---@class FChaosVDDebugDrawBoxDataWrapper : FChaosVDDebugDrawShapeBase
---@field Box FBox
local FChaosVDDebugDrawBoxDataWrapper = {}



---@class FChaosVDDebugDrawImplicitObjectDataWrapper : FChaosVDDebugDrawShapeBase
local FChaosVDDebugDrawImplicitObjectDataWrapper = {}


---@class FChaosVDDebugDrawLineDataWrapper : FChaosVDDebugDrawShapeBase
---@field StartLocation FVector
---@field EndLocation FVector
---@field bIsArrow boolean
local FChaosVDDebugDrawLineDataWrapper = {}



---@class FChaosVDDebugDrawShapeBase : FChaosVDWrapperDataBase
---@field SolverId int32
---@field Tag FName
---@field Color FColor
---@field ThreadContext EChaosVDParticleContext
local FChaosVDDebugDrawShapeBase = {}



---@class FChaosVDDebugDrawSphereDataWrapper : FChaosVDDebugDrawShapeBase
---@field Origin FVector
---@field Radius float
local FChaosVDDebugDrawSphereDataWrapper = {}



---@class FChaosVDDebugShapeDataContainer
local FChaosVDDebugShapeDataContainer = {}


---@class FChaosVDFRigidParticleControlFlags : FChaosVDWrapperDataBase
---@field bGravityEnabled boolean
---@field bCCDEnabled boolean
---@field bOneWayInteractionEnabled boolean
---@field bInertiaConditioningEnabled boolean
---@field GravityGroupIndex int32
---@field bMACDEnabled boolean
---@field bGyroscopicTorqueEnabled boolean
---@field PositionSolverIterationCount uint8
---@field VelocitySolverIterationCount uint8
---@field ProjectionSolverIterationCount uint8
local FChaosVDFRigidParticleControlFlags = {}



---@class FChaosVDGTJointStateDataWrapper : FChaosVDWrapperDataBase
---@field bIsBreaking boolean
---@field bIsBroken boolean
---@field bDriveTargetChanged boolean
---@field bIsViolating boolean
---@field Force FVector
---@field Torque FVector
---@field LinearViolation float
---@field AngularViolation float
local FChaosVDGTJointStateDataWrapper = {}



---@class FChaosVDJointConstraint : FChaosVDConstraintDataWrapperBase
---@field ConstraintIndex int32
---@field PhysicsThreadJointState FChaosVDJointStateDataWrapper
---@field GameThreadJointState FChaosVDGTJointStateDataWrapper
---@field JointSettings FChaosVDJointSettingsDataWrapper
local FChaosVDJointConstraint = {}



---@class FChaosVDJointSettingsDataWrapper : FChaosVDWrapperDataBase
---@field ConnectorTransforms FTransform
---@field Stiffness double
---@field LinearProjection double
---@field AngularProjection double
---@field ShockPropagation double
---@field TeleportDistance double
---@field TeleportAngle double
---@field ParentInvMassScale double
---@field bCollisionEnabled boolean
---@field bMassConditioningEnabled boolean
---@field bUseLinearSolver boolean
---@field bSoftLinearLimitsEnabled boolean
---@field bSoftTwistLimitsEnabled boolean
---@field bSoftSwingLimitsEnabled boolean
---@field bAngularSLerpPositionDriveEnabled boolean
---@field bAngularSLerpVelocityDriveEnabled boolean
---@field bAngularTwistPositionDriveEnabled boolean
---@field bAngularTwistVelocityDriveEnabled boolean
---@field bAngularSwingPositionDriveEnabled boolean
---@field bAngularSwingVelocityDriveEnabled boolean
---@field LinearMotionTypes EChaosVDJointMotionType
---@field LinearLimit double
---@field AngularMotionTypes EChaosVDJointMotionType
---@field AngularLimits FVector
---@field LinearSoftForceMode EChaosVDJointForceMode
---@field AngularSoftForceMode EChaosVDJointForceMode
---@field SoftLinearStiffness double
---@field SoftLinearDamping double
---@field SoftTwistStiffness double
---@field SoftTwistDamping double
---@field SoftSwingStiffness double
---@field SoftSwingDamping double
---@field LinearRestitution double
---@field TwistRestitution double
---@field SwingRestitution double
---@field LinearContactDistance double
---@field TwistContactDistance double
---@field SwingContactDistance double
---@field LinearDrivePositionTarget FVector
---@field LinearDriveVelocityTarget FVector
---@field bLinearPositionDriveEnabled0 boolean
---@field bLinearPositionDriveEnabled1 boolean
---@field bLinearPositionDriveEnabled2 boolean
---@field bLinearVelocityDriveEnabled0 boolean
---@field bLinearVelocityDriveEnabled1 boolean
---@field bLinearVelocityDriveEnabled2 boolean
---@field LinearDriveForceMode EChaosVDJointForceMode
---@field LinearDriveStiffness FVector
---@field LinearDriveDamping FVector
---@field LinearDriveMaxForce FVector
---@field AngularDrivePositionTarget FQuat
---@field AngularDriveVelocityTarget FVector
---@field AngularDriveForceMode EChaosVDJointForceMode
---@field AngularDriveStiffness FVector
---@field AngularDriveDamping FVector
---@field AngularDriveMaxTorque FVector
---@field LinearBreakForce double
---@field LinearPlasticityLimit double
---@field LinearPlasticityType EChaosVDPlasticityType
---@field LinearPlasticityInitialDistanceSquared double
---@field AngularBreakTorque double
---@field AngularPlasticityLimit double
---@field ContactTransferScale double
local FChaosVDJointSettingsDataWrapper = {}



---@class FChaosVDJointSolverSettingsDataWrapper : FChaosVDWrapperDataBase
---@field SwingTwistAngleTolerance double
---@field PositionTolerance double
---@field AngleTolerance double
---@field MinParentMassRatio double
---@field MaxInertiaRatio double
---@field MinSolverStiffness double
---@field MaxSolverStiffness double
---@field NumIterationsAtMaxSolverStiffness int32
---@field NumShockPropagationIterations int32
---@field bUseLinearSolver boolean
---@field bSortEnabled boolean
---@field bSolvePositionLast boolean
---@field bUsePositionBasedDrives boolean
---@field bEnableTwistLimits boolean
---@field bEnableSwingLimits boolean
---@field bEnableDrives boolean
---@field LinearStiffnessOverride double
---@field TwistStiffnessOverride double
---@field SwingStiffnessOverride double
---@field LinearProjectionOverride double
---@field AngularProjectionOverride double
---@field ShockPropagationOverride double
---@field LinearDriveStiffnessOverride double
---@field LinearDriveDampingOverride double
---@field AngularDriveStiffnessOverride double
---@field AngularDriveDampingOverride double
---@field SoftLinearStiffnessOverride double
---@field SoftLinearDampingOverride double
---@field SoftTwistStiffnessOverride double
---@field SoftTwistDampingOverride double
---@field SoftSwingStiffnessOverride double
---@field SoftSwingDampingOverride double
local FChaosVDJointSolverSettingsDataWrapper = {}



---@class FChaosVDJointStateDataWrapper : FChaosVDWrapperDataBase
---@field bDisabled boolean
---@field bBroken boolean
---@field bBreaking boolean
---@field bDriveTargetChanged boolean
---@field bEnabledDuringResim boolean
---@field LinearImpulse FVector
---@field AngularImpulse FVector
---@field ResimType EChaosVDJointReSimType
---@field SyncState EChaosVDJointSyncType
local FChaosVDJointStateDataWrapper = {}



---@class FChaosVDKinematicTarget : FChaosVDWrapperDataBase
---@field Rotation FQuat
---@field Position FVector
---@field Mode EChaosVDKinematicTargetMode
local FChaosVDKinematicTarget = {}



---@class FChaosVDManifoldPoint
---@field bDisabled boolean
---@field bWasRestored boolean
---@field bWasReplaced boolean
---@field bHasStaticFrictionAnchor boolean
---@field bIsValid boolean
---@field bInsideStaticFrictionCone boolean
---@field NetPushOut FVector
---@field NetImpulse FVector
---@field TargetPhi float
---@field InitialPhi float
---@field ShapeAnchorPoints FVector
---@field InitialShapeContactPoints FVector
---@field ContactPoint FChaosVDContactPoint
---@field ShapeContactPoints FVector
local FChaosVDManifoldPoint = {}



---@class FChaosVDMultiSolverDebugShapeDataContainer
local FChaosVDMultiSolverDebugShapeDataContainer = {}


---@class FChaosVDParticleBounds : FChaosVDWrapperDataBase
---@field MMin FVector
---@field MMax FVector
local FChaosVDParticleBounds = {}



---@class FChaosVDParticleCluster : FChaosVDWrapperDataBase
---@field ParentParticleID int32
---@field NumChildren int32
---@field ChildToParent FTransform
---@field ClusterGroupIndex int32
---@field bInternalCluster boolean
---@field CollisionImpulse float
---@field ExternalStrains float
---@field InternalStrains float
---@field Strain float
---@field ConnectivityEdges TArray<FChaosVDConnectivityEdge>
---@field bIsAnchored boolean
---@field bUnbreakable boolean
---@field bIsChildToParentLocked boolean
local FChaosVDParticleCluster = {}



---@class FChaosVDParticleDataWrapper : FChaosVDWrapperDataBase
---@field DirtyFlagsBits int32
---@field ParticleContext EChaosVDParticleContext
---@field GeometryHash uint32
---@field DebugName FString
---@field ParticleIndex int32
---@field SolverId int32
---@field Type EChaosVDParticleType
---@field ParticlePositionRotation FChaosVDParticlePositionRotation
---@field ParticleVelocities FChaosVDParticleVelocities
---@field ParticleInflatedBounds FChaosVDParticleBounds
---@field ParticleKinematicTarget FChaosVDKinematicTarget
---@field ParticleVWSmooth FChaosVDVSmooth
---@field ParticleDynamics FChaosVDParticleDynamics
---@field ParticleDynamicsMisc FChaosVDParticleDynamicMisc
---@field ParticleMassProps FChaosVDParticleMassProps
---@field ParticleCluster FChaosVDParticleCluster
---@field CollisionDataPerShape TArray<FChaosVDShapeCollisionData>
local FChaosVDParticleDataWrapper = {}



---@class FChaosVDParticleDynamicMisc : FChaosVDWrapperDataBase
---@field MLinearEtherDrag double
---@field MAngularEtherDrag double
---@field MMaxLinearSpeedSq double
---@field MMaxAngularSpeedSq double
---@field MInitialOverlapDepenetrationVelocity float
---@field MSleepThresholdMultiplier float
---@field MCollisionGroup int32
---@field MObjectState EChaosVDObjectStateType
---@field MSleepType EChaosVDSleepType
---@field MCollisionConstraintFlag uint32
---@field MControlFlags FChaosVDFRigidParticleControlFlags
---@field bDisabled boolean
local FChaosVDParticleDynamicMisc = {}



---@class FChaosVDParticleDynamics : FChaosVDWrapperDataBase
---@field MAcceleration FVector
---@field MAngularAcceleration FVector
---@field MLinearImpulseVelocity FVector
---@field MAngularImpulseVelocity FVector
local FChaosVDParticleDynamics = {}



---@class FChaosVDParticleMassProps : FChaosVDWrapperDataBase
---@field MCenterOfMass FVector
---@field MRotationOfMass FQuat
---@field MI FVector
---@field MInvI FVector
---@field MM double
---@field MInvM double
local FChaosVDParticleMassProps = {}



---@class FChaosVDParticlePairMidPhase
---@field SolverId int32
---@field MidPhaseType EChaosVDMidPhaseType
---@field bIsActive boolean
---@field bIsCCD boolean
---@field bIsCCDActive boolean
---@field bIsSleeping boolean
---@field bIsModified boolean
---@field LastUsedEpoch int32
---@field Particle0Idx int32
---@field Particle1Idx int32
---@field Constraints TArray<FChaosVDConstraint>
local FChaosVDParticlePairMidPhase = {}



---@class FChaosVDParticlePositionRotation : FChaosVDWrapperDataBase
---@field MX FVector
---@field MR FQuat
local FChaosVDParticlePositionRotation = {}



---@class FChaosVDParticleVelocities : FChaosVDWrapperDataBase
---@field MV FVector
---@field MW FVector
local FChaosVDParticleVelocities = {}



---@class FChaosVDQueryDataWrapper
---@field ID int32
---@field ParentQueryID int32
---@field WorldSolverID int32
---@field bIsRetryQuery boolean
---@field GeometryOrientation FQuat
---@field Type EChaosVDSceneQueryType
---@field Mode EChaosVDSceneQueryMode
---@field StartLocation FVector
---@field EndLocation FVector
---@field CollisionChannel int32
---@field CollisionQueryParams FChaosVDCollisionQueryParams
---@field CollisionResponseParams FChaosVDCollisionResponseParams
---@field CollisionObjectQueryParams FChaosVDCollisionObjectQueryParams
---@field Hits TArray<FChaosVDQueryVisitStep>
local FChaosVDQueryDataWrapper = {}



---@class FChaosVDQueryFastData : FChaosVDWrapperDataBase
---@field Dir FVector
---@field InvDir FVector
---@field CurrentLength double
---@field InvCurrentLength double
---@field bParallel0 boolean
---@field bParallel1 boolean
---@field bParallel2 boolean
local FChaosVDQueryFastData = {}



---@class FChaosVDQueryHitData : FChaosVDWrapperDataBase
---@field Distance float
---@field FaceIdx int32
---@field Flags uint16
---@field WorldPosition FVector
---@field WorldNormal FVector
---@field FaceNormal FVector
local FChaosVDQueryHitData = {}



---@class FChaosVDQueryVisitStep : FChaosVDWrapperDataBase
---@field Type EChaosVDSceneQueryVisitorType
---@field ShapeIndex uint32
---@field ParticleIndex int32
---@field ParticleTransform FTransform
---@field QueryFastData FChaosVDQueryFastData
---@field HitType EChaosVDCollisionQueryHitType
---@field HitData FChaosVDQueryHitData
---@field RejectReason EChaosVDSQVisitRejectReason
local FChaosVDQueryVisitStep = {}



---@class FChaosVDSceneQueriesDataContainer
local FChaosVDSceneQueriesDataContainer = {}


---@class FChaosVDShapeCollisionData
---@field CollisionTraceType EChaosVDCollisionTraceFlag
---@field bSimCollision boolean
---@field bQueryCollision boolean
---@field bIsProbe boolean
---@field QueryData FChaosVDCollisionFilterData
---@field SimData FChaosVDCollisionFilterData
---@field bIsComplex boolean
---@field bIsValid boolean
local FChaosVDShapeCollisionData = {}



---@class FChaosVDTraceDetails
---@field TraceGuid FGuid
---@field SessionGuid FGuid
---@field TraceTarget FString
---@field bIsConnected boolean
---@field Mode EChaosVDRecordingMode
local FChaosVDTraceDetails = {}



---@class FChaosVDVSmooth : FChaosVDWrapperDataBase
---@field MV FVector
---@field MW FVector
local FChaosVDVSmooth = {}



---@class FChaosVDWrapperDataBase
---@field bHasValidData boolean
local FChaosVDWrapperDataBase = {}



