XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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);
    }
}