SharedDoorRemoteSystem.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Content.Shared.Popups;
  2. using Content.Shared.Interaction.Events;
  3. using Content.Shared.Remotes.Components;
  4. namespace Content.Shared.Remotes.EntitySystems;
  5. public abstract class SharedDoorRemoteSystem : EntitySystem
  6. {
  7. [Dependency] protected readonly SharedPopupSystem Popup = default!;
  8. public override void Initialize()
  9. {
  10. SubscribeLocalEvent<DoorRemoteComponent, UseInHandEvent>(OnInHandActivation);
  11. }
  12. private void OnInHandActivation(Entity<DoorRemoteComponent> entity, ref UseInHandEvent args)
  13. {
  14. string switchMessageId;
  15. switch (entity.Comp.Mode)
  16. {
  17. case OperatingMode.OpenClose:
  18. entity.Comp.Mode = OperatingMode.ToggleBolts;
  19. switchMessageId = "door-remote-switch-state-toggle-bolts";
  20. break;
  21. // Skip toggle bolts mode and move on from there (to emergency access)
  22. case OperatingMode.ToggleBolts:
  23. entity.Comp.Mode = OperatingMode.ToggleEmergencyAccess;
  24. switchMessageId = "door-remote-switch-state-toggle-emergency-access";
  25. break;
  26. // Skip ToggleEmergencyAccess mode and move on from there (to door toggle)
  27. case OperatingMode.ToggleEmergencyAccess:
  28. entity.Comp.Mode = OperatingMode.OpenClose;
  29. switchMessageId = "door-remote-switch-state-open-close";
  30. break;
  31. default:
  32. throw new InvalidOperationException(
  33. $"{nameof(DoorRemoteComponent)} had invalid mode {entity.Comp.Mode}");
  34. }
  35. Dirty(entity);
  36. Popup.PopupClient(Loc.GetString(switchMessageId), entity, args.User);
  37. }
  38. }