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));
}
}
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));
}
}