From efc9d93c2f356ee9e2ac975deae8e078cce51499 Mon Sep 17 00:00:00 2001
From: deltanedas <39013340+deltanedas@users.noreply.github.com>
Date: Tue, 14 Nov 2023 23:30:43 +0000
Subject: [PATCH] signal router (#20802)
* add signal router sprite
* DisposalSignalRouter logic
* add disposal signal router
* add disposal signal router
* how did it work without this
* death
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
---
.../DisposalSignalRouterComponent.cs | 36 +++++++++
.../Systems/DisposalSignalRouterSystem.cs | 52 ++++++++++++
.../Structures/Piping/Disposal/pipes.yml | 60 ++++++++++++++
.../Graphs/utilities/disposal_pipes.yml | 48 ++++++++++-
.../Recipes/Construction/utilities.yml | 31 +++++++
.../Structures/Piping/disposal.rsi/meta.json | 76 +++++++++++++++++-
.../signal-router-flipped-free.png | Bin 0 -> 5020 bytes
.../disposal.rsi/signal-router-flipped.png | Bin 0 -> 5608 bytes
.../disposal.rsi/signal-router-free.png | Bin 0 -> 5017 bytes
.../Piping/disposal.rsi/signal-router.png | Bin 0 -> 5645 bytes
10 files changed, 300 insertions(+), 3 deletions(-)
create mode 100644 Content.Server/Disposal/Tube/Components/DisposalSignalRouterComponent.cs
create mode 100644 Content.Server/Disposal/Tube/Systems/DisposalSignalRouterSystem.cs
create mode 100644 Resources/Textures/Structures/Piping/disposal.rsi/signal-router-flipped-free.png
create mode 100644 Resources/Textures/Structures/Piping/disposal.rsi/signal-router-flipped.png
create mode 100644 Resources/Textures/Structures/Piping/disposal.rsi/signal-router-free.png
create mode 100644 Resources/Textures/Structures/Piping/disposal.rsi/signal-router.png
diff --git a/Content.Server/Disposal/Tube/Components/DisposalSignalRouterComponent.cs b/Content.Server/Disposal/Tube/Components/DisposalSignalRouterComponent.cs
new file mode 100644
index 0000000000..b4ef81d898
--- /dev/null
+++ b/Content.Server/Disposal/Tube/Components/DisposalSignalRouterComponent.cs
@@ -0,0 +1,36 @@
+using Content.Server.Disposal.Tube.Systems;
+using Content.Shared.DeviceLinking;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Disposal.Tube.Components;
+
+///
+/// Requires to function.
+///
+[RegisterComponent, Access(typeof(DisposalSignalRouterSystem))]
+public sealed partial class DisposalSignalRouterComponent : Component
+{
+ ///
+ /// Whether to route items to the side or not.
+ ///
+ [DataField]
+ public bool Routing;
+
+ ///
+ /// Port that sets the router to send items to the side.
+ ///
+ [DataField]
+ public ProtoId OnPort = "On";
+
+ ///
+ /// Port that sets the router to send items ahead.
+ ///
+ [DataField]
+ public ProtoId OffPort = "Off";
+
+ ///
+ /// Port that toggles the router between sending items to the side and ahead.
+ ///
+ [DataField]
+ public ProtoId TogglePort = "Toggle";
+}
diff --git a/Content.Server/Disposal/Tube/Systems/DisposalSignalRouterSystem.cs b/Content.Server/Disposal/Tube/Systems/DisposalSignalRouterSystem.cs
new file mode 100644
index 0000000000..3a9fdbbf8d
--- /dev/null
+++ b/Content.Server/Disposal/Tube/Systems/DisposalSignalRouterSystem.cs
@@ -0,0 +1,52 @@
+using Content.Server.DeviceLinking.Events;
+using Content.Server.DeviceLinking.Systems;
+using Content.Server.Disposal.Tube;
+using Content.Server.Disposal.Tube.Components;
+
+namespace Content.Server.Disposal.Tube.Systems;
+
+///
+/// Handles signals and the routing get next direction event.
+///
+public sealed class DisposalSignalRouterSystem : EntitySystem
+{
+ [Dependency] private readonly DeviceLinkSystem _deviceLink = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnInit);
+ SubscribeLocalEvent(OnSignalReceived);
+ SubscribeLocalEvent(OnGetNextDirection, after: new[] { typeof(DisposalTubeSystem) });
+ }
+
+ private void OnInit(EntityUid uid, DisposalSignalRouterComponent comp, ComponentInit args)
+ {
+ _deviceLink.EnsureSinkPorts(uid, comp.OnPort, comp.OffPort, comp.TogglePort);
+ }
+
+ private void OnSignalReceived(EntityUid uid, DisposalSignalRouterComponent comp, ref SignalReceivedEvent args)
+ {
+ // TogglePort flips it
+ // OnPort sets it to true
+ // OffPort sets it to false
+ comp.Routing = args.Port == comp.TogglePort
+ ? !comp.Routing
+ : args.Port == comp.OnPort;
+ }
+
+ private void OnGetNextDirection(EntityUid uid, DisposalSignalRouterComponent comp, ref GetDisposalsNextDirectionEvent args)
+ {
+ if (!comp.Routing)
+ {
+ args.Next = Transform(uid).LocalRotation.GetDir();
+ return;
+ }
+
+ // use the junction side direction when a tag matches
+ var ev = new GetDisposalsConnectableDirectionsEvent();
+ RaiseLocalEvent(uid, ref ev);
+ args.Next = ev.Connectable[1];
+ }
+}
diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml
index 9e3780a6da..d4b7c1d3c9 100644
--- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml
+++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml
@@ -426,3 +426,63 @@
- type: Construction
graph: DisposalPipe
node: bend
+
+- type: entity
+ parent: DisposalJunction
+ id: DisposalSignalRouter
+ name: disposal signal router
+ description: A signal-controlled three-way router.
+ components:
+ - type: Sprite
+ drawdepth: ThickPipe
+ layers:
+ - map: [ "pipe" ]
+ state: signal-router-free
+ - type: DisposalTube
+ containerId: DisposalSignalRouter
+ - type: DisposalSignalRouter
+ - type: DeviceLinkSink
+ ports:
+ - On
+ - Off
+ - Toggle
+ - type: DeviceNetwork
+ deviceNetId: Wireless
+ receiveFrequencyId: BasicDevice
+ - type: WirelessNetworkConnection
+ range: 200
+ - type: ContainerContainer
+ containers:
+ DisposalSignalRouter: !type:Container
+ - type: GenericVisualizer
+ visuals:
+ enum.DisposalTubeVisuals.VisualState:
+ pipe:
+ Free: { state: signal-router-free }
+ Anchored: { state: signal-router }
+ - type: Flippable
+ mirrorEntity: DisposalSignalRouterFlipped
+ - type: Construction
+ graph: DisposalPipe
+ node: signal_router
+
+- type: entity
+ parent: DisposalSignalRouter
+ id: DisposalSignalRouterFlipped
+ suffix: flipped
+ components:
+ - type: Sprite
+ layers:
+ - map: [ "pipe" ]
+ state: signal-router-flipped-free
+ - type: DisposalJunction
+ degrees:
+ - 0
+ - 90
+ - 180
+ - type: GenericVisualizer
+ visuals:
+ enum.DisposalTubeVisuals.VisualState:
+ pipe:
+ Free: { state: signal-router-flipped-free }
+ Anchored: { state: signal-router-flipped }
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/disposal_pipes.yml b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/disposal_pipes.yml
index b626105532..1b3aa3105b 100644
--- a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/disposal_pipes.yml
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/disposal_pipes.yml
@@ -51,6 +51,23 @@
- material: Steel
amount: 2
doAfter: 1
+ # DisposalSignalRouter
+ - to: signal_router
+ steps:
+ - material: Steel
+ amount: 2
+ doAfter: 1
+ - material: Cable
+ amount: 1
+ doAfter: 1
+ - to: signal_router_flipped
+ steps:
+ - material: Steel
+ amount: 2
+ doAfter: 1
+ - material: Cable
+ amount: 1
+ doAfter: 1
- node: broken
entity: DisposalPipeBroken
edges:
@@ -187,4 +204,33 @@
- !type:DeleteEntity
steps:
- tool: Welding
- doAfter: 1
\ No newline at end of file
+ doAfter: 1
+ # DisposalRouter
+ - node: signal_router
+ entity: DisposalSignalRouter
+ edges:
+ - to: start
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetSteel1
+ amount: 2
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ - !type:DeleteEntity
+ steps:
+ - tool: Welding
+ doAfter: 1
+ - node: signal_router_flipped
+ entity: DisposalSignalRouterFlipped
+ edges:
+ - to: start
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetSteel1
+ amount: 2
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ - !type:DeleteEntity
+ steps:
+ - tool: Welding
+ doAfter: 1
diff --git a/Resources/Prototypes/Recipes/Construction/utilities.yml b/Resources/Prototypes/Recipes/Construction/utilities.yml
index d1dac1d1b0..5bd28f9b5b 100644
--- a/Resources/Prototypes/Recipes/Construction/utilities.yml
+++ b/Resources/Prototypes/Recipes/Construction/utilities.yml
@@ -242,6 +242,37 @@
state: conpipe-j2s
mirror: DisposalRouter
+- type: construction
+ name: disposal signal router
+ description: A signal-controlled three-way router.
+ id: DisposalSignalRouter
+ graph: DisposalPipe
+ startNode: start
+ targetNode: signal_router
+ category: construction-category-utilities
+ placementMode: SnapgridCenter
+ canBuildInImpassable: false
+ icon:
+ sprite: Structures/Piping/disposal.rsi
+ state: signal-router-free
+ mirror: DisposalSignalRouterFlipped
+
+- type: construction
+ hide: true
+ name: disposal signal router
+ description: A signal-controlled three-way router.
+ id: DisposalSignalRouterFlipped
+ graph: DisposalPipe
+ startNode: start
+ targetNode: signal_router_flipped
+ category: construction-category-utilities
+ placementMode: SnapgridCenter
+ canBuildInImpassable: false
+ icon:
+ sprite: Structures/Piping/disposal.rsi
+ state: signal-router-flipped-free
+ mirror: DisposalSignalRouter
+
- type: construction
name: disposal junction
description: A three-way junction. The arrow indicates where items exit.
diff --git a/Resources/Textures/Structures/Piping/disposal.rsi/meta.json b/Resources/Textures/Structures/Piping/disposal.rsi/meta.json
index fd0ed2ac25..87655b6b86 100644
--- a/Resources/Textures/Structures/Piping/disposal.rsi/meta.json
+++ b/Resources/Textures/Structures/Piping/disposal.rsi/meta.json
@@ -5,7 +5,7 @@
"y": 32
},
"license": "CC-BY-SA-3.0",
- "copyright": "https://github.com/discordia-space/CEV-Eris/blob/bbe32606902c90f5290b57d905a3f31b84dc6d7d/icons/obj/pipes/disposal.dmi and modified by DrSmugleaf",
+ "copyright": "https://github.com/discordia-space/CEV-Eris/blob/bbe32606902c90f5290b57d905a3f31b84dc6d7d/icons/obj/pipes/disposal.dmi and modified by DrSmugleaf. Signal router sprites based on normal router modified by deltanedas (github).",
"states": [
{
"name": "condisposal",
@@ -827,6 +827,78 @@
1.0
]
]
+ },
+ {
+ "name": "signal-router",
+ "directions": 4,
+ "delays": [
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "signal-router-free",
+ "directions": 4,
+ "delays": [
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "signal-router-flipped",
+ "directions": 4,
+ "delays": [
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ]
+ ]
+ },
+ {
+ "name": "signal-router-flipped-free",
+ "directions": 4,
+ "delays": [
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ],
+ [
+ 1.0
+ ]
+ ]
}
]
-}
\ No newline at end of file
+}
diff --git a/Resources/Textures/Structures/Piping/disposal.rsi/signal-router-flipped-free.png b/Resources/Textures/Structures/Piping/disposal.rsi/signal-router-flipped-free.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8f27f87317a2c4c093b678a62d14b7ea5fae614
GIT binary patch
literal 5020
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
literal 0
HcmV?d00001