--- /dev/null
+using Content.Shared.DeviceLinking;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Shuttles.Components;
+
+[RegisterComponent]
+public sealed partial class DockingSignalControlComponent : Component
+{
+ /// <summary>
+ /// Output port that is high while docked.
+ /// </summary>
+ [DataField]
+ public ProtoId<SourcePortPrototype> DockStatusSignalPort = "DockStatus";
+}
--- /dev/null
+using Content.Server.DeviceLinking.Systems;
+using Content.Server.Shuttles.Components;
+using Content.Server.Shuttles.Events;
+
+namespace Content.Server.Shuttles.Systems;
+
+public sealed class DockingSignalControlSystem : EntitySystem
+{
+ [Dependency] private readonly DeviceLinkSystem _deviceLinkSystem = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent<DockingSignalControlComponent, DockEvent>(OnDocked);
+ SubscribeLocalEvent<DockingSignalControlComponent, UndockEvent>(OnUndocked);
+ }
+
+ private void OnDocked(Entity<DockingSignalControlComponent> ent, ref DockEvent args)
+ {
+ _deviceLinkSystem.SendSignal(ent, ent.Comp.DockStatusSignalPort, signal: true);
+ }
+
+ private void OnUndocked(Entity<DockingSignalControlComponent> ent, ref UndockEvent args)
+ {
+ _deviceLinkSystem.SendSignal(ent, ent.Comp.DockStatusSignalPort, signal: false);
+ }
+}
signal-port-name-doorstatus = Door status
signal-port-description-doorstatus = This port is invoked with HIGH when the door opens and LOW when the door finishes closing.
+signal-port-name-dockstatus = Dock status
+signal-port-description-dockstatus = This port is invoked with HIGH when docked and LOW when undocked.
+
signal-port-name-middle = Middle
signal-port-description-middle = This port is invoked whenever the lever is moved to the neutral position.
description: signal-port-description-doorstatus
defaultLinks: [ DoorBolt ]
+- type: sourcePort
+ id: DockStatus
+ name: signal-port-name-dockstatus
+ description: signal-port-description-dockstatus
+
- type: sourcePort
id: OrderSender
name: signal-port-name-order-sender
description: Necessary for connecting two space craft together.
components:
- type: Docking
+ - type: DockingSignalControl
+ - type: DeviceLinkSource
+ ports:
+ - DoorStatus
+ - DockStatus
- type: Fixtures
fixtures:
fix1:
suffix: Glass, Docking
description: Necessary for connecting two space craft together.
components:
- - type: Docking
- type: Sprite
sprite: Structures/Doors/Airlocks/Glass/shuttle.rsi
snapCardinals: false
suffix: Glass, Docking
description: Necessary for connecting two space craft together.
components:
- - type: Docking
- type: Sprite
sprite: Structures/Doors/Airlocks/Glass/shuttle_syndicate.rsi
snapCardinals: false