Working more with chooser’s I realised you can have multiple classes as inputs so in case your not sure how to upgrade it:
// Very important to ensure all the struct output matches the chooser output!
template<class T>
static TArray<UAnimationAsset*> EvaluateAnimInstanceChooserMulti(TArray<UAnimInstance*> AnimInstances, UChooserTable* ChooserTable,
T& StructOutput)
{
TArray<UAnimationAsset*> ResultAnimations;
if (AnimInstances.IsEmpty() || !IsValid(ChooserTable))
{
UE_LOG(LogTemp, Error, TEXT("UInAnimationFunctionLibrary::EvaluateAnimInstanceChooserMulti - Invalid chooser evaluation data"));
return ResultAnimations;
}
const FInstancedStruct ChooserInstance = UChooserFunctionLibrary::MakeEvaluateChooser(ChooserTable);
FChooserEvaluationContext ChooserEvaluationContext = UChooserFunctionLibrary::MakeChooserEvaluationContext();
for (UAnimInstance* AnimInstance : AnimInstances)
{
if (IsValid(AnimInstance))
{
ChooserEvaluationContext.AddObjectParam(AnimInstance);
}
else
{
UE_LOG(LogTemp, Error, TEXT("UInAnimationFunctionLibrary::EvaluateAnimInstanceChooserMulti - Invalid chooser evaluation anim instance"));
return ResultAnimations;
}
}
ChooserEvaluationContext.AddStructParam(StructOutput);
const TArray<UObject*> ChooserObjects {
UChooserFunctionLibrary::EvaluateObjectChooserBaseMulti(ChooserEvaluationContext, ChooserInstance,
UAnimationAsset::StaticClass())
};
for (UObject* ChooserObject : ChooserObjects)
{
if (UAnimationAsset* ChooserAnimation = Cast<UAnimationAsset>(ChooserObject))
{
ResultAnimations.Add(ChooserAnimation);
}
}
return ResultAnimations;
}
*IMPORTANT NOTE: Chooser expects the classes and structs to com in the same order they are in the chooser’s array.