1
0

AdminFaxEui.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using Content.Server.Construction.Conditions;
  2. using Content.Server.DeviceNetwork.Components;
  3. using Content.Server.EUI;
  4. using Content.Shared.Eui;
  5. using Content.Shared.Fax.Components;
  6. using Content.Shared.Fax;
  7. using Content.Shared.Follower;
  8. using Content.Shared.Ghost;
  9. using Content.Shared.Paper;
  10. namespace Content.Server.Fax.AdminUI;
  11. public sealed class AdminFaxEui : BaseEui
  12. {
  13. [Dependency] private readonly IEntityManager _entityManager = default!;
  14. private readonly FaxSystem _faxSystem;
  15. private readonly FollowerSystem _followerSystem;
  16. public AdminFaxEui()
  17. {
  18. IoCManager.InjectDependencies(this);
  19. _faxSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<FaxSystem>();
  20. _followerSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<FollowerSystem>();
  21. }
  22. public override void Opened()
  23. {
  24. StateDirty();
  25. }
  26. public override AdminFaxEuiState GetNewState()
  27. {
  28. var faxes = _entityManager.EntityQueryEnumerator<FaxMachineComponent, DeviceNetworkComponent>();
  29. var entries = new List<AdminFaxEntry>();
  30. while (faxes.MoveNext(out var uid, out var fax, out var device))
  31. {
  32. entries.Add(new AdminFaxEntry(_entityManager.GetNetEntity(uid), fax.FaxName, device.Address));
  33. }
  34. return new AdminFaxEuiState(entries);
  35. }
  36. public override void HandleMessage(EuiMessageBase msg)
  37. {
  38. base.HandleMessage(msg);
  39. switch (msg)
  40. {
  41. case AdminFaxEuiMsg.Follow followData:
  42. {
  43. if (Player.AttachedEntity == null ||
  44. !_entityManager.HasComponent<GhostComponent>(Player.AttachedEntity.Value))
  45. return;
  46. _followerSystem.StartFollowingEntity(Player.AttachedEntity.Value, _entityManager.GetEntity(followData.TargetFax));
  47. break;
  48. }
  49. case AdminFaxEuiMsg.Send sendData:
  50. {
  51. var printout = new FaxPrintout(sendData.Content, sendData.Title, null, null, sendData.StampState,
  52. new() { new StampDisplayInfo { StampedName = sendData.From, StampedColor = sendData.StampColor } },
  53. locked: sendData.Locked);
  54. _faxSystem.Receive(_entityManager.GetEntity(sendData.Target), printout);
  55. break;
  56. }
  57. }
  58. }
  59. }