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