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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

internal static unsafe partial class Navigation
{
    private static uint DockingZeroUpdateSelfTest()
    {
        var frame=new Snapshot{valid=true,healthValid=true,hullFraction=1,rawFsdState=2,tick=100,sequence=20,entity=7,life=0x10000,inputRoot=0x20000,fsd=0x30000,referenceWorld=9};
        var selection=new LocalSelection{generation=3,expires=200,epoch=5,entity=frame.entity,life=frame.life,inputRoot=frame.inputRoot,fsd=frame.fsd,target=new(){market=11}};
        var wanted=new DockingZeroUpdate{computer=0x40058,controller=0x50000,fsd=frame.fsd,market=11,throttle=.75f,
            command=new(){expires=200,sequence=20,entity=frame.entity,life=frame.life,inputRoot=frame.inputRoot,world=9,epoch=5,selection=3}};
        bool Match(DockingZeroUpdate p,Snapshot f,LocalSelection s,ulong now=150,ulong epoch=5,bool owner=true,bool enabled=true,bool active=true,bool overridden=false,nuint computer=0x40058)
            =>DockingZeroUpdateMatches(p,f,s,computer,now,epoch,owner,enabled,active,overridden);
        uint passed=0;
        if(Match(wanted,frame,selection))passed|=1;
        if(!Match(wanted,frame,selection,200)&&Match(wanted,frame,selection,199))passed|=2;
        var other=wanted;other.command.entity++;
        if(!Match(other,frame,selection)){other=wanted;other.command.world++;if(!Match(other,frame,selection))passed|=4;}
        other=wanted;other.command.epoch++;
        if(!Match(other,frame,selection)&&!Match(wanted,frame,selection,owner:false))passed|=8;
        var stableDamage=frame;stableDamage.hullFraction=.4;
        var emergency=stableDamage;emergency.healthEmergency=true;
        var invalidHealth=stableDamage;invalidHealth.healthValid=false;
        var destroyed=stableDamage;destroyed.hullFraction=0;
        if(Match(wanted,stableDamage,selection)&&!Match(wanted,emergency,selection)
            &&!Match(wanted,invalidHealth,selection)&&!Match(wanted,destroyed,selection))passed|=16;
        if(!Match(wanted,frame,selection,computer:0)&&!Match(wanted,frame,selection,computer:0x60058))passed|=32;
        if(!Match(wanted,frame,selection,enabled:false)&&!Match(wanted,frame,selection,active:false)&&!Match(wanted,frame,selection,overridden:true))passed|=64;
        var acknowledged=selection;acknowledged.expires=1;
        if(Match(wanted,frame,acknowledged)&&!Match(wanted,frame,acknowledged,200))
        {
            var changed=acknowledged;changed.target.market++;
            if(!Match(wanted,frame,changed))
            {
                changed=acknowledged;changed.generation++;
                if(!Match(wanted,frame,changed))
                {
                    var cooldown=frame;cooldown.rawFsdState=1;
                    var charging=frame;charging.rawFsdState=3;
                    if(Match(wanted,cooldown,acknowledged)&&!Match(wanted,charging,acknowledged))passed|=128;
                }
            }
        }
        return passed;
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationDockingZeroUpdateSelfTest")]
    internal static uint ExportDockingZeroUpdateSelfTest()=>RunTest(DockingZeroUpdateSelfTest);
#endif
}