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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

namespace XFEEDToolBox.Test;

[TestFixture]
public class GalaxyMouseControlsTests
{
    [Test] public void OriginalChordsSeparateOrbitCraneAndTranslation()
    {
        Check.Equal(GalaxyMouseGesture.None,GalaxyMouseControls.Gesture(GalaxyMouseButtons.None));
        Check.Equal(GalaxyMouseGesture.Orbit,GalaxyMouseControls.Gesture(GalaxyMouseButtons.Left));
        Check.Equal(GalaxyMouseGesture.Crane,GalaxyMouseControls.Gesture(GalaxyMouseButtons.Right));
        Check.Equal(GalaxyMouseGesture.Translate,GalaxyMouseControls.Gesture(GalaxyMouseButtons.Left|GalaxyMouseButtons.Right));
        var orbit=GalaxyMouseControls.Motion(GalaxyMouseButtons.Left,12,7,3);
        var crane=GalaxyMouseControls.Motion(GalaxyMouseButtons.Right,12,7,3);
        var both=GalaxyMouseControls.Motion(GalaxyMouseButtons.Left|GalaxyMouseButtons.Right,12,7,3);
        Check.That(orbit.Yaw==crane.Yaw&&orbit.Pitch!=0&&orbit.Vertical==0);
        Check.That(crane.Pitch==0&&crane.Right==0&&crane.Forward==0&&crane.Vertical>0);
        Check.That(both.Yaw==0&&both.Pitch==0&&both.Vertical==0&&both.Right<0&&both.Forward>0);
    }

    [Test] public void CraneRemainsWorldVerticalAndBothButtonMotionRemainsOnTheFloor()
    {
        foreach(var pitch in new[]{-1.4,0,1.4})
        {
            var camera=GalaxyCamera.Create(new(10,20,30),1200,800,1.1,pitch,4);
            var crane=GalaxyMouseControls.Motion(GalaxyMouseButtons.Right,0,20,1/camera.Scale);
            var lifted=camera.MovePlane(crane.Right,crane.Forward,crane.Vertical);
            Check.That(lifted.X==camera.Focus.X&&lifted.Z==camera.Focus.Z&&lifted.Y>camera.Focus.Y);
            var both=GalaxyMouseControls.Motion(GalaxyMouseButtons.Left|GalaxyMouseButtons.Right,17,-11,1/camera.Scale);
            var moved=camera.MovePlane(both.Right,both.Forward,both.Vertical);
            Check.That(moved.Y==camera.Focus.Y&&moved.DistanceTo(camera.Focus)>0);
            var reversed=GalaxyMouseControls.Motion(GalaxyMouseButtons.Right,0,20,1/camera.Scale,reverseCrane:true);
            Check.That(reversed.Vertical==-crane.Vertical);
        }
    }

    [Test] public void UnheldButtonsDoNotMoveAndInvalidDeltasAreRejected()
    {
        Check.Equal(default(GalaxyMouseMotion),GalaxyMouseControls.Motion(GalaxyMouseButtons.None,99,-99,2));
        Check.Throws<ArgumentException>(()=>GalaxyMouseControls.Motion(GalaxyMouseButtons.Left,double.NaN,0,1));
        Check.Throws<ArgumentException>(()=>GalaxyMouseControls.Motion(GalaxyMouseButtons.Right,0,1,0));
    }
}