Convert piped atmos entity visualizers (#9200)

This commit is contained in:
TekuNut
2022-07-07 04:09:29 +01:00
committed by GitHub
parent fce5f59c55
commit 458d05b29b
17 changed files with 149 additions and 364 deletions

View File

@@ -0,0 +1,8 @@
using Robust.Shared.GameObjects;
namespace Content.Client.Atmos.Components;
[RegisterComponent]
public class PipeColorVisualsComponent : Component
{
}

View File

@@ -0,0 +1,24 @@
using Content.Client.Atmos.Components;
using Robust.Client.GameObjects;
using Content.Shared.Atmos.Piping;
namespace Content.Client.Atmos.EntitySystems;
public sealed class PipeColorVisualizerSystem : VisualizerSystem<PipeColorVisualsComponent>
{
protected override void OnAppearanceChange(EntityUid uid, PipeColorVisualsComponent component, ref AppearanceChangeEvent args)
{
if(TryComp<SpriteComponent>(uid, out var sprite)
&& args.Component.TryGetData<Color>(PipeColorVisuals.Color, out var color))
{
// T-ray scanner / sub floor runs after this visualizer. Lets not bulldoze transparency.
var layer = sprite[PipeVisualLayers.Pipe];
layer.Color = color.WithAlpha(layer.Color.A);
}
}
}
public enum PipeVisualLayers : byte
{
Pipe,
}

View File

@@ -1,32 +0,0 @@
using System;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Serialization.Manager.Attributes;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public abstract class EnabledAtmosDeviceVisualizer : AppearanceVisualizer
{
[DataField("disabledState")]
private string _disabledState = string.Empty;
[DataField("enabledState")]
private string _enabledState = string.Empty;
protected abstract object LayerMap { get; }
protected abstract Enum DataKey { get; }
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
var entities = IoCManager.Resolve<IEntityManager>();
if (!entities.TryGetComponent(component.Owner, out ISpriteComponent? sprite))
return;
if(component.TryGetData(DataKey, out bool enabled) && sprite.LayerMapTryGet(LayerMap, out var layer))
sprite.LayerSetState(layer, enabled ? _enabledState : _disabledState);
}
}
}

View File

@@ -1,18 +0,0 @@
using System;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class GasFilterVisualizer : EnabledAtmosDeviceVisualizer
{
protected override object LayerMap => Layers.Enabled;
protected override Enum DataKey => FilterVisuals.Enabled;
enum Layers : byte
{
Enabled,
}
}
}

View File

@@ -1,18 +0,0 @@
using System;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class GasValveVisualizer : EnabledAtmosDeviceVisualizer
{
protected override object LayerMap => Layers.Enabled;
protected override Enum DataKey => FilterVisuals.Enabled;
enum Layers : byte
{
Enabled,
}
}
}

View File

@@ -1,18 +0,0 @@
using System;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class OutletInjectorVisualizer : EnabledAtmosDeviceVisualizer
{
protected override object LayerMap => Layers.Enabled;
protected override Enum DataKey => OutletInjectorVisuals.Enabled;
enum Layers : byte
{
Enabled,
}
}
}

View File

@@ -1,18 +0,0 @@
using System;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class PassiveVentVisualizer : EnabledAtmosDeviceVisualizer
{
protected override object LayerMap => Layers.Enabled;
protected override Enum DataKey => PassiveVentVisuals.Enabled;
enum Layers : byte
{
Enabled,
}
}
}

View File

@@ -1,30 +0,0 @@
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class PipeColorVisualizer : AppearanceVisualizer
{
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
if (!IoCManager.Resolve<IEntityManager>().TryGetComponent(component.Owner, out SpriteComponent? sprite))
return;
if (component.TryGetData(PipeColorVisuals.Color, out Color color))
{
// T-ray scanner / sub floor runs after this visualizer. Lets not bulldoze transparency.
var layer = sprite[Layers.Pipe];
layer.Color = color.WithAlpha(layer.Color.A);
}
}
public enum Layers : byte
{
Pipe,
}
}
}

View File

@@ -1,18 +0,0 @@
using System;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class PressurePumpVisualizer : EnabledAtmosDeviceVisualizer
{
protected override object LayerMap => Layers.Enabled;
protected override Enum DataKey => PumpVisuals.Enabled;
enum Layers : byte
{
Enabled,
}
}
}

View File

