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;
}