Control Rig: Update default objects for gizmo library changes in Postload

#rb jack.cai
#jira UE-132742
#preflight https://horde.devtools.epicgames.com/job/617820a158a3a900017f493e

#ROBOMERGE-AUTHOR: helge.mathee
#ROBOMERGE-SOURCE: CL 17930952 in //UE5/Release-5.0/... via CL 17930997
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v885-17909292)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17931040 by helge mathee in ue5-release-engine-test branch]
This commit is contained in:
helge mathee
2021-10-26 14:46:01 -04:00
parent f11f168b6c
commit 06248f3cc9

View File

@@ -511,18 +511,21 @@ void UControlRigBlueprint::PostLoad()
}
// upgrade the gizmo libraries to shape libraries
if(GizmoLibrary_DEPRECATED.IsValid())
{
ShapeLibraries.Reset();
ShapeLibraries.Add(GizmoLibrary_DEPRECATED);
GizmoLibrary_DEPRECATED.Reset();
}
else if (GetLinkerCustomVersion(FControlRigObjectVersion::GUID) < FControlRigObjectVersion::RenameGizmoToShape)
if(GizmoLibrary_DEPRECATED.IsValid() || GetLinkerCustomVersion(FControlRigObjectVersion::GUID) < FControlRigObjectVersion::RenameGizmoToShape)
{
// if it's an older file and it doesn't have the GizmoLibrary stored,
// refer to the previous default.
ShapeLibraries.Reset();
ShapeLibraries.Add(LoadObject<UControlRigShapeLibrary>(nullptr, TEXT("/ControlRig/Controls/DefaultGizmoLibrary.DefaultGizmoLibrary")));
if(GizmoLibrary_DEPRECATED.IsValid())
{
ShapeLibraries.Add(GizmoLibrary_DEPRECATED.LoadSynchronous());
GizmoLibrary_DEPRECATED.Reset();
}
else
{
ShapeLibraries.Add(LoadObject<UControlRigShapeLibrary>(nullptr, TEXT("/ControlRig/Controls/DefaultGizmoLibrary.DefaultGizmoLibrary")));
}
// also walk over all controls and check if any of them were using the "default" gizmo
Hierarchy->ForEach<FRigControlElement>([](FRigControlElement* ControlElement) -> bool
@@ -535,6 +538,28 @@ void UControlRigBlueprint::PostLoad()
}
return true;
});
UControlRigBlueprintGeneratedClass* RigClass = GetControlRigBlueprintGeneratedClass();
UControlRig* CDO = Cast<UControlRig>(RigClass->GetDefaultObject(false /* create if needed */));
CDO->ShapeLibraries = ShapeLibraries;
CDO->GizmoLibrary_DEPRECATED.Reset();
CDO->GetHierarchy()->CopyHierarchy(Hierarchy);
CDO->Initialize(true);
TArray<UObject*> ArchetypeInstances;
CDO->GetArchetypeInstances(ArchetypeInstances);
for (UObject* Instance : ArchetypeInstances)
{
if (UControlRig* InstanceRig = Cast<UControlRig>(Instance))
{
InstanceRig->ShapeLibraries = ShapeLibraries;
InstanceRig->GizmoLibrary_DEPRECATED.Reset();
InstanceRig->GetHierarchy()->CopyHierarchy(Hierarchy);
InstanceRig->Initialize(true);
}
}
}
#if WITH_EDITOR