add signal valve (#14830)
Co-authored-by: deltanedas <@deltanedas:kde.org>
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
using Content.Server.Atmos.Piping.Binary.EntitySystems;
|
||||||
|
using Content.Shared.MachineLinking;
|
||||||
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||||
|
|
||||||
|
namespace Content.Server.Atmos.Piping.Binary.Components;
|
||||||
|
|
||||||
|
[RegisterComponent, Access(typeof(SignalControlledValveSystem))]
|
||||||
|
public sealed class SignalControlledValveComponent : Component
|
||||||
|
{
|
||||||
|
[DataField("openPort", customTypeSerializer: typeof(PrototypeIdSerializer<ReceiverPortPrototype>))]
|
||||||
|
public string OpenPort = "Open";
|
||||||
|
|
||||||
|
[DataField("closePort", customTypeSerializer: typeof(PrototypeIdSerializer<ReceiverPortPrototype>))]
|
||||||
|
public string ClosePort = "Close";
|
||||||
|
|
||||||
|
[DataField("togglePort", customTypeSerializer: typeof(PrototypeIdSerializer<ReceiverPortPrototype>))]
|
||||||
|
public string TogglePort = "Toggle";
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
using Content.Server.Atmos.Piping.Binary.Components;
|
||||||
|
using Content.Server.MachineLinking.Events;
|
||||||
|
using Content.Server.MachineLinking.System;
|
||||||
|
|
||||||
|
namespace Content.Server.Atmos.Piping.Binary.EntitySystems;
|
||||||
|
|
||||||
|
public sealed class SignalControlledValveSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly SignalLinkerSystem _signal = default!;
|
||||||
|
[Dependency] private readonly GasValveSystem _valve = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<SignalControlledValveComponent, ComponentInit>(OnInit);
|
||||||
|
SubscribeLocalEvent<SignalControlledValveComponent, SignalReceivedEvent>(OnSignalReceived);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnInit(EntityUid uid, SignalControlledValveComponent comp, ComponentInit args)
|
||||||
|
{
|
||||||
|
_signal.EnsureReceiverPorts(uid, comp.OpenPort, comp.ClosePort, comp.TogglePort);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSignalReceived(EntityUid uid, SignalControlledValveComponent comp, SignalReceivedEvent args)
|
||||||
|
{
|
||||||
|
if (!TryComp<GasValveComponent>(uid, out var valve))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (args.Port == comp.OpenPort)
|
||||||
|
{
|
||||||
|
_valve.Set(uid, valve, true);
|
||||||
|
}
|
||||||
|
else if (args.Port == comp.ClosePort)
|
||||||
|
{
|
||||||
|
_valve.Set(uid, valve, false);
|
||||||
|
}
|
||||||
|
else if (args.Port == comp.TogglePort)
|
||||||
|
{
|
||||||
|
_valve.Toggle(uid, valve);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -181,6 +181,60 @@
|
|||||||
sound:
|
sound:
|
||||||
path: /Audio/Ambience/Objects/gas_hiss.ogg
|
path: /Audio/Ambience/Objects/gas_hiss.ogg
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: GasBinaryBase
|
||||||
|
id: SignalControlledValve
|
||||||
|
name: signal valve
|
||||||
|
description: A pipe with a valve that can be controlled with signals.
|
||||||
|
placement:
|
||||||
|
mode: SnapgridCenter
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
netsync: false
|
||||||
|
sprite: Structures/Piping/Atmospherics/pump.rsi
|
||||||
|
layers:
|
||||||
|
- sprite: Structures/Piping/Atmospherics/pipe.rsi
|
||||||
|
state: pipeStraight
|
||||||
|
map: [ "enum.PipeVisualLayers.Pipe" ]
|
||||||
|
- state: pumpSignalValve
|
||||||
|
map: [ "enum.SubfloorLayers.FirstLayer", "enabled" ]
|
||||||
|
- type: Appearance
|
||||||
|
- type: GenericVisualizer
|
||||||
|
visuals:
|
||||||
|
enum.FilterVisuals.Enabled:
|
||||||
|
enabled:
|
||||||
|
True: { state: pumpSignalValveOn }
|
||||||
|
False: { state: pumpSignalValve }
|
||||||
|
- type: PipeColorVisuals
|
||||||
|
- type: GasValve
|
||||||
|
- type: SignalControlledValve
|
||||||
|
- type: SignalReceiver
|
||||||
|
inputs:
|
||||||
|
Open: []
|
||||||
|
Close: []
|
||||||
|
Toggle: []
|
||||||
|
- type: NodeContainer
|
||||||
|
nodes:
|
||||||
|
inlet:
|
||||||
|
!type:PipeNode
|
||||||
|
nodeGroupID: Pipe
|
||||||
|
pipeDirection: North
|
||||||
|
volume: 100
|
||||||
|
outlet:
|
||||||
|
!type:PipeNode
|
||||||
|
nodeGroupID: Pipe
|
||||||
|
pipeDirection: South
|
||||||
|
volume: 100
|
||||||
|
- type: Construction
|
||||||
|
graph: GasBinary
|
||||||
|
node: signalvalve
|
||||||
|
- type: AmbientSound
|
||||||
|
enabled: false
|
||||||
|
volume: -9
|
||||||
|
range: 5
|
||||||
|
sound:
|
||||||
|
path: /Audio/Ambience/Objects/gas_hiss.ogg
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: GasBinaryBase
|
parent: GasBinaryBase
|
||||||
id: GasPort
|
id: GasPort
|
||||||
|
|||||||
@@ -28,6 +28,12 @@
|
|||||||
amount: 2
|
amount: 2
|
||||||
doAfter: 1
|
doAfter: 1
|
||||||
|
|
||||||
|
- to: signalvalve
|
||||||
|
steps:
|
||||||
|
- material: Steel
|
||||||
|
amount: 2
|
||||||
|
doAfter: 1
|
||||||
|
|
||||||
- to: port
|
- to: port
|
||||||
steps:
|
steps:
|
||||||
- material: Steel
|
- material: Steel
|
||||||
@@ -104,6 +110,22 @@
|
|||||||
- tool: Welding
|
- tool: Welding
|
||||||
doAfter: 1
|
doAfter: 1
|
||||||
|
|
||||||
|
- node: signalvalve
|
||||||
|
entity: SignalControlledValve
|
||||||
|
edges:
|
||||||
|
- to: start
|
||||||
|
conditions:
|
||||||
|
- !type:EntityAnchored
|
||||||
|
anchored: false
|
||||||
|
completed:
|
||||||
|
- !type:SpawnPrototype
|
||||||
|
prototype: SheetSteel1
|
||||||
|
amount: 2
|
||||||
|
- !type:DeleteEntity
|
||||||
|
steps:
|
||||||
|
- tool: Welding
|
||||||
|
doAfter: 1
|
||||||
|
|
||||||
- node: port
|
- node: port
|
||||||
entity: GasPort
|
entity: GasPort
|
||||||
edges:
|
edges:
|
||||||
|
|||||||
@@ -547,6 +547,27 @@
|
|||||||
conditions:
|
conditions:
|
||||||
- !type:TileNotBlocked {}
|
- !type:TileNotBlocked {}
|
||||||
|
|
||||||
|
- type: construction
|
||||||
|
id: SignalControlledValve
|
||||||
|
name: signal valve
|
||||||
|
description: Valve controlled by signal inputs.
|
||||||
|
graph: GasBinary
|
||||||
|
startNode: start
|
||||||
|
targetNode: signalvalve
|
||||||
|
category: construction-category-utilities
|
||||||
|
placementMode: SnapgridCenter
|
||||||
|
canBuildInImpassable: false
|
||||||
|
icon:
|
||||||
|
sprite: Structures/Piping/Atmospherics/pump.rsi
|
||||||
|
state: pumpSignalValve
|
||||||
|
layers:
|
||||||
|
- sprite: Structures/Piping/Atmospherics/pipe.rsi
|
||||||
|
state: pipeStraight
|
||||||
|
- sprite: Structures/Piping/Atmospherics/pump.rsi
|
||||||
|
state: pumpSignalValve
|
||||||
|
conditions:
|
||||||
|
- !type:TileNotBlocked {}
|
||||||
|
|
||||||
- type: construction
|
- type: construction
|
||||||
id: GasPort
|
id: GasPort
|
||||||
name: connector port
|
name: connector port
|
||||||
@@ -655,4 +676,4 @@
|
|||||||
canRotate: true
|
canRotate: true
|
||||||
canBuildInImpassable: true
|
canBuildInImpassable: true
|
||||||
conditions:
|
conditions:
|
||||||
- !type:WallmountCondition {}
|
- !type:WallmountCondition {}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
"y":32
|
"y":32
|
||||||
},
|
},
|
||||||
"license":"CC-BY-SA-3.0",
|
"license":"CC-BY-SA-3.0",
|
||||||
"copyright":"Taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da",
|
"copyright":"Taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da. Signal valve is a digital valve modified by deltanedas.",
|
||||||
"states":[
|
"states":[
|
||||||
{
|
{
|
||||||
"name":"pumpDigitalValve",
|
"name":"pumpDigitalValve",
|
||||||
@@ -19,6 +19,14 @@
|
|||||||
"name":"pumpManualValveOn",
|
"name":"pumpManualValveOn",
|
||||||
"directions":4
|
"directions":4
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"pumpSignalValve",
|
||||||
|
"directions":4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"pumpSignalValveOn",
|
||||||
|
"directions":4
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"pumpPassiveGate",
|
"name":"pumpPassiveGate",
|
||||||
"directions":4
|
"directions":4
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 821 B |
Binary file not shown.
|
After Width: | Height: | Size: 820 B |
Reference in New Issue
Block a user