mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-09 10:21:18 +03:00
* Add bolt signal to door outputs * Update DoorSignalControlSystem.cs * fix test --------- Co-authored-by: Pok245 <113675512+Pok27@users.noreply.github.com>
77 lines
2.5 KiB
C#
77 lines
2.5 KiB
C#
using Content.Server.DeviceLinking.Systems;
|
|
using Content.Server.Shuttles.Components;
|
|
using Content.Server.Shuttles.Events;
|
|
using Content.Shared.DeviceLinking;
|
|
using Content.Shared.DeviceLinking.Events;
|
|
|
|
namespace Content.Server.Shuttles.Systems;
|
|
|
|
public sealed partial class DockingSignalControlSystem : EntitySystem
|
|
{
|
|
[Dependency] private DeviceLinkSystem _deviceLinkSystem = default!;
|
|
[Dependency] private DockingSystem _dockingSystem = default!;
|
|
|
|
[SubscribeLocalEvent]
|
|
private void OnMapInit(Entity<DockingSignalControlComponent> ent, ref MapInitEvent args)
|
|
{
|
|
_deviceLinkSystem.EnsureSourcePorts(ent, ent.Comp.DockStatusSignalPort);
|
|
_deviceLinkSystem.EnsureSinkPorts(ent, ent.Comp.DockTogglePort);
|
|
}
|
|
|
|
[SubscribeLocalEvent]
|
|
private void OnDocked(Entity<DockingSignalControlComponent> ent, ref DockEvent args)
|
|
{
|
|
_deviceLinkSystem.SendSignal(ent.Owner, ent.Comp.DockStatusSignalPort, signal: true);
|
|
}
|
|
|
|
[SubscribeLocalEvent]
|
|
private void OnUndocked(Entity<DockingSignalControlComponent> ent, ref UndockEvent args)
|
|
{
|
|
_deviceLinkSystem.SendSignal(ent.Owner, ent.Comp.DockStatusSignalPort, signal: false);
|
|
}
|
|
|
|
[SubscribeLocalEvent]
|
|
private void OnSignalReceived(Entity<DockingSignalControlComponent> ent, ref SignalReceivedEvent args)
|
|
{
|
|
if (args.Port != ent.Comp.DockTogglePort)
|
|
return;
|
|
|
|
ToggleDock(ent, SignalState.Momentary);
|
|
}
|
|
|
|
[SubscribeLocalEvent]
|
|
private void OnSignalReceived(Entity<DockingSignalControlComponent> ent, ref SignalReceivedEvent<LogicStatePayload> args)
|
|
{
|
|
if (args.Port != ent.Comp.DockTogglePort)
|
|
return;
|
|
|
|
ToggleDock(ent, args.Data.State);
|
|
}
|
|
|
|
private void ToggleDock(Entity<DockingSignalControlComponent> ent, SignalState state)
|
|
{
|
|
if (!TryComp<DockingComponent>(ent, out var dock))
|
|
return;
|
|
|
|
var shouldDock = state == SignalState.High || state == SignalState.Momentary && !dock.Docked;
|
|
if (shouldDock)
|
|
{
|
|
var query = AllEntityQuery<DockingComponent>();
|
|
while (query.MoveNext(out var dockingUid, out var docking))
|
|
{
|
|
if (!_dockingSystem.CanDock((ent, dock), (dockingUid, docking)))
|
|
continue;
|
|
|
|
_dockingSystem.Dock((ent, dock), (dockingUid, docking));
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!_dockingSystem.CanUndock((ent, dock)))
|
|
return;
|
|
|
|
_dockingSystem.Undock((ent, dock));
|
|
}
|
|
}
|
|
}
|