@@ -1,54 +0,0 @@
using Content.Shared.Atmos.Piping.Unary.Visuals;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class ScrubberVisualizer : AppearanceVisualizer
{
private string _offState = "scrub_off";
private string _scrubState = "scrub_on";
private string _siphonState = "scrub_purge";
private string _weldedState = "scrub_welded";
private string _wideState = "scrub_wide";
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
var entities = IoCManager.Resolve<IEntityManager>();
if (!entities.TryGetComponent(component.Owner, out ISpriteComponent? sprite))
return;
if (!component.TryGetData(ScrubberVisuals.State, out ScrubberState state))
return;
switch (state)
{
case ScrubberState.Off:
sprite.LayerSetState(ScrubberVisualLayers.Scrubber, _offState);
break;
case ScrubberState.Scrub:
sprite.LayerSetState(ScrubberVisualLayers.Scrubber, _scrubState);
break;
case ScrubberState.Siphon:
sprite.LayerSetState(ScrubberVisualLayers.Scrubber, _siphonState);
break;
case ScrubberState.Welded:
sprite.LayerSetState(ScrubberVisualLayers.Scrubber, _weldedState);
break;
case ScrubberState.WideScrub:
sprite.LayerSetState(ScrubberVisualLayers.Scrubber, _wideState);
break;
}
}
}
public enum ScrubberVisualLayers : byte
{
Scrubber,
}
}

View File

@@ -1,18 +0,0 @@
using System;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class ThermoMachineVisualizer : EnabledAtmosDeviceVisualizer
{
protected override object LayerMap => Layers.Enabled;
protected override Enum DataKey => ThermoMachineVisuals.Enabled;
enum Layers : byte
{
Enabled,
}
}
}

View File

@@ -1,50 +0,0 @@
using Content.Shared.Atmos.Visuals;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public sealed class VentPumpVisualizer : AppearanceVisualizer
{
private string _offState = "vent_off";
private string _inState = "vent_in";
private string _outState = "vent_out";
private string _weldedState = "vent_welded";
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
var entities = IoCManager.Resolve<IEntityManager>();
if (!entities.TryGetComponent(component.Owner, out ISpriteComponent? sprite))
return;
if (!component.TryGetData(VentPumpVisuals.State, out VentPumpState state))
return;
switch (state)
{
case VentPumpState.Off:
sprite.LayerSetState(VentVisualLayers.Vent, _offState);
break;
case VentPumpState.In:
sprite.LayerSetState(VentVisualLayers.Vent, _inState);
break;
case VentPumpState.Out:
sprite.LayerSetState(VentVisualLayers.Vent, _outState);
break;
case VentPumpState.Welded:
sprite.LayerSetState(VentVisualLayers.Vent, _weldedState);
break;
}
}
}
public enum VentVisualLayers : byte
{
Vent,
}
}

View File

@@ -34,6 +34,7 @@ namespace Content.Server.Entry
"KudzuVisuals",
"AMEControllerVisuals",
"AMEShieldingVisuals",
"PipeColorVisuals",
};
}
}

View File

@@ -34,15 +34,17 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: pumpPressure
map: [ "enum.SubfloorLayers.FirstLayer", "enum.PressurePumpVisualizer+Layers.Enabled" ]
map: [ "enum.SubfloorLayers.FirstLayer", "enabled" ]
- type: Appearance
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: PressurePumpVisualizer
disabledState: pumpPressure
enabledState: pumpPressureOn
enum.PumpVisuals.Enabled:
enabled:
True: { state: pumpPressureOn }
False: { state: pumpPressure }
- type: PipeColorVisuals
- type: GasPressurePump
- type: UserInterface
interfaces:
@@ -72,15 +74,17 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: pumpVolume
map: [ "enum.SubfloorLayers.FirstLayer", "enum.PressurePumpVisualizer+Layers.Enabled" ]
map: [ "enum.SubfloorLayers.FirstLayer", "enabled" ]
- type: Appearance
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: PressurePumpVisualizer
disabledState: pumpVolume
enabledState: pumpVolumeOn
enum.PumpVisuals.Enabled:
enabled:
True: { state: pumpVolumeOn }
False: { state: pumpVolume }
- type: PipeColorVisuals
- type: GasVolumePump
- type: UserInterface
interfaces:
@@ -110,12 +114,11 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: pumpPassiveGate
map: [ "enum.SubfloorLayers.FirstLayer" ]
- type: Appearance
visuals:
- type: PipeColorVisualizer
- type: PipeColorVisuals
- type: GasPassiveGate
- type: Construction
graph: GasBinary
@@ -142,15 +145,17 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: pumpManualValve
map: [ "enum.SubfloorLayers.FirstLayer", "enum.GasValveVisualizer+Layers.Enabled" ]
map: [ "enum.SubfloorLayers.FirstLayer", "enabled" ]
- type: Appearance
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: GasValveVisualizer
disabledState: pumpManualValve
enabledState: pumpManualValveOn
enum.FilterVisuals.Enabled:
enabled:
True: { state: pumpManualValveOn }
False: { state: pumpManualValve }
- type: PipeColorVisuals
- type: GasValve
- type: NodeContainer
nodes:
@@ -188,12 +193,11 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: gasCanisterPort
map: [ "enum.SubfloorLayers.FirstLayer" ]
- type: Appearance
visuals:
- type: PipeColorVisualizer
- type: PipeColorVisuals
- type: GasPort
- type: NodeContainer
nodes:
@@ -220,13 +224,18 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: vent_off
map: [ "enum.VentVisualLayers.Vent", "enum.SubfloorLayers.FirstLayer" ]
- type: Appearance
map: [ "enabled", "enum.SubfloorLayers.FirstLayer" ]
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: VentPumpVisualizer
enum.VentPumpVisuals.State:
enabled:
Off: { state: vent_off }
In: { state: vent_in }
Out: { state: vent_out }
Welded: { state: vent_welded }
- type: PipeColorVisuals
- type: GasVentPump
inlet: inlet
outlet: outlet

