namespace ReactorMaintenance.Simulation; internal static class SurfaceCarrierMath { public static SurfaceState AddCarrier(SurfaceState surface, ECarrierType carrier, float amount) { return carrier switch { ECarrierType.Fuel => surface with { Fuel = surface.Fuel + amount }, ECarrierType.Coolant => surface with { Coolant = surface.Coolant + amount }, ECarrierType.Electricity => surface with { Electricity = surface.Electricity + amount }, _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.") }; } public static SurfaceState RemoveCarrier(SurfaceState surface, ECarrierType carrier) { return carrier switch { ECarrierType.Fuel => surface with { Fuel = 0, FuelBlockTurns = Balancing.Current.RemedyBlockTurns }, ECarrierType.Coolant => surface with { Coolant = 0, CoolantBlockTurns = Balancing.Current.RemedyBlockTurns }, ECarrierType.Electricity => surface with { Electricity = 0, ElectricityBlockTurns = Balancing.Current.RemedyBlockTurns }, _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.") }; } }