diff --git a/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs b/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs index 42ea6bf6ea..a4b8c9d3dd 100644 --- a/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs +++ b/Content.Client/GameObjects/Components/Atmos/PumpVisualizer.cs @@ -12,7 +12,7 @@ using Robust.Shared.Utility; using System; using YamlDotNet.RepresentationModel; -namespace Content.Client.GameObjects.Components.Disposal +namespace Content.Client.GameObjects.Components.Atmos { [UsedImplicitly] public class PumpVisualizer : AppearanceVisualizer @@ -60,11 +60,26 @@ namespace Content.Client.GameObjects.Components.Disposal sprite.LayerSetRSI(basePumpLayer, _pumpRSI); sprite.LayerSetState(basePumpLayer, pumpBaseState); sprite.LayerSetVisible(basePumpLayer, true); + + + + var pumpEnabledAnimationState = "pumpEnabled"; + pumpEnabledAnimationState += pumpVisualState.InletDirection.ToString(); + pumpEnabledAnimationState += ((int) pumpVisualState.InletConduitLayer).ToString(); + pumpEnabledAnimationState += pumpVisualState.OutletDirection.ToString(); + pumpEnabledAnimationState += ((int) pumpVisualState.OutletConduitLayer).ToString(); + + sprite.LayerMapReserveBlank(Layer.PumpEnabled); + var pumpEnabledAnimationLayer = sprite.LayerMapGet(Layer.PumpEnabled); + sprite.LayerSetRSI(pumpEnabledAnimationLayer, _pumpRSI); + sprite.LayerSetState(pumpEnabledAnimationLayer, pumpEnabledAnimationState); + sprite.LayerSetVisible(pumpEnabledAnimationLayer, pumpVisualState.PumpEnabled); } private enum Layer { - PumpBase + PumpBase, + PumpEnabled, } } } diff --git a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs index 1556c9a62c..24a44ae7d8 100644 --- a/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/Piping/Pumps/BasePumpComponent.cs @@ -16,6 +16,21 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping /// public abstract class BasePumpComponent : PipeNetDeviceComponent { + /// + /// If the pump is currently pumping. + /// + [ViewVariables(VVAccess.ReadWrite)] + public bool PumpEnabled + { + get => _pumpEnabled; + set + { + _pumpEnabled = value; + UpdateAppearance(); + } + } + private bool _pumpEnabled = true; + /// /// Needs to be same as that of a on this entity. /// @@ -67,6 +82,9 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping public override void Update() { + if (!PumpEnabled) + return; + PumpGas(_inletPipe.Air, _outletPipe.Air); } @@ -74,7 +92,7 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping private void UpdateAppearance() { - _appearance?.SetData(PumpVisuals.VisualState, new PumpVisualState(_inletDirection, _outletDirection, _inletPipe.ConduitLayer, _outletPipe.ConduitLayer)); + _appearance?.SetData(PumpVisuals.VisualState, new PumpVisualState(_inletDirection, _outletDirection, _inletPipe.ConduitLayer, _outletPipe.ConduitLayer, PumpEnabled)); } } } diff --git a/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs b/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs index d4f304e53e..8546d9d071 100644 --- a/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs +++ b/Content.Shared/GameObjects/Atmos/SharedPumpComponent.cs @@ -17,13 +17,15 @@ namespace Content.Shared.GameObjects.Atmos public readonly PipeDirection OutletDirection; public readonly ConduitLayer InletConduitLayer; public readonly ConduitLayer OutletConduitLayer; + public readonly bool PumpEnabled; - public PumpVisualState(PipeDirection inletDirection, PipeDirection outletDirection, ConduitLayer inletConduitLayer, ConduitLayer outletConduitLayer) + public PumpVisualState(PipeDirection inletDirection, PipeDirection outletDirection, ConduitLayer inletConduitLayer, ConduitLayer outletConduitLayer, bool pumpEnabled) { InletDirection = inletDirection; OutletDirection = outletDirection; InletConduitLayer = inletConduitLayer; OutletConduitLayer = outletConduitLayer; + PumpEnabled = pumpEnabled; } } } diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json index f950406db6..d8390a7ef9 100644 --- a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json +++ b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/meta.json @@ -26,6 +26,26 @@ "name":"pumpWest2East2", "directions":1, "delays":[ [ 1.0 ] ] + }, + { + "name":"pumpEnabledEast2West2", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name":"pumpEnabledNorth2South2", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name":"pumpEnabledSouth2North2", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1 ] ] + }, + { + "name":"pumpEnabledWest2East2", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1 ] ] } ] } \ No newline at end of file diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledEast2West2.png b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledEast2West2.png new file mode 100644 index 0000000000..4e2d4e1a78 Binary files /dev/null and b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledEast2West2.png differ diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledNorth2South2.png b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledNorth2South2.png new file mode 100644 index 0000000000..6e33ce9160 Binary files /dev/null and b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledNorth2South2.png differ diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledSouth2North2.png b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledSouth2North2.png new file mode 100644 index 0000000000..fffb200483 Binary files /dev/null and b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledSouth2North2.png differ diff --git a/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledWest2East2.png b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledWest2East2.png new file mode 100644 index 0000000000..ddcd2cd54d Binary files /dev/null and b/Resources/Textures/Constructible/Atmos/pressurepump.rsi/pumpEnabledWest2East2.png differ