View File

@@ -32,8 +32,7 @@
netsync: false
visible: false
- type: Appearance
visuals:
- type: PipeColorVisualizer
- type: PipeColorVisuals
- type: NodeContainer
- type: AtmosUnsafeUnanchor
- type: AtmosPipeColor
@@ -66,7 +65,7 @@
- type: Sprite
layers:
- state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- type: Construction
graph: GasPipe
node: half
@@ -85,7 +84,7 @@
- type: Sprite
layers:
- state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- type: Construction
graph: GasPipe
node: straight
@@ -104,7 +103,7 @@
- type: Sprite
layers:
- state: pipeBend
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- type: Construction
graph: GasPipe
node: bend
@@ -123,7 +122,7 @@
- type: Sprite
layers:
- state: pipeTJunction
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- type: Construction
graph: GasPipe
node: tjunction
@@ -144,7 +143,7 @@
- type: Sprite
layers:
- state: pipeFourway
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- type: Construction
graph: GasPipe
node: fourway

View File

@@ -40,15 +40,17 @@
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeTJunction
rotation: -90 # fuck you!!! who cares
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: gasFilter
map: [ "enum.SubfloorLayers.FirstLayer", "enum.GasFilterVisualizer+Layers.Enabled" ]
map: [ "enum.SubfloorLayers.FirstLayer", "enabled" ]
- type: Appearance
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: GasFilterVisualizer
disabledState: gasFilter
enabledState: gasFilterOn
enum.FilterVisuals.Enabled:
enabled:
True: { state: gasFilterOn }
False: { state: gasFilter }
- type: PipeColorVisuals
- type: UserInterface
interfaces:
- key: enum.GasFilterUiKey.Key
@@ -81,17 +83,19 @@
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeTJunction
rotation: -90
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: gasFilterF
map: [ "enum.SubfloorLayers.FirstLayer", "enum.GasFilterVisualizer+Layers.Enabled" ]
map: [ "enum.SubfloorLayers.FirstLayer", "enabled" ]
- type: Flippable
mirrorEntity: GasFilter
- type: Appearance
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: GasFilterVisualizer
disabledState: gasFilterF
enabledState: gasFilterFOn
enum.FilterVisuals.Enabled:
enabled:
True: { state: gasFilterFOn }
False: { state: gasFilterF }
- type: PipeColorVisuals
- type: NodeContainer
nodes:
inlet:
@@ -122,15 +126,17 @@
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeTJunction
rotation: -90
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: gasMixer
map: [ "enum.SubfloorLayers.FirstLayer", "enum.GasFilterVisualizer+Layers.Enabled" ]
map: [ "enum.SubfloorLayers.FirstLayer", "enabled" ]
- type: Appearance
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: GasFilterVisualizer
disabledState: gasMixer
enabledState: gasMixerOn
enum.FilterVisuals.Enabled:
enabled:
True: { state: gasMixerOn }
False: { state: gasMixer }
- type: PipeColorVisuals
- type: UserInterface
interfaces:
- key: enum.GasMixerUiKey.Key
@@ -165,15 +171,17 @@
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeTJunction
rotation: -90
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: gasMixerF
map: [ "enum.SubfloorLayers.FirstLayer", "enum.GasFilterVisualizer+Layers.Enabled" ]
map: [ "enum.SubfloorLayers.FirstLayer", "enabled" ]
- type: Appearance
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: GasFilterVisualizer
disabledState: gasMixerF
enabledState: gasMixerFOn
enum.FilterVisuals.Enabled:
enabled:
True: { state: gasMixerFOn }
False: { state: gasMixerF }
- type: PipeColorVisuals
- type: Flippable
mirrorEntity: GasMixer
- type: NodeContainer

