SharedCriminalRecordsSystem.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Content.Shared.IdentityManagement;
  2. using Content.Shared.IdentityManagement.Components;
  3. using Content.Shared.Security;
  4. using Content.Shared.Security.Components;
  5. using Content.Shared.StationRecords;
  6. using Robust.Shared.Serialization;
  7. namespace Content.Shared.CriminalRecords.Systems;
  8. public abstract class SharedCriminalRecordsSystem : EntitySystem
  9. {
  10. /// <summary>
  11. /// Any entity that has a the name of the record that was just changed as their visible name will get their icon
  12. /// updated with the new status, if the record got removed their icon will be removed too.
  13. /// </summary>
  14. public void UpdateCriminalIdentity(string name, SecurityStatus status)
  15. {
  16. var query = EntityQueryEnumerator<IdentityComponent>();
  17. while (query.MoveNext(out var uid, out var identity))
  18. {
  19. if (!Identity.Name(uid, EntityManager).Equals(name))
  20. continue;
  21. if (status == SecurityStatus.None)
  22. RemComp<CriminalRecordComponent>(uid);
  23. else
  24. SetCriminalIcon(name, status, uid);
  25. }
  26. }
  27. /// <summary>
  28. /// Decides the icon that should be displayed on the entity based on the security status
  29. /// </summary>
  30. public void SetCriminalIcon(string name, SecurityStatus status, EntityUid characterUid)
  31. {
  32. EnsureComp<CriminalRecordComponent>(characterUid, out var record);
  33. var previousIcon = record.StatusIcon;
  34. record.StatusIcon = status switch
  35. {
  36. SecurityStatus.Paroled => "SecurityIconParoled",
  37. SecurityStatus.Wanted => "SecurityIconWanted",
  38. SecurityStatus.Detained => "SecurityIconIncarcerated",
  39. SecurityStatus.Discharged => "SecurityIconDischarged",
  40. SecurityStatus.Suspected => "SecurityIconSuspected",
  41. _ => record.StatusIcon
  42. };
  43. if (previousIcon != record.StatusIcon)
  44. Dirty(characterUid, record);
  45. }
  46. }
  47. [Serializable, NetSerializable]
  48. public struct WantedRecord(GeneralStationRecord targetInfo, SecurityStatus status, string? reason, string? initiator, List<CrimeHistory> history)
  49. {
  50. public GeneralStationRecord TargetInfo = targetInfo;
  51. public SecurityStatus Status = status;
  52. public string? Reason = reason;
  53. public string? Initiator = initiator;
  54. public List<CrimeHistory> History = history;
  55. };
  56. [ByRefEvent]
  57. public record struct CriminalRecordChangedEvent(CriminalRecord Record);
  58. [ByRefEvent]
  59. public record struct CriminalHistoryAddedEvent(CrimeHistory History);
  60. [ByRefEvent]
  61. public record struct CriminalHistoryRemovedEvent(CrimeHistory History);