using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Models;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalaxyCatalogueProfileSelectionTests
{
private static GalaxyCatalogueProfile Profile(GalaxyCamera camera,int mode,bool small=false)
{
var origin=new Coordinates(49985,40985,24105);
var point=GalaxyOriginalCatalogueLod.ClampCentre(GalaxyOriginalCatalogueLod.QueryCentre(camera,mode),origin);
return new(origin,point,.7,1500,1,4,small,mode,false,"camera-eye");
}
[Test] public void OriginalEyeAndFocusModesUseTheRequestingCameraAndItsActualDistanceFade()
{
var camera=GalaxyCamera.Create(new(1000,0,2000),1600,900,.3,.2,1);
Check.That(Profile(camera,0).TrySelection(camera,out var eye)&&eye is not null&&eye.Descriptor.Dd4Modifier==1);
var distance=camera.Distance;var expected=Math.Clamp((distance-1000)/-500,0,1);
Check.That(Profile(camera,1).TrySelection(camera,out var focus)&&focus is not null);
Check.That(Math.Abs(focus!.Descriptor.Dd4Modifier-expected)<.00002);
Check.That(Profile(camera,1,true).TrySelection(camera,out var small)&&small!.Descriptor.Dd4Modifier==1);
}
[Test] public void DensityFromAnotherPoseUnknownQualityAndDebugCallbacksNeverBecomeOriginalCoverage()
{
var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,0,4);var actual=Profile(camera,0);
Check.That(!(actual with{QualityStarCount=null}).TrySelection(camera,out _));
Check.That(!(actual with{QueryCentre=new(1,2,3)}).TrySelection(camera,out _));
Check.That(!(Profile(camera,2) with{DebugEnabled=true}).TrySelection(camera,out _));
Check.That(!(actual with{ReferenceKind="game-camera-eye"}).TrySelection(camera,out _));
var moved=GalaxyCamera.Create(new(30,0,0),1600,900,0,0,4);
Check.That(!actual.TrySelection(moved,out _));
}
[Test] public void SelectionCarriesTheCurrentIndependentAppearanceInputs()
{
var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,0,4);
Check.That((Profile(camera,1,true) with{ColourBlend=.375}).TrySelection(camera,out var selection));
Check.Equal(1,selection!.OriginalViewMode!.Value);Check.That(selection.SmallMode==true);Check.Equal(.375,selection.ColourBlend!.Value);
Check.That(Profile(camera,0).TrySelection(camera,out var unknownBlend));Check.That(unknownBlend!.ColourBlend is null);
}
[Test] public async Task CachedRawAppearanceChangesSizeWithTheCurrentSelectionWithoutRequeryingTheCell()
{
var origin=new Coordinates(0,0,0);var centre=new Coordinates(5,5,5);
var descriptor=GalaxyOriginalCatalogueLod.Create(centre,0,500,0,1,.001);
var camera=GalaxyCamera.Create(centre,1600,900,0,0,4);var plan=new GalaxyCellQueryPlan(camera,descriptor,origin);
Check.Equal(1,plan.Cells.Count);Check.Equal(7UL,plan.Cells[0].Address);
var appearance=new GalaxyOriginalStellarAppearance(0xFFFFFFFF,0xAA998877,.25f,100,4,1.25f,.075f,false);
var star=new GalacticSystem("Cached raw appearance fixture",new(6,6,6),(1L<<23)|7){OriginalAppearance=appearance};
using var session=new GalaxyCellStreamingSession();var calls=0;
await foreach(var _ in session.StreamAsync(plan,(_,_,cells,_)=>
{
calls++;return Task.FromResult(new GalaxyRegionResult(new[]{star},7,1,1,false,true)
{Scope="requested-cells",RequestedCells=1,Origin=origin});
})){}
GalacticSystem? cached=null;
await foreach(var update in session.StreamAsync(plan,(_,_,_,_)=>throw new Exception("Changing size mode must not reload immutable cell geometry")))
if(update.Systems.Count>0)cached=update.Systems.Single();
Check.That(ReferenceEquals(star,cached));Check.Equal(1,calls);
var normal=new GalaxyCatalogueSelection(descriptor,origin){SmallMode=false};var small=normal with{SmallMode=true};
Check.Equal(1.25f,normal.OriginalSize(cached!)!.Value);Check.Equal(.075f,small.OriginalSize(cached!)!.Value);
Check.Equal(1.25f,cached!.OriginalAppearance!.ActiveSize!.Value);Check.That(cached.OriginalAppearance.SmallSizeActive==false);
Check.That((normal with{SmallMode=null}).OriginalSize(cached) is null);
Check.That(normal.OriginalSize(cached with{OriginalAppearance=null}) is null);
Check.Equal(0f,small.OriginalSize(cached with{OriginalAppearance=appearance with{SmallSize=0}})!.Value);
}
}
using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Models;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalaxyCatalogueProfileSelectionTests
{
private static GalaxyCatalogueProfile Profile(GalaxyCamera camera,int mode,bool small=false)
{
var origin=new Coordinates(49985,40985,24105);
var point=GalaxyOriginalCatalogueLod.ClampCentre(GalaxyOriginalCatalogueLod.QueryCentre(camera,mode),origin);
return new(origin,point,.7,1500,1,4,small,mode,false,"camera-eye");
}
[Test] public void OriginalEyeAndFocusModesUseTheRequestingCameraAndItsActualDistanceFade()
{
var camera=GalaxyCamera.Create(new(1000,0,2000),1600,900,.3,.2,1);
Check.That(Profile(camera,0).TrySelection(camera,out var eye)&&eye is not null&&eye.Descriptor.Dd4Modifier==1);
var distance=camera.Distance;var expected=Math.Clamp((distance-1000)/-500,0,1);
Check.That(Profile(camera,1).TrySelection(camera,out var focus)&&focus is not null);
Check.That(Math.Abs(focus!.Descriptor.Dd4Modifier-expected)<.00002);
Check.That(Profile(camera,1,true).TrySelection(camera,out var small)&&small!.Descriptor.Dd4Modifier==1);
}
[Test] public void DensityFromAnotherPoseUnknownQualityAndDebugCallbacksNeverBecomeOriginalCoverage()
{
var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,0,4);var actual=Profile(camera,0);
Check.That(!(actual with{QualityStarCount=null}).TrySelection(camera,out _));
Check.That(!(actual with{QueryCentre=new(1,2,3)}).TrySelection(camera,out _));
Check.That(!(Profile(camera,2) with{DebugEnabled=true}).TrySelection(camera,out _));
Check.That(!(actual with{ReferenceKind="game-camera-eye"}).TrySelection(camera,out _));
var moved=GalaxyCamera.Create(new(30,0,0),1600,900,0,0,4);
Check.That(!actual.TrySelection(moved,out _));
}
[Test] public void SelectionCarriesTheCurrentIndependentAppearanceInputs()
{
var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,0,4);
Check.That((Profile(camera,1,true) with{ColourBlend=.375}).TrySelection(camera,out var selection));
Check.Equal(1,selection!.OriginalViewMode!.Value);Check.That(selection.SmallMode==true);Check.Equal(.375,selection.ColourBlend!.Value);
Check.That(Profile(camera,0).TrySelection(camera,out var unknownBlend));Check.That(unknownBlend!.ColourBlend is null);
}
[Test] public async Task CachedRawAppearanceChangesSizeWithTheCurrentSelectionWithoutRequeryingTheCell()
{
var origin=new Coordinates(0,0,0);var centre=new Coordinates(5,5,5);
var descriptor=GalaxyOriginalCatalogueLod.Create(centre,0,500,0,1,.001);
var camera=GalaxyCamera.Create(centre,1600,900,0,0,4);var plan=new GalaxyCellQueryPlan(camera,descriptor,origin);
Check.Equal(1,plan.Cells.Count);Check.Equal(7UL,plan.Cells[0].Address);
var appearance=new GalaxyOriginalStellarAppearance(0xFFFFFFFF,0xAA998877,.25f,100,4,1.25f,.075f,false);
var star=new GalacticSystem("Cached raw appearance fixture",new(6,6,6),(1L<<23)|7){OriginalAppearance=appearance};
using var session=new GalaxyCellStreamingSession();var calls=0;
await foreach(var _ in session.StreamAsync(plan,(_,_,cells,_)=>
{
calls++;return Task.FromResult(new GalaxyRegionResult(new[]{star},7,1,1,false,true)
{Scope="requested-cells",RequestedCells=1,Origin=origin});
})){}
GalacticSystem? cached=null;
await foreach(var update in session.StreamAsync(plan,(_,_,_,_)=>throw new Exception("Changing size mode must not reload immutable cell geometry")))
if(update.Systems.Count>0)cached=update.Systems.Single();
Check.That(ReferenceEquals(star,cached));Check.Equal(1,calls);
var normal=new GalaxyCatalogueSelection(descriptor,origin){SmallMode=false};var small=normal with{SmallMode=true};
Check.Equal(1.25f,normal.OriginalSize(cached!)!.Value);Check.Equal(.075f,small.OriginalSize(cached!)!.Value);
Check.Equal(1.25f,cached!.OriginalAppearance!.ActiveSize!.Value);Check.That(cached.OriginalAppearance.SmallSizeActive==false);
Check.That((normal with{SmallMode=null}).OriginalSize(cached) is null);
Check.That(normal.OriginalSize(cached with{OriginalAppearance=null}) is null);
Check.Equal(0f,small.OriginalSize(cached with{OriginalAppearance=appearance with{SmallSize=0}})!.Value);
}
}