GuidebookDataSystem.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Content.Shared.Guidebook;
  2. namespace Content.Client.Guidebook;
  3. /// <summary>
  4. /// Client system for storing and retrieving values extracted from entity prototypes
  5. /// for display in the guidebook (<see cref="RichText.ProtodataTag"/>).
  6. /// Requests data from the server on <see cref="Initialize"/>.
  7. /// Can also be pushed new data when the server reloads prototypes.
  8. /// </summary>
  9. public sealed class GuidebookDataSystem : EntitySystem
  10. {
  11. private GuidebookData? _data;
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeNetworkEvent<UpdateGuidebookDataEvent>(OnServerUpdated);
  16. // Request data from the server
  17. RaiseNetworkEvent(new RequestGuidebookDataEvent());
  18. }
  19. private void OnServerUpdated(UpdateGuidebookDataEvent args)
  20. {
  21. // Got new data from the server, either in response to our request, or because prototypes reloaded on the server
  22. _data = args.Data;
  23. _data.Freeze();
  24. }
  25. /// <summary>
  26. /// Attempts to retrieve a value using the given identifiers.
  27. /// See <see cref="GuidebookData.TryGetValue"/> for more information.
  28. /// </summary>
  29. public bool TryGetValue(string prototype, string component, string field, out object? value)
  30. {
  31. if (_data == null)
  32. {
  33. value = null;
  34. return false;
  35. }
  36. return _data.TryGetValue(prototype, component, field, out value);
  37. }
  38. }