From 9cefe6b3f32f2f6acbea7d4a648ea01c1ec49bb0 Mon Sep 17 00:00:00 2001 From: collinlunn <60152240+collinlunn@users.noreply.github.com> Date: Sun, 28 Feb 2021 04:05:10 -0700 Subject: [PATCH] PipeHeaterComponent (#3443) * PipeHeaterComponent Heater rsi Heater prototype * Client ignore --- Content.Client/IgnoredComponents.cs | 1 + .../Atmos/Piping/PipeHeaterComponent.cs | 66 ++++++++++++++++++ .../Entities/Constructible/Piping/heaters.yml | 33 +++++++++ .../Constructible/Atmos/heater.rsi/heater.png | Bin 0 -> 1624 bytes .../Atmos/heater.rsi/heaterOn.png | Bin 0 -> 2829 bytes .../Atmos/heater.rsi/heaterPipe.png | Bin 0 -> 321 bytes .../Constructible/Atmos/heater.rsi/meta.json | 21 ++++++ 7 files changed, 121 insertions(+) create mode 100644 Content.Server/GameObjects/Components/Atmos/Piping/PipeHeaterComponent.cs create mode 100644 Resources/Prototypes/Entities/Constructible/Piping/heaters.yml create mode 100644 Resources/Textures/Constructible/Atmos/heater.rsi/heater.png create mode 100644 Resources/Textures/Constructible/Atmos/heater.rsi/heaterOn.png create mode 100644 Resources/Textures/Constructible/Atmos/heater.rsi/heaterPipe.png create mode 100644 Resources/Textures/Constructible/Atmos/heater.rsi/meta.json diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index abfaadcbe5..61a47e73c6 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -151,6 +151,7 @@ namespace Content.Client "PressureVent", "VolumePump", "PressureSiphon", + "PipeHeater", "SignalReceiver", "SignalSwitch", "SignalTransmitter", diff --git a/Content.Server/GameObjects/Components/Atmos/Piping/PipeHeaterComponent.cs b/Content.Server/GameObjects/Components/Atmos/Piping/PipeHeaterComponent.cs new file mode 100644 index 0000000000..234c9ac7cc --- /dev/null +++ b/Content.Server/GameObjects/Components/Atmos/Piping/PipeHeaterComponent.cs @@ -0,0 +1,66 @@ +#nullable enable +using Content.Server.GameObjects.Components.NodeContainer; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using Robust.Shared.GameObjects; +using Robust.Shared.Log; +using Robust.Shared.ViewVariables; +using System.Linq; + +namespace Content.Server.GameObjects.Components.Atmos.Piping +{ + /// + /// Placeholder component for adjusting the temperature of gas in pipes. + /// + [RegisterComponent] + public class PipeHeaterComponent : Component + { + public override string Name => "PipeHeater"; + + [ViewVariables] + private PipeNode? _heaterPipe; + + [ViewVariables(VVAccess.ReadWrite)] + private float TargetTemperature { get; set; } + + public override void Initialize() + { + base.Initialize(); + Owner.EnsureComponentWarn(); + SetPipe(); + } + + public override void HandleMessage(ComponentMessage message, IComponent? component) + { + base.HandleMessage(message, component); + switch (message) + { + case PipeNetUpdateMessage: + Update(); + break; + } + } + + public void Update() + { + if (_heaterPipe == null) + return; + + _heaterPipe.Air.Temperature = TargetTemperature; + } + + private void SetPipe() + { + if (!Owner.TryGetComponent(out var container)) + { + Logger.Error($"{nameof(PipeHeaterComponent)} on {Owner?.Prototype?.ID}, Uid {Owner?.Uid} did not have a {nameof(NodeContainerComponent)}."); + return; + } + _heaterPipe = container.Nodes.OfType().FirstOrDefault(); + if (_heaterPipe == null) + { + Logger.Error($"{nameof(PipeHeaterComponent)} on {Owner?.Prototype?.ID}, Uid {Owner?.Uid} could not find compatible {nameof(PipeNode)}s on its {nameof(NodeContainerComponent)}."); + return; + } + } + } +} diff --git a/Resources/Prototypes/Entities/Constructible/Piping/heaters.yml b/Resources/Prototypes/Entities/Constructible/Piping/heaters.yml new file mode 100644 index 0000000000..d71bff1d12 --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Piping/heaters.yml @@ -0,0 +1,33 @@ +- type: entity + id: Heater + name: Heater + description: Heats gas. + placement: + mode: SnapgridCenter + components: + - type: Clickable + - type: InteractionOutline + - type: Physics + - type: SnapGrid + offset: Center + - type: Damageable + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Sprite + netsync: false + sprite: Constructible/Atmos/heater.rsi + layers: + - state: heater + - state: heaterPipe + - type: NodeContainer + nodes: + - !type:PipeNode + nodeGroupID: Pipe + pipeDirection: East + - type: PipeHeater \ No newline at end of file diff --git a/Resources/Textures/Constructible/Atmos/heater.rsi/heater.png b/Resources/Textures/Constructible/Atmos/heater.rsi/heater.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed5ae46f91c2ce7a8aa4bc36249804788238eb5 GIT binary patch literal 1624 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