namespace XFEEDToolBox.Core.Galaxy;
public enum GalaxyOriginalSizeFormula { Uniform,Population,Commodity,Colonisation }
public readonly record struct GalaxyOriginalSizeOption(GalaxyFilterCategory Category,GalaxyOriginalSizeFormula Formula,bool CurrentPanelOption);
/// <summary>Saved visualisation IDs and the current map's independent size control are different lists.</summary>
public static class GalaxyOriginalSizeOptions
{
// Current GMSizeFilterComponent has one population checkbox, not a list of
// all saved visualisation IDs. Its unchecked state selects uniform size.
public static IReadOnlyList<GalaxyFilterCategory> CurrentPanelCategories {get;}=
Array.AsReadOnly(new[]{GalaxyFilterCategory.None,GalaxyFilterCategory.Population});
public const float ColonisationExcludedMultiplier=.6000000238418579f;
public static GalaxyOriginalSizeOption? ForCategory(GalaxyFilterCategory category)=>category switch
{
GalaxyFilterCategory.None=>new(category,GalaxyOriginalSizeFormula.Uniform,true),
GalaxyFilterCategory.Population=>new(category,GalaxyOriginalSizeFormula.Population,true),
GalaxyFilterCategory.Commodity=>new(category,GalaxyOriginalSizeFormula.Commodity,false),
GalaxyFilterCategory.Colonisation=>new(category,GalaxyOriginalSizeFormula.Colonisation,false),
GalaxyFilterCategory.Allegiance or GalaxyFilterCategory.Government or GalaxyFilterCategory.Economy or
GalaxyFilterCategory.StarClass or GalaxyFilterCategory.State or GalaxyFilterCategory.Security or
GalaxyFilterCategory.Visited or GalaxyFilterCategory.Civilization or GalaxyFilterCategory.Services or
GalaxyFilterCategory.FleetCarrier or GalaxyFilterCategory.Exploration or GalaxyFilterCategory.TradeData
=>new(category,GalaxyOriginalSizeFormula.Uniform,false),
_=>null
};
}
public sealed partial record GalaxyMapFilter
{
public bool RequestsOriginalColonisationSize=>Mode!=GalaxyMapMode.Realistic&&SizeCategory==GalaxyFilterCategory.Colonisation;
/// <summary>Original selected size; null is unavailable evidence, never a guessed category formula.</summary>
public float? SelectedOriginalSize(GalacticSystem system)=>GalaxyOriginalSizeOptions.ForCategory(SizeCategory)?.Formula switch
{
GalaxyOriginalSizeFormula.Uniform=>GalaxyOriginalAppearance.DefaultSize,
GalaxyOriginalSizeFormula.Population=>PopulationValue(system) is {} p
?p<PopulationMinimum?0:GalaxyOriginalAppearance.PopulationSizeMinimum+(float)PopulationFraction(p)*(GalaxyOriginalAppearance.PopulationSizeMaximum-GalaxyOriginalAppearance.PopulationSizeMinimum):null,
GalaxyOriginalSizeFormula.Commodity=>CommodityStyle(system)?.Size,
// Original 3B27F00 calls 3B1A200: raw candidate statuses5/6 become
// classification1. Only that branch multiplies config+188 by base+64.
GalaxyOriginalSizeFormula.Colonisation=>OriginalColonisationColourStatus(system) is >=0 and <=15 and var status
?GalaxyOriginalAppearance.DefaultSize*(status is 5 or 6?GalaxyOriginalSizeOptions.ColonisationExcludedMultiplier:1):null,
_=>null
};
}
namespace XFEEDToolBox.Core.Galaxy;
public enum GalaxyOriginalSizeFormula { Uniform,Population,Commodity,Colonisation }
public readonly record struct GalaxyOriginalSizeOption(GalaxyFilterCategory Category,GalaxyOriginalSizeFormula Formula,bool CurrentPanelOption);
/// <summary>Saved visualisation IDs and the current map's independent size control are different lists.</summary>
public static class GalaxyOriginalSizeOptions
{
// Current GMSizeFilterComponent has one population checkbox, not a list of
// all saved visualisation IDs. Its unchecked state selects uniform size.
public static IReadOnlyList<GalaxyFilterCategory> CurrentPanelCategories {get;}=
Array.AsReadOnly(new[]{GalaxyFilterCategory.None,GalaxyFilterCategory.Population});
public const float ColonisationExcludedMultiplier=.6000000238418579f;
public static GalaxyOriginalSizeOption? ForCategory(GalaxyFilterCategory category)=>category switch
{
GalaxyFilterCategory.None=>new(category,GalaxyOriginalSizeFormula.Uniform,true),
GalaxyFilterCategory.Population=>new(category,GalaxyOriginalSizeFormula.Population,true),
GalaxyFilterCategory.Commodity=>new(category,GalaxyOriginalSizeFormula.Commodity,false),
GalaxyFilterCategory.Colonisation=>new(category,GalaxyOriginalSizeFormula.Colonisation,false),
GalaxyFilterCategory.Allegiance or GalaxyFilterCategory.Government or GalaxyFilterCategory.Economy or
GalaxyFilterCategory.StarClass or GalaxyFilterCategory.State or GalaxyFilterCategory.Security or
GalaxyFilterCategory.Visited or GalaxyFilterCategory.Civilization or GalaxyFilterCategory.Services or
GalaxyFilterCategory.FleetCarrier or GalaxyFilterCategory.Exploration or GalaxyFilterCategory.TradeData
=>new(category,GalaxyOriginalSizeFormula.Uniform,false),
_=>null
};
}
public sealed partial record GalaxyMapFilter
{
public bool RequestsOriginalColonisationSize=>Mode!=GalaxyMapMode.Realistic&&SizeCategory==GalaxyFilterCategory.Colonisation;
/// <summary>Original selected size; null is unavailable evidence, never a guessed category formula.</summary>
public float? SelectedOriginalSize(GalacticSystem system)=>GalaxyOriginalSizeOptions.ForCategory(SizeCategory)?.Formula switch
{
GalaxyOriginalSizeFormula.Uniform=>GalaxyOriginalAppearance.DefaultSize,
GalaxyOriginalSizeFormula.Population=>PopulationValue(system) is {} p
?p<PopulationMinimum?0:GalaxyOriginalAppearance.PopulationSizeMinimum+(float)PopulationFraction(p)*(GalaxyOriginalAppearance.PopulationSizeMaximum-GalaxyOriginalAppearance.PopulationSizeMinimum):null,
GalaxyOriginalSizeFormula.Commodity=>CommodityStyle(system)?.Size,
// Original 3B27F00 calls 3B1A200: raw candidate statuses5/6 become
// classification1. Only that branch multiplies config+188 by base+64.
GalaxyOriginalSizeFormula.Colonisation=>OriginalColonisationColourStatus(system) is >=0 and <=15 and var status
?GalaxyOriginalAppearance.DefaultSize*(status is 5 or 6?GalaxyOriginalSizeOptions.ColonisationExcludedMultiplier:1):null,
_=>null
};
}