1
0

AtmosMonitoringConsoleSystem.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Content.Shared.Atmos.Components;
  2. using Content.Shared.Atmos.Consoles;
  3. using Robust.Shared.GameStates;
  4. namespace Content.Client.Atmos.Consoles;
  5. public sealed class AtmosMonitoringConsoleSystem : SharedAtmosMonitoringConsoleSystem
  6. {
  7. public override void Initialize()
  8. {
  9. base.Initialize();
  10. SubscribeLocalEvent<AtmosMonitoringConsoleComponent, ComponentHandleState>(OnHandleState);
  11. }
  12. private void OnHandleState(EntityUid uid, AtmosMonitoringConsoleComponent component, ref ComponentHandleState args)
  13. {
  14. Dictionary<Vector2i, Dictionary<(int, string), ulong>> modifiedChunks;
  15. Dictionary<NetEntity, AtmosDeviceNavMapData> atmosDevices;
  16. switch (args.Current)
  17. {
  18. case AtmosMonitoringConsoleDeltaState delta:
  19. {
  20. modifiedChunks = delta.ModifiedChunks;
  21. atmosDevices = delta.AtmosDevices;
  22. foreach (var index in component.AtmosPipeChunks.Keys)
  23. {
  24. if (!delta.AllChunks!.Contains(index))
  25. component.AtmosPipeChunks.Remove(index);
  26. }
  27. break;
  28. }
  29. case AtmosMonitoringConsoleState state:
  30. {
  31. modifiedChunks = state.Chunks;
  32. atmosDevices = state.AtmosDevices;
  33. foreach (var index in component.AtmosPipeChunks.Keys)
  34. {
  35. if (!state.Chunks.ContainsKey(index))
  36. component.AtmosPipeChunks.Remove(index);
  37. }
  38. break;
  39. }
  40. default:
  41. return;
  42. }
  43. foreach (var (origin, chunk) in modifiedChunks)
  44. {
  45. var newChunk = new AtmosPipeChunk(origin);
  46. newChunk.AtmosPipeData = new Dictionary<(int, string), ulong>(chunk);
  47. component.AtmosPipeChunks[origin] = newChunk;
  48. }
  49. component.AtmosDevices.Clear();
  50. foreach (var (nuid, atmosDevice) in atmosDevices)
  51. {
  52. component.AtmosDevices[nuid] = atmosDevice;
  53. }
  54. }
  55. }