View File

@@ -41,13 +41,19 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: vent_off
map: [ "enum.VentVisualLayers.Vent", "enum.SubfloorLayers.FirstLayer" ]
map: [ "enabled", "enum.SubfloorLayers.FirstLayer" ]
- type: Appearance
- type: PipeColorVisuals
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: VentPumpVisualizer
enum.VentPumpVisuals.State:
enabled:
Off: { state: vent_off }
In: { state: vent_in }
Out: { state: vent_out }
Welded: { state: vent_welded }
- type: GasVentPump
- type: Construction
graph: GasUnary
@@ -76,12 +82,11 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: vent_off
map: [ "enum.SubfloorLayers.FirstLayer" ]
- type: Appearance
visuals:
- type: PipeColorVisualizer
- type: PipeColorVisuals
- type: GasPassiveVent
- type: Construction
graph: GasUnary
@@ -112,13 +117,20 @@
layers:
- sprite: Structures/Piping/Atmospherics/pipe.rsi
state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
map: [ "enum.PipeVisualLayers.Pipe" ]
- state: scrub_off
map: [ "enum.ScrubberVisualLayers.Scrubber", "enum.SubfloorLayers.FirstLayer" ]
map: [ "enabled", "enum.SubfloorLayers.FirstLayer" ]
- type: Appearance
- type: PipeColorVisuals
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: ScrubberVisualizer
enum.ScrubberVisuals.State:
enabled:
Off: { state: scrub_off }
Scrub: { state: scrub_on }
Siphon: { state: scrub_purge }
WideScrub: { state: scrub_wide }
Welded: { state: scrub_welded }
- type: AtmosDevice
- type: GasVentScrubber
- type: Construction
@@ -146,7 +158,7 @@
layers:
- state: pipeHalf
sprite: Structures/Piping/Atmospherics/pipe.rsi
map: [ "enum.PipeColorVisualizer+Layers.Pipe", "enum.SubfloorLayers.FirstLayer" ]
map: [ "enum.PipeVisualLayers.Pipe", "enum.SubfloorLayers.FirstLayer" ]
- state: injector
- state: injector-unshaded
shader: unshaded
@@ -160,8 +172,7 @@
True: { color: "#5eff5e" }
False: { color: "#990000" }
- type: Appearance
visuals:
- type: PipeColorVisualizer
- type: PipeColorVisuals
- type: GasOutletInjector
- type: Construction
graph: GasUnary
@@ -179,8 +190,7 @@
netsync: false
sprite: Structures/Piping/Atmospherics/thermomachine.rsi
- type: Appearance
visuals:
- type: PipeColorVisualizer
- type: PipeColorVisuals
- type: Rotatable
- type: GasThermoMachine
- type: AtmosPipeColor
@@ -216,15 +226,15 @@
- type: Sprite
layers:
- state: freezer_off
map: [ "enum.ThermoMachineVisualizer+Layers.Enabled" ]
map: [ "enabled" ]
- state: pipe
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- type: Appearance
map: [ "enum.PipeVisualLayers.Pipe" ]
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: ThermoMachineVisualizer
disabledState: freezer_off
enabledState: freezer_on
enum.ThermoMachineVisuals.Enabled:
enabled:
True: { state: freezer_on }
False: { state: freezer_off }
- type: GasThermoMachine
mode: Freezer
- type: Machine
@@ -245,15 +255,15 @@
- type: Sprite
layers:
- state: heater_off
map: [ "enum.ThermoMachineVisualizer+Layers.Enabled" ]
map: [ "enabled" ]
- state: pipe
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- type: Appearance
map: [ "enum.PipeVisualLayers.Pipe" ]
- type: GenericVisualizer
visuals:
- type: PipeColorVisualizer
- type: ThermoMachineVisualizer
disabledState: heater_off
enabledState: heater_on
enum.ThermoMachineVisuals.Enabled:
enabled:
True: { state: heater_on }
False: { state: heater_off }
- type: GasThermoMachine
mode: Heater
- type: Machine