Editor/HumanoidMocap/RetargetWindow.TargetSelection.cs
using System;
using System.Threading.Tasks;
using Editor;
using Sandbox;
using HumanoidMocapX.Core;

namespace HumanoidMocapX.EditorTools;

public sealed partial class RetargetWindow
{
    ComboBox _previewTargetPicker, _advancedTargetPicker;
    bool _updatingTargetPickers;

    void SelectBuiltinPreviewTarget(bool citizen)
    {
        // Native ComboBox selection callbacks also run on programmatic index changes.
        if(_updatingTargetPickers)return;
        UseBuiltinTarget(citizen);
    }
    void UseBuiltinTarget(bool citizen)
    {
        if(_processing is not null){RefreshTargetPickers();return;}
        if(citizen)TrySelectSboxCitizenTarget();else TrySelectSboxTarget();
        _=RefreshMocapPreviewAsync();
    }

    void RefreshTargetPickers()
    {
        if(_updatingTargetPickers)return;
        _updatingTargetPickers=true;
        try
        {
            var path=_target?.PreviewModelPath;
            var index=path==RetargetTargetSpec.SboxHumanMalePath?0:path==RetargetTargetSpec.SboxCitizenPath?1:2;
            if(_previewTargetPicker.IsValid())_previewTargetPicker.CurrentIndex=_target is null?-1:index;
            if(_advancedTargetPicker.IsValid())_advancedTargetPicker.CurrentIndex=_target is null?-1:
                index<2?index:_target.ModelFilePath is null?2:3;
        }
        finally{_updatingTargetPickers=false;}
    }
}