RadiationSystem.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Content.Server.Radiation.Components;
  2. using Content.Shared.Radiation.Components;
  3. using Content.Shared.Radiation.Events;
  4. using Content.Shared.Stacks;
  5. using Robust.Shared.Configuration;
  6. using Robust.Shared.Map;
  7. using Robust.Shared.Map.Components;
  8. namespace Content.Server.Radiation.Systems;
  9. public sealed partial class RadiationSystem : EntitySystem
  10. {
  11. [Dependency] private readonly IMapManager _mapManager = default!;
  12. [Dependency] private readonly IConfigurationManager _cfg = default!;
  13. [Dependency] private readonly SharedTransformSystem _transform = default!;
  14. [Dependency] private readonly SharedStackSystem _stack = default!;
  15. private EntityQuery<RadiationBlockingContainerComponent> _blockerQuery;
  16. private EntityQuery<RadiationGridResistanceComponent> _resistanceQuery;
  17. private EntityQuery<MapGridComponent> _gridQuery;
  18. private EntityQuery<StackComponent> _stackQuery;
  19. private float _accumulator;
  20. private List<SourceData> _sources = new();
  21. public override void Initialize()
  22. {
  23. base.Initialize();
  24. SubscribeCvars();
  25. InitRadBlocking();
  26. _blockerQuery = GetEntityQuery<RadiationBlockingContainerComponent>();
  27. _resistanceQuery = GetEntityQuery<RadiationGridResistanceComponent>();
  28. _gridQuery = GetEntityQuery<MapGridComponent>();
  29. _stackQuery = GetEntityQuery<StackComponent>();
  30. }
  31. public override void Update(float frameTime)
  32. {
  33. base.Update(frameTime);
  34. _accumulator += frameTime;
  35. if (_accumulator < GridcastUpdateRate)
  36. return;
  37. UpdateGridcast();
  38. UpdateResistanceDebugOverlay();
  39. _accumulator = 0f;
  40. }
  41. public void IrradiateEntity(EntityUid uid, float radsPerSecond, float time)
  42. {
  43. var msg = new OnIrradiatedEvent(time, radsPerSecond);
  44. RaiseLocalEvent(uid, msg);
  45. }
  46. public void SetSourceEnabled(Entity<RadiationSourceComponent?> entity, bool val)
  47. {
  48. if (!Resolve(entity, ref entity.Comp, false))
  49. return;
  50. entity.Comp.Enabled = val;
  51. }
  52. /// <summary>
  53. /// Marks entity to receive/ignore radiation rays.
  54. /// </summary>
  55. public void SetCanReceive(EntityUid uid, bool canReceive)
  56. {
  57. if (canReceive)
  58. {
  59. EnsureComp<RadiationReceiverComponent>(uid);
  60. }
  61. else
  62. {
  63. RemComp<RadiationReceiverComponent>(uid);
  64. }
  65. }
  66. }