diff --git a/Content.Server/Atmos/Piping/Binary/Components/GasVolumePumpComponent.cs b/Content.Server/Atmos/Piping/Binary/Components/GasVolumePumpComponent.cs index bdd85524a8..36ced3887d 100644 --- a/Content.Server/Atmos/Piping/Binary/Components/GasVolumePumpComponent.cs +++ b/Content.Server/Atmos/Piping/Binary/Components/GasVolumePumpComponent.cs @@ -9,6 +9,9 @@ namespace Content.Server.Atmos.Piping.Binary.Components [DataField("enabled")] public bool Enabled { get; set; } = true; + [DataField("blocked")] + public bool Blocked { get; set; } = false; + [ViewVariables(VVAccess.ReadWrite)] public bool Overclocked { get; set; } = false; diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs index aa171ce6ba..5b8035681e 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs @@ -12,6 +12,7 @@ using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping.Binary.Components; using Content.Shared.Atmos.Piping.Unary.Components; +using Content.Shared.Atmos.Visuals; using Content.Shared.Audio; using Content.Shared.Database; using Content.Shared.Examine; @@ -83,12 +84,24 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems var inputStartingPressure = inlet.Air.Pressure; var outputStartingPressure = outlet.Air.Pressure; + var previouslyBlocked = pump.Blocked; + pump.Blocked = false; + // Pump mechanism won't do anything if the pressure is too high/too low unless you overclock it. if ((inputStartingPressure < pump.LowerThreshold) || (outputStartingPressure > pump.HigherThreshold) && !pump.Overclocked) - return; + { + pump.Blocked = true; + } // Overclocked pumps can only force gas a certain amount. if ((outputStartingPressure - inputStartingPressure > pump.OverclockThreshold) && pump.Overclocked) + { + pump.Blocked = true; + } + + if (previouslyBlocked != pump.Blocked) + UpdateAppearance(uid, pump); + if (pump.Blocked) return; // We multiply the transfer rate in L/s by the seconds passed since the last process to get the liters. @@ -172,7 +185,12 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems if (!Resolve(uid, ref pump, ref appearance, false)) return; - _appearance.SetData(uid, PumpVisuals.Enabled, pump.Enabled, appearance); + if (!pump.Enabled) + _appearance.SetData(uid, GasVolumePumpVisuals.State, GasVolumePumpState.Off, appearance); + else if (pump.Blocked) + _appearance.SetData(uid, GasVolumePumpVisuals.State, GasVolumePumpState.Blocked, appearance); + else + _appearance.SetData(uid, GasVolumePumpVisuals.State, GasVolumePumpState.On, appearance); } private void OnPacketRecv(EntityUid uid, GasVolumePumpComponent component, DeviceNetworkPacketEvent args) diff --git a/Content.Shared/Atmos/Piping/Binary/Visuals/GasVolumePumpVisuals.cs b/Content.Shared/Atmos/Piping/Binary/Visuals/GasVolumePumpVisuals.cs new file mode 100644 index 0000000000..1cc73e9038 --- /dev/null +++ b/Content.Shared/Atmos/Piping/Binary/Visuals/GasVolumePumpVisuals.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.Atmos.Visuals +{ + [Serializable, NetSerializable] + public enum GasVolumePumpVisuals : byte + { + State, + } + + [Serializable, NetSerializable] + public enum GasVolumePumpState : byte + { + Off, + On, + Blocked, + } +} diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml index f5c1f2015f..b99b88483c 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml @@ -82,10 +82,11 @@ - type: Appearance - type: GenericVisualizer visuals: - enum.PumpVisuals.Enabled: + enum.GasVolumePumpVisuals.State: enabled: - True: { state: pumpVolumeOn } - False: { state: pumpVolume } + On: { state: pumpVolumeOn } + Off: { state: pumpVolume } + Blocked: { state: pumpVolumeBlocked } - type: PipeColorVisuals - type: GasVolumePump enabled: false diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pump.rsi/meta.json b/Resources/Textures/Structures/Piping/Atmospherics/pump.rsi/meta.json index d3d3ce6ba9..14a5a244bf 100644 --- a/Resources/Textures/Structures/Piping/Atmospherics/pump.rsi/meta.json +++ b/Resources/Textures/Structures/Piping/Atmospherics/pump.rsi/meta.json @@ -52,6 +52,11 @@ "name":"pumpVolumeOn", "directions":4, "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ], [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name":"pumpVolumeBlocked", + "directions":4, + "delays":[ [ 1.0, 1.0 ], [ 1.0, 1.0 ], [ 1.0, 1.0 ], [ 1.0, 1.0 ] ] } ] } diff --git a/Resources/Textures/Structures/Piping/Atmospherics/pump.rsi/pumpVolumeBlocked.png b/Resources/Textures/Structures/Piping/Atmospherics/pump.rsi/pumpVolumeBlocked.png new file mode 100644 index 0000000000..27bb092f47 Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/pump.rsi/pumpVolumeBlocked.png differ