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