| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using Content.Server.DeviceLinking.Events;
- using Content.Server.Power.Components;
- using Content.Server.Wires;
- using Content.Shared.Doors.Components;
- using Content.Shared.Doors.Systems;
- using Content.Shared.Interaction;
- using Content.Shared.Power;
- using Content.Shared.Wires;
- using Robust.Shared.Player;
- namespace Content.Server.Doors.Systems;
- public sealed class AirlockSystem : SharedAirlockSystem
- {
- [Dependency] private readonly WiresSystem _wiresSystem = default!;
- public override void Initialize()
- {
- base.Initialize();
- SubscribeLocalEvent<AirlockComponent, SignalReceivedEvent>(OnSignalReceived);
- SubscribeLocalEvent<AirlockComponent, PowerChangedEvent>(OnPowerChanged);
- SubscribeLocalEvent<AirlockComponent, ActivateInWorldEvent>(OnActivate, before: new[] { typeof(DoorSystem) });
- }
- private void OnSignalReceived(EntityUid uid, AirlockComponent component, ref SignalReceivedEvent args)
- {
- if (args.Port == component.AutoClosePort && component.AutoClose)
- {
- component.AutoClose = false;
- Dirty(uid, component);
- }
- }
- private void OnPowerChanged(EntityUid uid, AirlockComponent component, ref PowerChangedEvent args)
- {
- component.Powered = args.Powered;
- Dirty(uid, component);
- if (!TryComp(uid, out DoorComponent? door))
- return;
- if (!args.Powered)
- {
- // stop any scheduled auto-closing
- if (door.State == DoorState.Open)
- DoorSystem.SetNextStateChange(uid, null);
- }
- else
- {
- UpdateAutoClose(uid, door: door);
- }
- }
- private void OnActivate(EntityUid uid, AirlockComponent component, ActivateInWorldEvent args)
- {
- if (args.Handled || !args.Complex)
- return;
- if (TryComp<WiresPanelComponent>(uid, out var panel) &&
- panel.Open &&
- TryComp<ActorComponent>(args.User, out var actor))
- {
- if (TryComp<WiresPanelSecurityComponent>(uid, out var wiresPanelSecurity) &&
- !wiresPanelSecurity.WiresAccessible)
- return;
- _wiresSystem.OpenUserInterface(uid, actor.PlayerSession);
- args.Handled = true;
- return;
- }
- if (component.KeepOpenIfClicked && component.AutoClose)
- {
- // Disable auto close
- component.AutoClose = false;
- Dirty(uid, component);
- }
- }
- }
|