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;
using XFEEDToolBox.Core.Rendering;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class GalaxyOriginalPowerActivityRingTests
{
    [Test] public void SharedRangeGeometryUsesActualCachedCentreAndDistanceScaledOriginalWidth()
    {
        var bound=new GalaxyNativePowerOuter(false,9007199254740993,new(100,20,30),20);
        Check.That(GalaxyOriginalPowerActivityRingGeometry.TryCreate(bound,new(100,20,30),out var near));
        Check.Equal(new Vector4(100,20,30,1),near.Position);
        Check.That(Math.Abs(near.UAxisInner.W-19.95f)<1e-5&&Math.Abs(near.VAxisOuter.W-20.05f)<1e-5);
        Check.That(GalaxyOriginalPowerActivityRingGeometry.TryCreate(bound,new(160,20,30),out var middle));
        Check.That(Math.Abs(middle.UAxisInner.W-19.85f)<1e-5);
        Check.That(GalaxyOriginalPowerActivityRingGeometry.TryCreate(bound,new(10000,20,30),out var far));
        Check.That(Math.Abs(far.UAxisInner.W-19.7f)<1e-5&&Math.Abs(far.VAxisOuter.W-20.3f)<1e-5);
        Check.That(near.UAxisInner.X==1&&near.VAxisOuter.Z==1&&near.Colour==new Vector4(1,1,1,0));
    }
    [Test] public void ActualPrimitiveCountConversionProducesSeventeenPairsAndClosesSixteenQuads()
    {
        Check.Equal(64,Marshal.SizeOf<GalaxyOriginalPowerActivityRing>());
        Check.That(GalaxyOriginalPowerActivityRingGeometry.TryCreate(new(true,1,new(0,0,0),20),new(0,10,0),out var ring));
        var first=GalaxyOriginalPowerActivityRingGeometry.Vertex(ring,0);var last=GalaxyOriginalPowerActivityRingGeometry.Vertex(ring,32);
        Check.That(Vector3.Distance(first.World,last.World)<1e-5);
        Check.That(Vector3.Distance(GalaxyOriginalPowerActivityRingGeometry.Vertex(ring,1).World,GalaxyOriginalPowerActivityRingGeometry.Vertex(ring,33).World)<1e-5);
        Check.That(first.AnnulusRadii.Z>ring.VAxisOuter.W);
        Check.Throws<ArgumentOutOfRangeException>(()=>GalaxyOriginalPowerActivityRingGeometry.Vertex(ring,34));
    }
    [Test] public void MissingBoundsDoNotBorrowPlayerCentreOrInventARadius()
    {
        Check.That(!GalaxyOriginalPowerActivityRingGeometry.TryCreate(null,new(0,0,0),out _));
        Check.That(!GalaxyOriginalPowerActivityRingGeometry.TryCreate(new(true,1,null,20),new(0,0,0),out _));
        Check.That(!GalaxyOriginalPowerActivityRingGeometry.TryCreate(new(true,1,new(0,0,0),null),new(0,0,0),out _));
        Check.That(!GalaxyOriginalPowerActivityRingGeometry.TryCreate(new(true,1,new(0,0,0),float.NaN),new(0,0,0),out _));
    }
    [Test] public void OriginalRingClipsItsInteriorAndExteriorAndKeepsSourceAlphaSeparateFromLight()
    {
        Check.Equal(0f,GalaxyOriginalPowerActivityRingGeometry.Coverage(new(7,10,6,0)));
        Check.Equal(0f,GalaxyOriginalPowerActivityRingGeometry.Coverage(new(7,10,11,0)));
        var bright=GalaxyOriginalPowerActivityRingGeometry.Shade(new(7,10,8.5f,0),new(2,1,.5f,0),1,.5f);
        Check.That(bright.X>.9f&&Math.Abs(bright.X-2*bright.Y)<1e-6&&bright.W==0);
        Check.Equal(Vector4.Zero,GalaxyOriginalPowerActivityRingGeometry.Shade(new(7,10,8.5f,0),new(2,1,.5f,0),0));
    }
}