1
0

AccessOverlay.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System.Text;
  2. using Content.Client.Resources;
  3. using Content.Shared.Access.Components;
  4. using Robust.Client.Graphics;
  5. using Robust.Client.ResourceManagement;
  6. using Robust.Shared.Enums;
  7. namespace Content.Client.Access;
  8. public sealed class AccessOverlay : Overlay
  9. {
  10. private const string TextFontPath = "/Fonts/NotoSans/NotoSans-Regular.ttf";
  11. private const int TextFontSize = 12;
  12. private readonly IEntityManager _entityManager;
  13. private readonly SharedTransformSystem _transformSystem;
  14. private readonly Font _font;
  15. public override OverlaySpace Space => OverlaySpace.ScreenSpace;
  16. public AccessOverlay(IEntityManager entityManager, IResourceCache resourceCache, SharedTransformSystem transformSystem)
  17. {
  18. _entityManager = entityManager;
  19. _transformSystem = transformSystem;
  20. _font = resourceCache.GetFont(TextFontPath, TextFontSize);
  21. }
  22. protected override void Draw(in OverlayDrawArgs args)
  23. {
  24. if (args.ViewportControl == null)
  25. return;
  26. var textBuffer = new StringBuilder();
  27. var query = _entityManager.EntityQueryEnumerator<AccessReaderComponent, TransformComponent>();
  28. while (query.MoveNext(out var uid, out var accessReader, out var transform))
  29. {
  30. textBuffer.Clear();
  31. var entityName = _entityManager.ToPrettyString(uid);
  32. textBuffer.AppendLine(entityName.Prototype);
  33. textBuffer.Append("UID: ");
  34. textBuffer.Append(entityName.Uid.Id);
  35. textBuffer.Append(", NUID: ");
  36. textBuffer.Append(entityName.Nuid.Id);
  37. textBuffer.AppendLine();
  38. if (!accessReader.Enabled)
  39. {
  40. textBuffer.AppendLine("-Disabled");
  41. continue;
  42. }
  43. if (accessReader.AccessLists.Count > 0)
  44. {
  45. var groupNumber = 0;
  46. foreach (var accessList in accessReader.AccessLists)
  47. {
  48. groupNumber++;
  49. foreach (var entry in accessList)
  50. {
  51. textBuffer.Append("+Set ");
  52. textBuffer.Append(groupNumber);
  53. textBuffer.Append(": ");
  54. textBuffer.Append(entry.Id);
  55. textBuffer.AppendLine();
  56. }
  57. }
  58. }
  59. else
  60. {
  61. textBuffer.AppendLine("+Unrestricted");
  62. }
  63. foreach (var key in accessReader.AccessKeys)
  64. {
  65. textBuffer.Append("+Key ");
  66. textBuffer.Append(key.OriginStation);
  67. textBuffer.Append(": ");
  68. textBuffer.Append(key.Id);
  69. textBuffer.AppendLine();
  70. }
  71. foreach (var tag in accessReader.DenyTags)
  72. {
  73. textBuffer.Append("-Tag ");
  74. textBuffer.AppendLine(tag.Id);
  75. }
  76. var accessInfoText = textBuffer.ToString();
  77. var screenPos = args.ViewportControl.WorldToScreen(_transformSystem.GetWorldPosition(transform));
  78. args.ScreenHandle.DrawString(_font, screenPos, accessInfoText, Color.Gold);
  79. }
  80. }
  81. }