XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Diagnostics;
using System.Text.Json;

namespace XFEEDToolBox.Core.Navigation;

internal static class PhysicalInputPreparation
{
    internal const string NativeDisabledContextPending="Original physical input sources unavailable: original-flight-contexts-disabled-unconfirmed";
    internal static async Task RequireAsync(NavigationPipeClient pipe,CancellationToken token)
    {
        var watch=Stopwatch.StartNew();
        while(true)
        {
            var result=await pipe.CallAsync(new{op="input.physical.read",prepare=true},token);
            if(result.TryGetProperty("ready",out var ready)&&ready.ValueKind==JsonValueKind.True)
            {
                if(result.GetProperty("magnitude").GetDouble()>.18)throw new InvalidOperationException("检测到实际操纵输入,请松开操纵后再启动自动驾驶。");
                return;
            }
            var issue=result.TryGetProperty("issue",out var value)?value.GetString():"unknown-source";
            // A disabled original graph must stay empty across distinct real
            // physics frames. No retry converts an unknown source to neutral.
            if(issue=="original-flight-contexts-disabled-unconfirmed"&&watch.Elapsed<TimeSpan.FromSeconds(1))
            {await Task.Delay(60,token);continue;}
            throw new InvalidOperationException("原始物理操纵来源尚未完成验证,无法准备自动驾驶:"+issue);
        }
    }
}