1
0

NotekeeperCartridgeSystem.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Content.Server.Administration.Logs;
  2. using Content.Shared.CartridgeLoader;
  3. using Content.Shared.CartridgeLoader.Cartridges;
  4. using Content.Shared.Database;
  5. namespace Content.Server.CartridgeLoader.Cartridges;
  6. public sealed class NotekeeperCartridgeSystem : EntitySystem
  7. {
  8. [Dependency] private readonly CartridgeLoaderSystem? _cartridgeLoaderSystem = default!;
  9. [Dependency] private readonly IAdminLogManager _adminLogger = default!;
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. SubscribeLocalEvent<NotekeeperCartridgeComponent, CartridgeMessageEvent>(OnUiMessage);
  14. SubscribeLocalEvent<NotekeeperCartridgeComponent, CartridgeUiReadyEvent>(OnUiReady);
  15. }
  16. /// <summary>
  17. /// This gets called when the ui fragment needs to be updated for the first time after activating
  18. /// </summary>
  19. private void OnUiReady(EntityUid uid, NotekeeperCartridgeComponent component, CartridgeUiReadyEvent args)
  20. {
  21. UpdateUiState(uid, args.Loader, component);
  22. }
  23. /// <summary>
  24. /// The ui messages received here get wrapped by a CartridgeMessageEvent and are relayed from the <see cref="CartridgeLoaderSystem"/>
  25. /// </summary>
  26. /// <remarks>
  27. /// The cartridge specific ui message event needs to inherit from the CartridgeMessageEvent
  28. /// </remarks>
  29. private void OnUiMessage(EntityUid uid, NotekeeperCartridgeComponent component, CartridgeMessageEvent args)
  30. {
  31. if (args is not NotekeeperUiMessageEvent message)
  32. return;
  33. if (message.Action == NotekeeperUiAction.Add)
  34. {
  35. component.Notes.Add(message.Note);
  36. _adminLogger.Add(LogType.PdaInteract, LogImpact.Low,
  37. $"{ToPrettyString(args.Actor)} added a note to PDA: '{message.Note}' contained on: {ToPrettyString(uid)}");
  38. }
  39. else
  40. {
  41. component.Notes.Remove(message.Note);
  42. _adminLogger.Add(LogType.PdaInteract, LogImpact.Low,
  43. $"{ToPrettyString(args.Actor)} removed a note from PDA: '{message.Note}' was contained on: {ToPrettyString(uid)}");
  44. }
  45. UpdateUiState(uid, GetEntity(args.LoaderUid), component);
  46. }
  47. private void UpdateUiState(EntityUid uid, EntityUid loaderUid, NotekeeperCartridgeComponent? component)
  48. {
  49. if (!Resolve(uid, ref component))
  50. return;
  51. var state = new NotekeeperUiState(component.Notes);
  52. _cartridgeLoaderSystem?.UpdateCartridgeUiState(loaderUid, state);
  53. }
  54. }