[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;
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;
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.
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)
--- /dev/null
+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,
+ }
+}
- 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
"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 ] ]
}
]
}