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 GalaxyCatalogueSelectionTests
{
    [Test] public void FiniteEnvelopeRetainsWholeCellsBeyondFourDistancesWithTheSameInfiniteLens()
    {
        var centre = new Coordinates(5, 5, 1005); var origin = new Coordinates(0, 0, 0);
        var selection = new GalaxyCatalogueSelection(GalaxyOriginalCatalogueLod.Create(centre, 1, 500, .001, 1, 0), origin);
        var camera = GalaxyCamera.Create(new(5, 5, 5), 1600, 900, 0, 0, 4);
        var far = new GalacticSystem("Whole edge cell", new(9, 9, 1009), (long)(GalaxyCellQueryPlan.Encode(0, 0, 0, 100) | (1UL << 44)));
        var selected = selection.ApplyTo(camera);
        Check.That(selection.Contains(far) && !camera.ProjectForCatalogue(far.Position).IsVisible && selected.ProjectForCatalogue(far.Position).IsVisible);
        Check.That(far.Position.DistanceTo(centre) > selection.Descriptor.InnerRadius);
        Check.Equal(camera.Project(far.Position), selected.Project(far.Position));
        Check.That(double.IsPositiveInfinity(selected.ProjectionFar) && double.IsFinite(selected.QueryFar));
        Check.That(!selection.Contains(far with { SystemAddress = (long)(GalaxyCellQueryPlan.Encode(0, 10, 10, 10) | (1UL << 44)) }));
    }

    [Test] public void AllSelectedCellCornersFitTheEnvelopeAndTheBaseCameraRemainsUnchanged()
    {
        var origin = new Coordinates(49985, 40985, 24105);
        var camera = GalaxyCamera.Create(new(0, 0, 0), 1600, 900, .3, -.2, 4);
        var lod = GalaxyOriginalCatalogueLod.Create(new(0, 0, 0), 1, 500, 1, 1, 0);
        var scoped = new GalaxyCatalogueSelection(lod, origin).ApplyTo(camera);
        foreach (var cell in new GalaxyCellQueryPlan(camera, lod, origin).Cells)
            foreach (var x in new[] { cell.Bounds.Minimum.X, cell.Bounds.Maximum.X })
                foreach (var y in new[] { cell.Bounds.Minimum.Y, cell.Bounds.Maximum.Y })
                    foreach (var z in new[] { cell.Bounds.Minimum.Z, cell.Bounds.Maximum.Z })
                        Check.That(scoped.Project(new(x, y, z)).Depth <= scoped.QueryFar);
        Check.Equal(camera.Distance * 4, camera.QueryFar);
    }
}