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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Text.Json.Nodes;
using static XFEEDToolBox.Plugin.JsonWire;

namespace XFEEDToolBox.Plugin;

internal static unsafe partial class Navigation
{
    sealed partial record GalaxyCatalogueProfile
    {
        internal GalaxyDustInputs? dustInputs {get;init;}
    }
    static GalaxyDustInputs? CopyGalaxyCatalogueDust(Snapshot frame,GalaxyServices services)
    {
        var address=frame.referenceWorld&0x007FFFFFFFFFFFFFUL;if(address==0)return null;
        // Dust uses only owner/entity/system identity. Do not make the basic
        // profile traverse unrelated per-system metadata/fact tables for it.
        var context=new GalaxyFilterContext{expectedImage=image,entity=frame.entity,currentSystem=address,
            tick=frame.tick,thread=owningThread};
        return TryReadGalaxyDustInputs(context,services.registry,out var value)?value:null;
    }
    static JsonObject? GalaxyCatalogueDustDescription(GalaxyDustInputs? value)
    {
        if(value is null)return null;
        var layers=new JsonArray(value.layerAlphaSize.Select(v=>(JsonNode?)JsonValue.Create(v)).ToArray());
        var publications=new JsonArray(value.observedGamePublications.Select(p=>(JsonNode?)Obj(("ordinal",p.ordinal),
            ("publishedRevision",p.publishedRevision),("requestedRevision",p.requestedRevision),("radius",p.radius),("records",p.records))).ToArray());
        return Obj(("scope","observed-game-dust-producer-inputs"),("step",value.step),("height",value.height),
            ("layerAlphaSize",layers),("alphaMultiplier",value.alphaMultiplier),("sizeMultiplier",value.sizeMultiplier),
            ("transitionPerStep",value.transitionPerStep),("minimumDistance",value.minimumDistance),
            ("observedGamePublications",publications),("runtimeTint",null));
    }
}