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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Numerics;
using System.Runtime.InteropServices;
using XFEEDToolBox.Core.Galaxy;

namespace XFEEDToolBox.Core.Rendering;

/// <summary>Original3AE7600's staged64-byte record. This is not the final
/// StarMapLine input; material conversion remains a separate consumer.</summary>
[StructLayout(LayoutKind.Sequential)]
public readonly record struct GalaxyOriginalPowerInfluence(Vector4 From,Vector4 To,Vector4 Colour,Vector4 Pattern);

public static class GalaxyOriginalPowerInfluenceGeometry
{
    public static bool TryCreate(GalaxyNativePowerInfluence? source,out GalaxyOriginalPowerInfluence record)
    {
        record=default;
        if(source is not{Eligible:true,FromSystemAddress:>0,ToSystemAddress:>0,FromPosition:{} a,ToPosition:{} b,LinearRgb.Count:3}||
            source.FromSystemAddress==source.ToSystemAddress||!a.IsValid||!b.IsValid||a==b||source.Kind is <0 or >1||
            !float.IsFinite(source.Phase)||source.LinearRgb.Any(v=>!float.IsFinite(v)||v<0))return false;
        record=new(new((float)a.X,(float)a.Y,(float)a.Z,0),new((float)b.X,(float)b.Y,(float)b.Z,0),
            new(source.LinearRgb[0],source.LinearRgb[1],source.LinearRgb[2],1),new(source.Phase,0,0,0));
        return true;
    }
    public static float InitialPhase(ulong candidateAddress)
    {
        unchecked
        {
            var hash=candidateAddress*0x40000+~candidateAddress;hash=(hash>>31^hash)*21;hash=(hash>>11^hash)*65;
            return (float)((uint)((hash>>22)^hash)&255u)*.00390625f;
        }
    }
}