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(()=>GalaxyMouseControls.Motion(GalaxyMouseButtons.Left,double.NaN,0,1)); Check.Throws(()=>GalaxyMouseControls.Motion(GalaxyMouseButtons.Right,0,1,0)); } }