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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Models;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public class GalaxyCatalogueProfileSelectionTests
{
    private static GalaxyCatalogueProfile Profile(GalaxyCamera camera,int mode,bool small=false)
    {
        var origin=new Coordinates(49985,40985,24105);
        var point=GalaxyOriginalCatalogueLod.ClampCentre(GalaxyOriginalCatalogueLod.QueryCentre(camera,mode),origin);
        return new(origin,point,.7,1500,1,4,small,mode,false,"camera-eye");
    }

    [Test] public void OriginalEyeAndFocusModesUseTheRequestingCameraAndItsActualDistanceFade()
    {
        var camera=GalaxyCamera.Create(new(1000,0,2000),1600,900,.3,.2,1);
        Check.That(Profile(camera,0).TrySelection(camera,out var eye)&&eye is not null&&eye.Descriptor.Dd4Modifier==1);
        var distance=camera.Distance;var expected=Math.Clamp((distance-1000)/-500,0,1);
        Check.That(Profile(camera,1).TrySelection(camera,out var focus)&&focus is not null);
        Check.That(Math.Abs(focus!.Descriptor.Dd4Modifier-expected)<.00002);
        Check.That(Profile(camera,1,true).TrySelection(camera,out var small)&&small!.Descriptor.Dd4Modifier==1);
    }

    [Test] public void DensityFromAnotherPoseUnknownQualityAndDebugCallbacksNeverBecomeOriginalCoverage()
    {
        var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,0,4);var actual=Profile(camera,0);
        Check.That(!(actual with{QualityStarCount=null}).TrySelection(camera,out _));
        Check.That(!(actual with{QueryCentre=new(1,2,3)}).TrySelection(camera,out _));
        Check.That(!(Profile(camera,2) with{DebugEnabled=true}).TrySelection(camera,out _));
        Check.That(!(actual with{ReferenceKind="game-camera-eye"}).TrySelection(camera,out _));
        var moved=GalaxyCamera.Create(new(30,0,0),1600,900,0,0,4);
        Check.That(!actual.TrySelection(moved,out _));
    }
    [Test] public void SelectionCarriesTheCurrentIndependentAppearanceInputs()
    {
        var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,0,4);
        Check.That((Profile(camera,1,true) with{ColourBlend=.375}).TrySelection(camera,out var selection));
        Check.Equal(1,selection!.OriginalViewMode!.Value);Check.That(selection.SmallMode==true);Check.Equal(.375,selection.ColourBlend!.Value);
        Check.That(Profile(camera,0).TrySelection(camera,out var unknownBlend));Check.That(unknownBlend!.ColourBlend is null);
    }
    [Test] public async Task CachedRawAppearanceChangesSizeWithTheCurrentSelectionWithoutRequeryingTheCell()
    {
        var origin=new Coordinates(0,0,0);var centre=new Coordinates(5,5,5);
        var descriptor=GalaxyOriginalCatalogueLod.Create(centre,0,500,0,1,.001);
        var camera=GalaxyCamera.Create(centre,1600,900,0,0,4);var plan=new GalaxyCellQueryPlan(camera,descriptor,origin);
        Check.Equal(1,plan.Cells.Count);Check.Equal(7UL,plan.Cells[0].Address);
        var appearance=new GalaxyOriginalStellarAppearance(0xFFFFFFFF,0xAA998877,.25f,100,4,1.25f,.075f,false);
        var star=new GalacticSystem("Cached raw appearance fixture",new(6,6,6),(1L<<23)|7){OriginalAppearance=appearance};
        using var session=new GalaxyCellStreamingSession();var calls=0;
        await foreach(var _ in session.StreamAsync(plan,(_,_,cells,_)=>
        {
            calls++;return Task.FromResult(new GalaxyRegionResult(new[]{star},7,1,1,false,true)
            {Scope="requested-cells",RequestedCells=1,Origin=origin});
        })){}
        GalacticSystem? cached=null;
        await foreach(var update in session.StreamAsync(plan,(_,_,_,_)=>throw new Exception("Changing size mode must not reload immutable cell geometry")))
            if(update.Systems.Count>0)cached=update.Systems.Single();
        Check.That(ReferenceEquals(star,cached));Check.Equal(1,calls);
        var normal=new GalaxyCatalogueSelection(descriptor,origin){SmallMode=false};var small=normal with{SmallMode=true};
        Check.Equal(1.25f,normal.OriginalSize(cached!)!.Value);Check.Equal(.075f,small.OriginalSize(cached!)!.Value);
        Check.Equal(1.25f,cached!.OriginalAppearance!.ActiveSize!.Value);Check.That(cached.OriginalAppearance.SmallSizeActive==false);
        Check.That((normal with{SmallMode=null}).OriginalSize(cached) is null);
        Check.That(normal.OriginalSize(cached with{OriginalAppearance=null}) is null);
        Check.Equal(0f,small.OriginalSize(cached with{OriginalAppearance=appearance with{SmallSize=0}})!.Value);
    }
}