void FDeferRegisterStaticComponents::DeferStaticComponent(AActor* Actor, USceneComponent* Component, EComponentMobility::Type OriginalMobility) { TArray<FDeferredComponentInfo>* ActorComponentsToRegister = ComponentsToRegister.Find(Actor); if (!ActorComponentsToRegister) { ActorComponentsToRegister = &ComponentsToRegister.Add(Actor, TArray<FDeferredComponentInfo>()); } ActorComponentsToRegister->Add(FDeferredComponentInfo(Component, OriginalMobility)); // Make sure Mobility is temporarily set to EComponentMobility::Movable. Component->Mobility = EComponentMobility::Movable; }
void FDeferRegisterComponents::DeferComponentRegistration(AActor* Actor, USceneComponent* Component, EComponentMobility::Type OriginalMobility) { TArray<FDeferredComponentInfo>* ActorComponentsToRegister = ComponentsToRegister.Find(Actor); if (!ActorComponentsToRegister) { ActorComponentsToRegister = &ComponentsToRegister.Add(Actor, TArray<FDeferredComponentInfo>()); } ActorComponentsToRegister->Add(FDeferredComponentInfo(Component, OriginalMobility)); // Components with Mobility set to EComponentMobility::Static or EComponentMobility::Stationary // can't be properly set up from a construction script (all changes will be rejected due to // EComponentMobility::Static flag) so we're going to temporarily change the flag and defer // the registration until the construction-script has finished. Component->Mobility = EComponentMobility::Movable; }