|
| ENGINE_API | UClusterUnionComponent (const FObjectInitializer &ObjectInitializer) |
| |
| ENGINE_API void | AddComponentToCluster (UPrimitiveComponent *InComponent, const TArray< int32 > &BoneIds, bool bRebuildGeometry=true) |
| |
| ENGINE_API void | RemoveComponentFromCluster (UPrimitiveComponent *InComponent) |
| |
| ENGINE_API void | RemoveComponentBonesFromCluster (UPrimitiveComponent *InComponent, const TArray< int32 > &BoneIds) |
| |
| ENGINE_API TArray< UPrimitiveComponent * > | GetPrimitiveComponents () |
| |
| ENGINE_API TArray< AActor * > | GetActors () |
| |
| virtual ENGINE_API void | SetIsAnchored (bool bIsAnchored) |
| |
| ENGINE_API bool | IsAnchored () const |
| |
| ENGINE_API void | SetEnableDamageFromCollision (bool bValue) |
| |
| ENGINE_API void | SyncClusterUnionFromProxy (const FTransform &NewTransform, TArray< TTuple< UPrimitiveComponent *, FTransform > > *OutNewComponents) |
| |
| bool | IsComponentAdded (UPrimitiveComponent *Component) |
| |
| virtual ENGINE_API void | WakeAllRigidBodies () override |
| |
| virtual ENGINE_API bool | IsAnyRigidBodyAwake () override |
| |
| virtual ENGINE_API void | SetMassOverrideInKg (FName BoneName, float MassInKg, bool bOverrideMass) override |
| |
| ENGINE_API bool | LineTraceComponent (TArray< FHitResult > &OutHit, const FVector Start, const FVector End, ECollisionChannel TraceChannel, const struct FCollisionQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const struct FCollisionObjectQueryParams &ObjectParams) |
| |
| ENGINE_API bool | SweepComponent (TArray< FHitResult > &OutHit, const FVector Start, const FVector End, const FQuat &ShapeWorldRotation, const FPhysicsGeometry &Geometry, ECollisionChannel TraceChannel, const struct FCollisionQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const struct FCollisionObjectQueryParams &ObjectParams) |
| |
| ENGINE_API void | VisitAllCurrentChildComponents (const TFunction< bool(UPrimitiveComponent *)> &Lambda) const |
| |
| ENGINE_API void | VisitAllCurrentActors (const TFunction< bool(AActor *)> &Lambda) const |
| |
| ENGINE_API int32 | NumChildClusterComponents () const |
| |
| ENGINE_API void | ForceRebuildGTParticleGeometry () |
| |
| ENGINE_API const FSpatialAcceleration * | GetSpatialAcceleration () const |
| |
| ENGINE_API TArray< int32 > | GetAddedBoneIdsForComponent (UPrimitiveComponent *Component) const |
| |
| ENGINE_API void | ChangeIfComponentBonesAreMainParticle (UPrimitiveComponent *Component, const TArray< int32 > &BoneIds, bool bIsMain) |
| |
| ENGINE_API Chaos::FPhysicsObjectHandle | FindChildPhysicsObjectByShapeIndex (int32 Index) const |
| |
| ENGINE_API void | ForceSetChildToParent (UPrimitiveComponent *InComponent, const TArray< int32 > &BoneIds, const TArray< FTransform > &ChildToParent) |
| |
| virtual void | OnChildToParentUpdated (UPrimitiveComponent *ChangedComponent, const FLocalBonesToTransformMap &PerBoneChildToParent, const FTransform &NewTransform, TArray< TTuple< UPrimitiveComponent *, FTransform > > *OutNewComponents) |
| |
| virtual ENGINE_API void | OnCreatePhysicsState () override |
| |
| virtual ENGINE_API void | OnDestroyPhysicsState () override |
| |
| virtual ENGINE_API bool | ShouldCreatePhysicsState () const override |
| |
| virtual ENGINE_API bool | HasValidPhysicsState () const override |
| |
| virtual ENGINE_API void | GetLifetimeReplicatedProps (TArray< FLifetimeProperty > &OutLifetimeProps) const override |
| |
| virtual FBodyInstance * | GetBodyInstance (FName BoneName, bool bGetWelded, int32 Index) const override |
| |
| virtual ENGINE_API void | SetSimulatePhysics (bool bSimulate) override |
| |
| virtual bool | CanEditSimulatePhysics () override |
| |
| virtual ENGINE_API bool | LineTraceComponent (FHitResult &OutHit, const FVector Start, const FVector End, ECollisionChannel TraceChannel, const struct FCollisionQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const struct FCollisionObjectQueryParams &ObjectParams) override |
| |
| virtual ENGINE_API bool | SweepComponent (FHitResult &OutHit, const FVector Start, const FVector End, const FQuat &ShapeWorldRotation, const FPhysicsGeometry &Geometry, ECollisionChannel TraceChannel, const struct FCollisionQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const struct FCollisionObjectQueryParams &ObjectParams) override |
| |
| virtual ENGINE_API bool | OverlapComponentWithResult (const FVector &Pos, const FQuat &Rot, const FPhysicsGeometry &Geometry, ECollisionChannel TraceChannel, const struct FCollisionQueryParams &Params, const struct FCollisionResponseParams &ResponseParams, const struct FCollisionObjectQueryParams &ObjectParams, TArray< FOverlapResult > &OutOverlap) const override |
| |
| virtual ENGINE_API bool | ComponentOverlapComponentWithResultImpl (const class UPrimitiveComponent *const PrimComp, const FVector &Pos, const FQuat &Rot, const FCollisionQueryParams &Params, TArray< FOverlapResult > &OutOverlap) const override |
| |
| virtual bool | ShouldDispatchWakeEvents (FName BoneName) const override |
| |
| virtual ENGINE_API bool | DoCustomNavigableGeometryExport (FNavigableGeometryExport &GeomExport) const override |
| |
| virtual ENGINE_API void | OnReceiveReplicatedState (const FVector X, const FQuat R, const FVector V, const FVector W) override |
| |
| virtual ENGINE_API void | OnUpdateTransform (EUpdateTransformFlags UpdateTransformFlags, ETeleportType Teleport) override |
| |
| virtual ENGINE_API FBoxSphereBounds | CalcBounds (const FTransform &LocalToWorld) const override |
| |
| virtual ENGINE_API FVector | GetComponentVelocity () const override |
| |
| virtual ENGINE_API Chaos::FPhysicsObject * | GetPhysicsObjectById (Chaos::FPhysicsObjectId Id) const override |
| |
| virtual ENGINE_API Chaos::FPhysicsObject * | GetPhysicsObjectByName (const FName &Name) const override |
| |
| virtual ENGINE_API TArray< Chaos::FPhysicsObject * > | GetAllPhysicsObjects () const override |
| |
| virtual ENGINE_API Chaos::FPhysicsObjectId | GetIdFromGTParticle (Chaos::FGeometryParticle *Particle) const override |
| |
This does the bulk of the work exposing a physics cluster union to the game thread. This component needs to be a primitive component primarily because of how physics proxies need to be registered with the solver with an association with a primitive component. This component can be used as part of AClusterUnionActor or on its own as its list of clustered components/actors can be specified dynamically at runtime and/or statically on asset creation.
The cluster union component needs to not only maintain a game thread representation of what's happening on the physics thread but it also needs to make sure this data gets replicated to every client. A general model of how the data flow happens is as follows:
[Server GT Command] -> [Server PT Command] -> [Server Modifies PT Data] -> [Server Sync PT Data back to GT Data].
This enables GT control over what happens to the cluster union BUT ALSO maintains a physics-first approach to the cluster union where a physics event can possibly cause the cluster union to break.
The GT data is replicated from the server to the clients either via the FClusterUnionReplicatedData on the cluster union component or per-child component data is replicated via the UClusterUnionReplicatedProxyComponent. Generally, the same flow is replicated on the client. The only exception is for replicating the X/R/V/W properties on the cluster union particle which does a GT -> PT data sync. There's no particula reason this happens...it just mirrors the single particle physics proxy here.