diff --git a/Content.Shared/_DV/DeviceLinking/Components/PowerTogglePortComponent.cs b/Content.Shared/_DV/DeviceLinking/Components/PowerTogglePortComponent.cs new file mode 100644 index 0000000000..ecdc97fad4 --- /dev/null +++ b/Content.Shared/_DV/DeviceLinking/Components/PowerTogglePortComponent.cs @@ -0,0 +1,15 @@ +using Content.Shared.DeviceLinking; +using Robust.Shared.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; +using Content.Shared._DV.DeviceLinking.Systems; + +namespace Content.Shared._DV.DeviceLinking.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(PowerTogglePortSystem))] +public sealed partial class PowerTogglePortComponent : Component +{ + [DataField, AutoNetworkedField] + public ProtoId PowerTogglePort = "PowerToggle"; +} diff --git a/Content.Shared/_DV/DeviceLinking/Systems/PowerTogglePortSystem.cs b/Content.Shared/_DV/DeviceLinking/Systems/PowerTogglePortSystem.cs new file mode 100644 index 0000000000..1b1cf6e7eb --- /dev/null +++ b/Content.Shared/_DV/DeviceLinking/Systems/PowerTogglePortSystem.cs @@ -0,0 +1,29 @@ +using Content.Shared.DeviceLinking.Events; +using Content.Shared.Power.EntitySystems; +using Content.Shared.Power.Components; +using Content.Shared.DeviceLinking; +using Content.Shared._DV.DeviceLinking.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared._DV.DeviceLinking.Systems; + +public sealed class PowerTogglePortSystem : EntitySystem +{ + [Dependency] private readonly SharedDeviceLinkSystem _device = default!; + + [Dependency] private readonly SharedPowerReceiverSystem _power = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnSignalReceived); + } + + private void OnSignalReceived(Entity entity, ref SignalReceivedEvent args) + { + if (args.Port == entity.Comp.PowerTogglePort) + _power.TogglePower(entity); + } + +} diff --git a/Resources/Locale/en-US/_DV/linkports/link-ports.ftl b/Resources/Locale/en-US/_DV/linkports/link-ports.ftl new file mode 100644 index 0000000000..578e98ed2a --- /dev/null +++ b/Resources/Locale/en-US/_DV/linkports/link-ports.ftl @@ -0,0 +1,3 @@ + +signal-port-name-power-toggle = Toggle Power +signal-port-description-power-toggle = A signal port, that toggles power state when it recieves a signal. diff --git a/Resources/Prototypes/_DV/DeviceLinking/sink_ports.yml b/Resources/Prototypes/_DV/DeviceLinking/sink_ports.yml new file mode 100644 index 0000000000..dcd9560d2c --- /dev/null +++ b/Resources/Prototypes/_DV/DeviceLinking/sink_ports.yml @@ -0,0 +1,4 @@ +- type: sinkPort + id: PowerToggle + name: signal-port-name-power-toggle + description: signal-port-description-power-toggle diff --git a/Resources/Prototypes/_Goobstation/Entities/Structures/Machines/robotic_arm.yml b/Resources/Prototypes/_Goobstation/Entities/Structures/Machines/robotic_arm.yml index 614258bdcb..fdda6f6b65 100644 --- a/Resources/Prototypes/_Goobstation/Entities/Structures/Machines/robotic_arm.yml +++ b/Resources/Prototypes/_Goobstation/Entities/Structures/Machines/robotic_arm.yml @@ -99,9 +99,11 @@ - type: DeviceLinkSink ports: - RoboticArmInput + - PowerToggle #DeltaV # - On # - Off # TODO: ports to disable it + - type: PowerTogglePort #DeltaV - type: DeviceLinkSource ports: - RoboticArmOutput