namespace ReactorMaintenance.Simulation; internal static class SimulationBands { public static EBand SurfaceBand(SurfaceState surface, ECarrierType carrier) { return carrier switch { ECarrierType.Fuel => Fuel(surface.Fuel), ECarrierType.Coolant => Coolant(surface.Coolant), ECarrierType.Electricity => Electricity(surface.Electricity), _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.") }; } public static EBand NetworkBand(UndergroundCell underground, ECarrierType carrier, ENetworkValueKind valueKind) { var value = valueKind == ENetworkValueKind.Amount ? underground.Amount : underground.Intensity; return carrier switch { ECarrierType.Fuel => Fuel(value), ECarrierType.Coolant => Coolant(value), ECarrierType.Electricity => Electricity(value), _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.") }; } public static EBand Fuel(float value) { return Balancing.Current.Band(value, Balancing.Current.FuelCaution, Balancing.Current.FuelCritical); } public static EBand Coolant(float value) { return Balancing.Current.Band(value, Balancing.Current.CoolantCaution, Balancing.Current.CoolantCritical); } public static EBand Electricity(float value) { return Balancing.Current.Band(value, Balancing.Current.ElectricityCaution, Balancing.Current.ElectricityCritical); } public static EBand Heat(float value) { return Balancing.Current.Band(value, Balancing.Current.HeatCaution, Balancing.Current.HeatCritical); } }