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