Add pipe coloring (#4261)

This commit is contained in:
Vera Aguilera Puerto
2021-07-12 09:59:45 +02:00
committed by GitHub
parent 6bbcf305bd
commit 077f158dda
17 changed files with 163 additions and 35 deletions

View File

@@ -4,7 +4,7 @@ using Robust.Client.GameObjects;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.Serialization.Manager.Attributes;
namespace Content.Client.Atmos.Piping namespace Content.Client.Atmos.Visualizers
{ {
[UsedImplicitly] [UsedImplicitly]
public abstract class EnabledAtmosDeviceVisualizer : AppearanceVisualizer public abstract class EnabledAtmosDeviceVisualizer : AppearanceVisualizer

View File

@@ -2,7 +2,7 @@ using System;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
using JetBrains.Annotations; using JetBrains.Annotations;
namespace Content.Client.Atmos.Piping namespace Content.Client.Atmos.Visualizers
{ {
[UsedImplicitly] [UsedImplicitly]
public class OutletInjectorVisualizer : EnabledAtmosDeviceVisualizer public class OutletInjectorVisualizer : EnabledAtmosDeviceVisualizer

View File

@@ -2,7 +2,7 @@ using System;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
using JetBrains.Annotations; using JetBrains.Annotations;
namespace Content.Client.Atmos.Piping namespace Content.Client.Atmos.Visualizers
{ {
[UsedImplicitly] [UsedImplicitly]
public class PassiveVentVisualizer : EnabledAtmosDeviceVisualizer public class PassiveVentVisualizer : EnabledAtmosDeviceVisualizer

View File

@@ -0,0 +1,30 @@
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.Maths;
namespace Content.Client.Atmos.Visualizers
{
[UsedImplicitly]
public class PipeColorVisualizer : AppearanceVisualizer
{
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
if (!component.Owner.TryGetComponent(out SpriteComponent? sprite))
return;
if (component.TryGetData(PipeColorVisuals.Color, out Color color))
{
sprite.LayerSetColor(Layers.Pipe, color);
}
}
public enum Layers : byte
{
Pipe,
}
}
}

View File

@@ -1,6 +1,7 @@
#nullable enable #nullable enable
using System; using System;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Atmos.Piping;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Client.GameObjects; using Robust.Client.GameObjects;
using Robust.Client.Graphics; using Robust.Client.Graphics;
@@ -8,10 +9,11 @@ using Robust.Client.ResourceManagement;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.IoC; using Robust.Shared.IoC;
using Robust.Shared.Log; using Robust.Shared.Log;
using Robust.Shared.Maths;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.Serialization.Manager.Attributes;
namespace Content.Client.Atmos.Piping namespace Content.Client.Atmos.Visualizers
{ {
[UsedImplicitly] [UsedImplicitly]
public class PipeConnectorVisualizer : AppearanceVisualizer, ISerializationHooks public class PipeConnectorVisualizer : AppearanceVisualizer, ISerializationHooks
@@ -62,6 +64,9 @@ namespace Content.Client.Atmos.Piping
if (!component.Owner.TryGetComponent<ISpriteComponent>(out var sprite)) if (!component.Owner.TryGetComponent<ISpriteComponent>(out var sprite))
return; return;
if (!component.TryGetData(PipeColorVisuals.Color, out Color color))
color = Color.White;
if (!component.TryGetData(PipeVisuals.VisualState, out PipeVisualState state)) if (!component.TryGetData(PipeVisuals.VisualState, out PipeVisualState state))
return; return;
@@ -72,6 +77,7 @@ namespace Content.Client.Atmos.Piping
var layer = sprite.LayerMapGet(layerKey); var layer = sprite.LayerMapGet(layerKey);
sprite.LayerSetVisible(layer, layerVisible); sprite.LayerSetVisible(layer, layerVisible);
sprite.LayerSetColor(layer, color);
} }
} }

View File

@@ -2,7 +2,7 @@ using System;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
using JetBrains.Annotations; using JetBrains.Annotations;
namespace Content.Client.Atmos.Piping namespace Content.Client.Atmos.Visualizers
{ {
[UsedImplicitly] [UsedImplicitly]
public class PressurePumpVisualizer : EnabledAtmosDeviceVisualizer public class PressurePumpVisualizer : EnabledAtmosDeviceVisualizer

View File

@@ -1,9 +1,8 @@
using Content.Shared.Atmos.Piping.Unary.Visuals; using Content.Shared.Atmos.Piping.Unary.Visuals;
using Content.Shared.Atmos.Visuals;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Client.GameObjects; using Robust.Client.GameObjects;
namespace Content.Client.Atmos.Piping namespace Content.Client.Atmos.Visualizers
{ {
[UsedImplicitly] [UsedImplicitly]
public class ScrubberVisualizer : AppearanceVisualizer public class ScrubberVisualizer : AppearanceVisualizer

View File

@@ -2,7 +2,7 @@ using System;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
using JetBrains.Annotations; using JetBrains.Annotations;
namespace Content.Client.Atmos.Piping namespace Content.Client.Atmos.Visualizers
{ {
[UsedImplicitly] [UsedImplicitly]
public class ThermoMachineVisualizer : EnabledAtmosDeviceVisualizer public class ThermoMachineVisualizer : EnabledAtmosDeviceVisualizer

View File

@@ -2,7 +2,7 @@ using Content.Shared.Atmos.Visuals;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Client.GameObjects; using Robust.Client.GameObjects;
namespace Content.Client.Atmos.Piping namespace Content.Client.Atmos.Visualizers
{ {
[UsedImplicitly] [UsedImplicitly]
public class VentPumpVisualizer : AppearanceVisualizer public class VentPumpVisualizer : AppearanceVisualizer

View File

@@ -191,6 +191,7 @@ namespace Content.Client.Entry
"GasCanisterPort", "GasCanisterPort",
"GasPort", "GasPort",
"GasPortable", "GasPortable",
"AtmosPipeColor",
"AtmosUnsafeUnanchor", "AtmosUnsafeUnanchor",
"GasMixer", "GasMixer",
"Cleanable", "Cleanable",

View File

@@ -0,0 +1,25 @@
using Content.Server.Atmos.Piping.EntitySystems;
using JetBrains.Annotations;
using Robust.Shared.GameObjects;
using Robust.Shared.Maths;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.ViewVariables;
namespace Content.Server.Atmos.Piping.Components
{
[RegisterComponent]
public class AtmosPipeColorComponent : Component
{
public override string Name => "AtmosPipeColor";
[DataField("color")]
public Color Color { get; set; } = Color.White;
[ViewVariables(VVAccess.ReadWrite), UsedImplicitly]
public Color ColorVV
{
get => Color;
set => EntitySystem.Get<AtmosPipeColorSystem>().SetColor(Owner.Uid, this, value);
}
}
}

View File

@@ -0,0 +1,45 @@
using Content.Server.Atmos.Piping.Components;
using Content.Shared.Atmos.Piping;
using Robust.Server.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.Maths;
namespace Content.Server.Atmos.Piping.EntitySystems
{
public class AtmosPipeColorSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<AtmosPipeColorComponent, ComponentStartup>(OnStartup);
SubscribeLocalEvent<AtmosPipeColorComponent, ComponentShutdown>(OnShutdown);
}
private void OnStartup(EntityUid uid, AtmosPipeColorComponent component, ComponentStartup args)
{
if (!ComponentManager.TryGetComponent(uid, out AppearanceComponent? appearance))
return;
appearance.SetData(PipeColorVisuals.Color, component.Color);
}
private void OnShutdown(EntityUid uid, AtmosPipeColorComponent component, ComponentShutdown args)
{
if (!ComponentManager.TryGetComponent(uid, out AppearanceComponent? appearance))
return;
appearance.SetData(PipeColorVisuals.Color, Color.White);
}
public void SetColor(EntityUid uid, AtmosPipeColorComponent component, Color color)
{
component.Color = color;
if (!ComponentManager.TryGetComponent(uid, out AppearanceComponent? appearance))
return;
appearance.SetData(PipeColorVisuals.Color, color);
}
}
}

View File

@@ -0,0 +1,11 @@
using System;
using Robust.Shared.Serialization;
namespace Content.Shared.Atmos.Piping
{
[Serializable, NetSerializable]
public enum PipeColorVisuals
{
Color,
}
}

View File

@@ -31,10 +31,12 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: pumpPressure - state: pumpPressure
- type: Appearance - type: Appearance
visuals: visuals:
- type: PipeConnectorVisualizer - type: PipeConnectorVisualizer
- type: PipeColorVisualizer
- type: PressurePumpVisualizer - type: PressurePumpVisualizer
enabledState: pumpPressureOn enabledState: pumpPressureOn
- type: GasPressurePump - type: GasPressurePump
@@ -53,10 +55,8 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: pumpVolume - state: pumpVolume
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasVolumePump - type: GasVolumePump
- type: entity - type: entity
@@ -73,10 +73,8 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: pumpPassiveGate - state: pumpPassiveGate
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasPassiveGate - type: GasPassiveGate
- type: entity - type: entity
@@ -94,10 +92,8 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeStraight state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: pumpPassiveGate - state: pumpPassiveGate
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasValve - type: GasValve
- type: NodeContainer - type: NodeContainer
nodes: nodes:
@@ -120,10 +116,8 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: gasCanisterPort - state: gasCanisterPort
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasPort - type: GasPort
- type: NodeContainer - type: NodeContainer
nodes: nodes:

View File

@@ -29,8 +29,10 @@
- type: Appearance - type: Appearance
visuals: visuals:
- type: PipeConnectorVisualizer - type: PipeConnectorVisualizer
- type: PipeColorVisualizer
- type: NodeContainer - type: NodeContainer
- type: AtmosUnsafeUnanchor - type: AtmosUnsafeUnanchor
- type: AtmosPipeColor
#Note: The PipeDirection of the PipeNode should be the south-facing version, because the entity starts at an angle of 0 (south) #Note: The PipeDirection of the PipeNode should be the south-facing version, because the entity starts at an angle of 0 (south)
@@ -46,7 +48,9 @@
nodeGroupID: Pipe nodeGroupID: Pipe
pipeDirection: South pipeDirection: South
- type: Sprite - type: Sprite
state: pipeHalf layers:
- state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- type: entity - type: entity
parent: GasPipeBase parent: GasPipeBase
@@ -60,7 +64,9 @@
nodeGroupID: Pipe nodeGroupID: Pipe
pipeDirection: Longitudinal pipeDirection: Longitudinal
- type: Sprite - type: Sprite
state: pipeStraight layers:
- state: pipeStraight
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- type: entity - type: entity
parent: GasPipeBase parent: GasPipeBase
@@ -74,7 +80,9 @@
nodeGroupID: Pipe nodeGroupID: Pipe
pipeDirection: SWBend pipeDirection: SWBend
- type: Sprite - type: Sprite
state: pipeBend layers:
- state: pipeBend
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- type: entity - type: entity
parent: GasPipeBase parent: GasPipeBase
@@ -88,7 +96,9 @@
nodeGroupID: Pipe nodeGroupID: Pipe
pipeDirection: TSouth pipeDirection: TSouth
- type: Sprite - type: Sprite
state: pipeTJunction layers:
- state: pipeTJunction
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- type: entity - type: entity
parent: GasPipeBase parent: GasPipeBase
@@ -102,4 +112,6 @@
nodeGroupID: Pipe nodeGroupID: Pipe
pipeDirection: Fourway pipeDirection: Fourway
- type: Sprite - type: Sprite
state: pipeFourway layers:
- state: pipeFourway
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]

View File

@@ -36,10 +36,8 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeTJunction state: pipeTJunction
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: gasFilter - state: gasFilter
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasFilter - type: GasFilter
- type: entity - type: entity
@@ -57,10 +55,8 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeTJunction state: pipeTJunction
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: gasFilter - state: gasFilter
- type: Appearance
visuals:
- type: PipeConnectorVisualizer
- type: GasMixer - type: GasMixer
inletOne: inlet inletOne: inlet
inletTwo: filter inletTwo: filter

View File

@@ -27,11 +27,13 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: vent_off - state: vent_off
map: ["enum.VentVisualLayers.Vent"] map: ["enum.VentVisualLayers.Vent"]
- type: Appearance - type: Appearance
visuals: visuals:
- type: PipeConnectorVisualizer - type: PipeConnectorVisualizer
- type: PipeColorVisualizer
- type: VentPumpVisualizer - type: VentPumpVisualizer
- type: GasVentPump - type: GasVentPump
@@ -50,10 +52,12 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: vent_off - state: vent_off
- type: Appearance - type: Appearance
visuals: visuals:
- type: PipeConnectorVisualizer - type: PipeConnectorVisualizer
- type: PipeColorVisualizer
- type: GasPassiveVent - type: GasPassiveVent
- type: entity - type: entity
@@ -70,11 +74,13 @@
layers: layers:
- sprite: Constructible/Atmos/pipe.rsi - sprite: Constructible/Atmos/pipe.rsi
state: pipeHalf state: pipeHalf
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- state: scrub_off - state: scrub_off
map: ["enum.ScrubberVisualLayers.Scrubber"] map: ["enum.ScrubberVisualLayers.Scrubber"]
- type: Appearance - type: Appearance
visuals: visuals:
- type: PipeConnectorVisualizer - type: PipeConnectorVisualizer
- type: PipeColorVisualizer
- type: ScrubberVisualizer - type: ScrubberVisualizer
- type: AtmosDevice - type: AtmosDevice
- type: GasVentScrubber - type: GasVentScrubber
@@ -91,9 +97,10 @@
# TODO ATMOS: Actual sprite for this. # TODO ATMOS: Actual sprite for this.
- type: Sprite - type: Sprite
netsync: false netsync: false
sprite: Constructible/Atmos/pipe.rsi layers:
state: pipeHalf - state: pipeHalf
sprite: Constructible/Atmos/pipe.rsi
map: [ "enum.PipeColorVisualizer+Layers.Pipe" ]
- type: entity - type: entity
parent: GasUnaryBase parent: GasUnaryBase
@@ -125,6 +132,7 @@
- state: pipe - state: pipe
- type: Appearance - type: Appearance
visuals: visuals:
- type: PipeConnectorVisualizer
- type: ThermoMachineVisualizer - type: ThermoMachineVisualizer
enabledState: freezer_on enabledState: freezer_on
- type: GasThermoMachine - type: GasThermoMachine
@@ -144,6 +152,7 @@
- state: pipe - state: pipe
- type: Appearance - type: Appearance
visuals: visuals:
- type: PipeConnectorVisualizer
- type: ThermoMachineVisualizer - type: ThermoMachineVisualizer
enabledState: heater_on enabledState: heater_on
- type: GasThermoMachine - type: GasThermoMachine