1
0

RadiationSystem.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Content.Client.Radiation.Overlays;
  2. using Content.Shared.Radiation.Events;
  3. using Content.Shared.Radiation.Systems;
  4. using Robust.Client.Graphics;
  5. namespace Content.Client.Radiation.Systems;
  6. public sealed class RadiationSystem : EntitySystem
  7. {
  8. [Dependency] private readonly IOverlayManager _overlayMan = default!;
  9. public List<DebugRadiationRay>? Rays;
  10. public Dictionary<NetEntity, Dictionary<Vector2i, float>>? ResistanceGrids;
  11. public override void Initialize()
  12. {
  13. SubscribeNetworkEvent<OnRadiationOverlayToggledEvent>(OnOverlayToggled);
  14. SubscribeNetworkEvent<OnRadiationOverlayUpdateEvent>(OnOverlayUpdate);
  15. SubscribeNetworkEvent<OnRadiationOverlayResistanceUpdateEvent>(OnResistanceUpdate);
  16. }
  17. public override void Shutdown()
  18. {
  19. base.Shutdown();
  20. _overlayMan.RemoveOverlay<RadiationDebugOverlay>();
  21. }
  22. private void OnOverlayToggled(OnRadiationOverlayToggledEvent ev)
  23. {
  24. if (ev.IsEnabled)
  25. _overlayMan.AddOverlay(new RadiationDebugOverlay());
  26. else
  27. _overlayMan.RemoveOverlay<RadiationDebugOverlay>();
  28. }
  29. private void OnOverlayUpdate(OnRadiationOverlayUpdateEvent ev)
  30. {
  31. if (!_overlayMan.TryGetOverlay(out RadiationDebugOverlay? overlay))
  32. return;
  33. var str = $"Radiation update: {ev.ElapsedTimeMs}ms with. Receivers: {ev.ReceiversCount}, " +
  34. $"Sources: {ev.SourcesCount}, Rays: {ev.Rays.Count}";
  35. Log.Info(str);
  36. Rays = ev.Rays;
  37. }
  38. private void OnResistanceUpdate(OnRadiationOverlayResistanceUpdateEvent ev)
  39. {
  40. ResistanceGrids = ev.Grids;
  41. }
  42. }