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