Fixed crash when batch removing multiple animation modifiers from a selection of anim sequences and having a animation modifiers only affect a subset of all the selected anim sequences.

#rnx
#rb jose.villarroel, aaron.cox

[CL 27924231 by roland munguia in ue5-main branch]
This commit is contained in:
roland munguia
2023-09-15 14:02:15 -04:00
parent 0ca75e7c16
commit 3210b2cd36

View File

@@ -631,26 +631,26 @@ FReply SRemoveAnimationModifierContentBrowserWindow::OnApply()
UAnimationModifier* Modifier = Modifiers[i];
checkf(Modifier, TEXT("Invalid selected modifier"));
// Get instance in use by anim asset
UAnimationModifier* const* ModifierInstanceInSequence = AssetUserData[i]->GetAnimationModifierInstances().FindByPredicate([Modifier](const UAnimationModifier* TestModifier)
{
return Modifier->GetClass() == TestModifier->GetClass();
});
checkf(ModifierInstanceInSequence != nullptr, TEXT("Invalid modifier instance"))
// Revert modifiers from anim assets
if (bShouldRevert)
{
for (UAnimSequence* AnimSequence : AnimSequences)
{
(*ModifierInstanceInSequence)->RevertFromAnimationSequence(AnimSequence);
// Revert can not fail, thus we can always mark reverted
if ((*ModifierInstanceInSequence)->HasLegacyPreviousAppliedModifierOnSkeleton())
UAnimationModifier* const* ModifierInstanceInSequence = AssetUserData[i]->GetAnimationModifierInstances().FindByPredicate([Modifier](const UAnimationModifier* TestModifier)
{
checkf(AnimSequence->GetSkeleton() != nullptr, TEXT("Invalid skeleton for anim sequence"));
(*ModifierInstanceInSequence)->RemoveLegacyPreviousAppliedModifierOnSkeleton(AnimSequence->GetSkeleton());
return Modifier->GetClass() == TestModifier->GetClass();
});
if (ModifierInstanceInSequence)
{
(*ModifierInstanceInSequence)->RevertFromAnimationSequence(AnimSequence);
// Revert can not fail, thus we can always mark reverted
if ((*ModifierInstanceInSequence)->HasLegacyPreviousAppliedModifierOnSkeleton())
{
checkf(AnimSequence->GetSkeleton() != nullptr, TEXT("Invalid skeleton for anim sequence"));
(*ModifierInstanceInSequence)->RemoveLegacyPreviousAppliedModifierOnSkeleton(AnimSequence->GetSkeleton());
}
}
}
}