using System.Numerics; using XFEEDToolBox.Core.Galaxy; using XFEEDToolBox.Core.Models; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class GalaxyOriginalFrameFadeStateTests { private static GalaxyCamera Camera(double distance)=>GalaxyCamera.Create(new Coordinates(0,0,0),1600,900,0,0, GalaxyOriginalProjection.FocalLength(1600,900)/distance); [Test] public void ActivationResetsItsOwnStateWithoutUsingTheDistanceTarget() { var state=new GalaxyOriginalFrameFadeState();var camera=Camera(100); Check.That(!state.TryCreateForCamera(camera,50,out _)); Check.That(!state.TryAdvanceForCamera(camera,50,0,.1f)); state.Activate();Check.Equal(0f,state.CurrentTransition!.Value); Check.That(state.TryCreateForCamera(camera,50,out var initial)); Check.Equal(0f,initial.Transition);Check.Equal(0f,initial.Alpha(new Vector3(0,10,0))); Check.That(state.TryAdvanceForCamera(camera,50,0,.1f)); Check.That(Math.Abs(state.CurrentTransition!.Value-.303f)<.000001f); Check.Equal(GalaxyOriginalFrameFade.TransitionUpperLimit,state.TargetTransition!.Value); state.Deactivate();Check.That(state.CurrentTransition is null); Check.That(!state.TryCreateForCamera(camera,50,out _)); state.Activate();Check.Equal(0f,state.CurrentTransition!.Value); } [Test] public void ActualCameraAndSamePublishedInnerRadiusDriveBothTargetAndPreparedRadii() { var state=new GalaxyOriginalFrameFadeState();state.Activate();var camera=Camera(62.5); Check.That(state.TryAdvanceForCamera(camera,100,null,.1f)); Check.Equal(.5f,state.TargetTransition!.Value); Check.That(Math.Abs(state.CurrentTransition!.Value-.15f)<.000001f); Check.That(state.TryCreateForCamera(camera,100,out var fade)); Check.That(Math.Abs(fade.InnerRadius-71.66667f)<.00002f); Check.That(state.TryCreateForCamera(camera,100,out var repeated)); Check.Equal(fade.Transition,repeated.Transition); Check.That(state.TryAdvanceForCamera(camera,50,0,.1f)); Check.Equal(GalaxyOriginalFrameFade.TransitionUpperLimit,state.TargetTransition!.Value); Check.That(Math.Abs(state.CurrentTransition!.Value-.408f)<.000001f); } [Test] public void MissingEventInputLosesHistoryAndCannotReappearAsTheDistanceTarget() { var state=new GalaxyOriginalFrameFadeState();state.Activate();var camera=Camera(100); Check.That(state.TryAdvanceForCamera(camera,50,0,.1f)); Check.That(!state.TryAdvanceForCamera(camera,50,0,null)); Check.That(state.CurrentTransition is null&&state.TargetTransition is null); Check.That(!state.TryCreateForCamera(camera,50,out _)); Check.That(!state.TryAdvanceForCamera(camera,50,0,.1f)); Check.That(state.CurrentTransition is null); state.Activate();Check.That(state.TryAdvanceForCamera(camera,50,0,.1f)); Check.That(Math.Abs(state.CurrentTransition!.Value-.303f)<.000001f); } [Test] public void ZeroPublishedRangeUsesTheEndpointBranchWithoutDivisionOrConstructorFallback() { Check.That(GalaxyOriginalFrameFade.TryTargetTransition(10,0,0,out var realistic)); Check.Equal(GalaxyOriginalFrameFade.TransitionUpperLimit,realistic); Check.That(GalaxyOriginalFrameFade.TryTargetTransition(10,0,1,out var map));Check.Equal(1f,map); Check.That(!GalaxyOriginalFrameFade.TryTargetTransition(10,0,null,out _)); var state=new GalaxyOriginalFrameFadeState();state.Activate(); Check.That(state.TryAdvanceForCamera(Camera(10),0,1,.1f)); Check.That(state.TryCreateForCamera(Camera(10),0,out var fade)); Check.Equal(0f,fade.InnerRadius);Check.Equal(0f,fade.OuterRadius); Check.That(Math.Abs(fade.Transition-.3f)<.000001f); } [Test] public void ExplicitZeroFrameValueDoesNotBecomeAnAssumedFramePeriod() { var state=new GalaxyOriginalFrameFadeState();state.Activate(); Check.That(state.TryAdvanceForCamera(Camera(100),50,0,0));Check.Equal(0f,state.CurrentTransition!.Value); Check.That(state.TryAdvanceForCamera(Camera(100),50,0,2)); Check.Equal(GalaxyOriginalFrameFade.TransitionUpperLimit,state.CurrentTransition!.Value); Check.That(state.TryAdvanceForCamera(Camera(100),50,1,0));Check.Equal(1f,state.CurrentTransition!.Value); } }