How can I evaluate a chooser in C++ and get it to output a struct and an array of animation assets ??

I want to do this in C++.
I think I need to use this function in ChooserFunctionLibrary.h :

UFUNCTION(BlueprintCallable, meta = (BlueprintThreadSafe, BlueprintInternalUseOnly = “true”, DeterminesOutputType = “ObjectClass”))
static TArray<UObject*> EvaluateObjectChooserBaseMulti(UPARAM(Ref) FChooserEvaluationContext& Context,UPARAM(Ref) const FInstancedStruct& ObjectChooser, TSubclassOf ObjectClass, bool bResultIsClass = false);

but I am not able to figure out how. So, I guess I am asking for an example of how to use this function.
Or maybe there is another way of doing it. Either way, please help. Thanks.

Hi!

As an example, you can check out this:

void YourCustomEvaluateChooser(UChooserTable* Chooser, const FYourInputData& _InputData, FYourOutputData& _OutputData)
{
    if (!IsValid(Chooser)) return;

    const FInstancedStruct ResultInstances = UChooserFunctionLibrary::MakeEvaluateChooser(Chooser);
    FChooserEvaluationContext EvaluationContext;
    
    FInstancedStruct InputStruct;
    InputStruct.InitializeAs<FYourInputData>();
    FYourInputData& InputData = InputStruct.GetMutable<FYourInputData>();
    InputData = _InputData;
    EvaluationContext.Params.Add(InputStruct);
    
    FInstancedStruct OutputStruct;
    OutputStruct.InitializeAs<FYourOutputData>();
    FYourOutputData& OutputData = OutputStruct.GetMutable<FYourOutputData>();
    EvaluationContext.Params.Add(OutputStruct);
    
    TArray<UObject*> EvaluateObjects = UChooserFunctionLibrary::EvaluateObjectChooserBaseMulti(
        EvaluationContext,
        ResultInstances,
        UAnimMontage::StaticClass()
    );

    TArray<UAnimSequence*> Sequences;
    for (UObject* Object : EvaluateObjects)
    {
        if (UAnimSequence* Sequence = Cast<UAnimSequence>(Object))
        {
            Sequences.Add(Sequence);
        }
    }

    _OutputData = OutputData;
}
1 Like

Thank you for your help. I will test this. Thank you again