using System; using Content.Server.Atmos; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Atmos.Piping.Pumps { [RegisterComponent] [ComponentReference(typeof(BasePumpComponent))] public class VolumePumpComponent : BasePumpComponent { [ViewVariables(VVAccess.ReadWrite)] public int VolumePumpRate { get => _volumePumpRate; set => _volumePumpRate = Math.Clamp(value, 0, MaxVolumePumpRate); } private int _volumePumpRate; [ViewVariables(VVAccess.ReadWrite)] public int MaxVolumePumpRate { get => _maxVolumePumpRate; set => Math.Max(value, 0); } private int _maxVolumePumpRate; public override string Name => "VolumePump"; public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); serializer.DataField(ref _volumePumpRate, "startingVolumePumpRate", 0); serializer.DataField(ref _maxVolumePumpRate, "maxVolumePumpRate", 100); } protected override void PumpGas(GasMixture inletGas, GasMixture outletGas) { var volumeRatio = Math.Clamp(VolumePumpRate / inletGas.Volume, 0, 1); outletGas.Merge(inletGas.RemoveRatio(volumeRatio)); } } }