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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

namespace XFEEDToolBox.Test;

[TestFixture]
public class GalaxyOriginalCameraAxesTests
{
    static void Near(double expected,double actual)=>Check.That(Math.Abs(expected-actual)<1e-9);

    [Test]
    public void OriginalPositivePitchLooksDownAroundTheFloorFocus()
    {
        var camera=GalaxyCamera.Create(new(10,20,30),1200,800,0,Math.PI/6,4);
        var cosine=Math.Sqrt(3)/2;
        Near(1,camera.Right.X);Near(0,camera.Right.Y);Near(0,camera.Right.Z);
        Near(0,camera.Up.X);Near(cosine,camera.Up.Y);Near(.5,camera.Up.Z);
        Near(0,camera.Forward.X);Near(-.5,camera.Forward.Y);Near(cosine,camera.Forward.Z);
        Near(10,camera.Eye.X);Near(20+camera.Distance*.5,camera.Eye.Y);Near(30-camera.Distance*cosine,camera.Eye.Z);
        var floor=camera.Project(new(10,20,30));Near(600,floor.X);Near(400,floor.Y);
        // Original eye = focus - distance*forward remains true under yaw.
        var north=camera.Project(new(10,21,30));Check.That(north.IsVisible&&north.Y<floor.Y);
    }

    [Test]
    public void OriginalQuarterTurnYawRotatesRightTowardNegativeZ()
    {
        var camera=GalaxyCamera.Create(new(300,400,500),1200,800,Math.PI/2,Math.PI/6,4);
        var cosine=Math.Sqrt(3)/2;
        Near(0,camera.Right.X);Near(-1,camera.Right.Z);
        Near(cosine,camera.Forward.X);Near(-.5,camera.Forward.Y);Near(0,camera.Forward.Z);
        Near(.5,camera.Up.X);Near(cosine,camera.Up.Y);Near(0,camera.Up.Z);
        var right=camera.Project(new(300,400,499));Check.That(right.IsVisible&&right.X>600);
        var moved=camera.MovePlane(7,11,13);Near(311,moved.X);Near(413,moved.Y);Near(493,moved.Z);
    }

    [Test]
    public void OriginalIdleFloorRoundingRetainsXZAndRoundsNegativeHalvesUp()
    {
        foreach(var (height,expected) in new[]{(-2.5,-2d),(-1.51,-2d),(-.5,0d),(.49,0d),(.5,1d),(2.5,3d)})
        {
            var rounded=GalaxyFloorSelector.SettleHeight(new(123.25,height,-456.75),false,0);
            Near(123.25,rounded.X);Near(expected,rounded.Y);Near(-456.75,rounded.Z);
        }
    }

    [Test]
    public void OriginalActiveCraneRetainsContinuousTargetHeight()
    {
        var position=new Coordinates(12,3.25,34);
        Check.That(GalaxyFloorSelector.SettleHeight(position,true,0)==position);
        Check.That(GalaxyFloorSelector.SettleHeight(position,false,-.001)==position);
        Near(3,GalaxyFloorSelector.SettleHeight(position,false,0).Y);
    }
}