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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
namespace XFEEDToolBox.Core.Navigation;

public sealed partial class NativeSystemFlightControlDriver
{
    private NativeCruiseControlChannel? originalCruiseControl;
    private Func<double>? originalCruiseFuelReserve;
    public NativeCruiseControlChannel? CruiseControl=>originalCruiseControl;
    public async Task ConfigureOriginalCruiseControlAsync(Func<double> fuelReserve,bool allowUnqualifiedEmptyTrial=false,CancellationToken token=default,Action<System.Text.Json.JsonElement>? diagnostics=null)
    {
        if(useNativeSupercruiseAssist)throw new InvalidOperationException("Original SCO requires toolbox navigation with game SCA disabled.");
        var state=player();if(allowUnqualifiedEmptyTrial&&(!state.InGame||!state.Docked||state.CurrentShipId is null||state.CargoCount!=0))throw new InvalidOperationException("Unqualified SCO testing requires the empty ship to remain docked during setup.");
        var channel=new NativeCruiseControlChannel(processId,gameHash);var capabilities=await channel.InspectAsync(token);
        if(!capabilities.Available)throw new NotSupportedException("Original SCO controller is unavailable.");
        if(diagnostics is not null)channel.Observed+=diagnostics;
        originalCruiseControl=channel;originalCruiseFuelReserve=fuelReserve;
    }
    private Task UpdateOriginalCruiseAsync(SystemFlightDecision decision,SystemFlightFrame frame,SystemNavigationTarget target,DateTimeOffset deadline,CancellationToken token)
        =>originalCruiseControl?.UpdateAsync(owner,checked((ulong)generation),frame,decision,target,originalCruiseFuelReserve!(),deadline,token)??Task.CompletedTask;
}