IdExaminableSystem.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Content.Shared.Access.Components;
  2. using Content.Shared.Examine;
  3. using Content.Shared.Inventory;
  4. using Content.Shared.PDA;
  5. using Content.Shared.Verbs;
  6. using Robust.Shared.Utility;
  7. namespace Content.Shared.Access.Systems;
  8. public sealed class IdExaminableSystem : EntitySystem
  9. {
  10. [Dependency] private readonly ExamineSystemShared _examineSystem = default!;
  11. [Dependency] private readonly InventorySystem _inventorySystem = default!;
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<IdExaminableComponent, GetVerbsEvent<ExamineVerb>>(OnGetExamineVerbs);
  16. }
  17. private void OnGetExamineVerbs(EntityUid uid, IdExaminableComponent component, GetVerbsEvent<ExamineVerb> args)
  18. {
  19. var detailsRange = _examineSystem.IsInDetailsRange(args.User, uid);
  20. var info = GetMessage(uid);
  21. var verb = new ExamineVerb()
  22. {
  23. Act = () =>
  24. {
  25. var markup = FormattedMessage.FromMarkupOrThrow(info);
  26. _examineSystem.SendExamineTooltip(args.User, uid, markup, false, false);
  27. },
  28. Text = Loc.GetString("id-examinable-component-verb-text"),
  29. Category = VerbCategory.Examine,
  30. Disabled = !detailsRange,
  31. Message = detailsRange ? null : Loc.GetString("id-examinable-component-verb-disabled"),
  32. Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/character.svg.192dpi.png"))
  33. };
  34. args.Verbs.Add(verb);
  35. }
  36. public string GetMessage(EntityUid uid)
  37. {
  38. return GetInfo(uid) ?? Loc.GetString("id-examinable-component-verb-no-id");
  39. }
  40. public string? GetInfo(EntityUid uid)
  41. {
  42. if (_inventorySystem.TryGetSlotEntity(uid, "id", out var idUid))
  43. {
  44. // PDA
  45. if (EntityManager.TryGetComponent(idUid, out PdaComponent? pda) &&
  46. TryComp<IdCardComponent>(pda.ContainedId, out var id))
  47. {
  48. return GetNameAndJob(id);
  49. }
  50. // ID Card
  51. if (EntityManager.TryGetComponent(idUid, out id))
  52. {
  53. return GetNameAndJob(id);
  54. }
  55. }
  56. return null;
  57. }
  58. private string GetNameAndJob(IdCardComponent id)
  59. {
  60. var jobSuffix = string.IsNullOrWhiteSpace(id.LocalizedJobTitle) ? string.Empty : $" ({id.LocalizedJobTitle})";
  61. var val = string.IsNullOrWhiteSpace(id.FullName)
  62. ? Loc.GetString(id.NameLocId,
  63. ("jobSuffix", jobSuffix))
  64. : Loc.GetString(id.FullNameLocId,
  65. ("fullName", id.FullName),
  66. ("jobSuffix", jobSuffix));
  67. return val;
  68. }
  69. }