namespace ReactorMaintenance.Simulation; public static class SurfaceStateExtensions { public static SurfaceState Clamp(this SurfaceState surface) { var balancing = Balancing.Current; return surface with { Fuel = balancing.ClampValue(surface.Fuel), Coolant = balancing.ClampValue(surface.Coolant), Electricity = balancing.ClampValue(surface.Electricity), Heat = balancing.ClampValue(surface.Heat), FuelBlockTurns = Math.Max(0, surface.FuelBlockTurns), CoolantBlockTurns = Math.Max(0, surface.CoolantBlockTurns), ElectricityBlockTurns = Math.Max(0, surface.ElectricityBlockTurns) }; } public static bool Blocks(this SurfaceState surface, ECarrierType carrier) { return carrier switch { ECarrierType.Fuel => surface.FuelBlockTurns > 0, ECarrierType.Coolant => surface.CoolantBlockTurns > 0, ECarrierType.Electricity => surface.ElectricityBlockTurns > 0, _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.") }; } }