PipeHeaterComponent (#3443)

* PipeHeaterComponent

Heater rsi

Heater prototype

* Client ignore
This commit is contained in:
collinlunn
2021-02-28 04:05:10 -07:00
committed by GitHub
parent eb642c0fa9
commit 9cefe6b3f3
7 changed files with 121 additions and 0 deletions

View File

@@ -151,6 +151,7 @@ namespace Content.Client
"PressureVent",
"VolumePump",
"PressureSiphon",
"PipeHeater",
"SignalReceiver",
"SignalSwitch",
"SignalTransmitter",

View File

@@ -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
{
/// <summary>
/// Placeholder component for adjusting the temperature of gas in pipes.
/// </summary>
[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<PipeNetDeviceComponent>();
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<NodeContainerComponent>(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<PipeNode>().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;
}
}
}
}

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

View File

@@ -0,0 +1,21 @@
{
"version":1,
"size":{
"x":32,
"y":32
},
"license":"CC-BY-SA-3.0",
"copyright":"Taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da",
"states":[
{
"name":"heater",
},
{
"name":"heaterOn",
},
{
"name":"heaterPipe",
"directions":4,
}
]
}