TempAffectingAnomalySystem.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using Content.Server.Atmos.EntitySystems;
  2. using Content.Server.Anomaly.Components;
  3. using Content.Shared.Anomaly.Components;
  4. using Robust.Server.GameObjects;
  5. namespace Content.Server.Anomaly.Effects;
  6. /// <summary>
  7. /// This handles <see cref="TempAffectingAnomalyComponent"/>
  8. /// </summary>
  9. public sealed class TempAffectingAnomalySystem : EntitySystem
  10. {
  11. [Dependency] private readonly AtmosphereSystem _atmosphere = default!;
  12. [Dependency] private readonly TransformSystem _xform = default!;
  13. public override void Update(float frameTime)
  14. {
  15. base.Update(frameTime);
  16. var query = EntityQueryEnumerator<TempAffectingAnomalyComponent, AnomalyComponent, TransformComponent>();
  17. while (query.MoveNext(out var ent, out var comp, out var anom, out var xform))
  18. {
  19. var grid = xform.GridUid;
  20. var map = xform.MapUid;
  21. var indices = _xform.GetGridTilePositionOrDefault((ent, xform));
  22. var mixture = _atmosphere.GetTileMixture(grid, map, indices, true);
  23. if (mixture is { })
  24. {
  25. mixture.Temperature += comp.TempChangePerSecond * anom.Severity * frameTime;
  26. }
  27. if (grid != null && anom.Severity > comp.AnomalyHotSpotThreshold)
  28. {
  29. _atmosphere.HotspotExpose(grid.Value, indices, comp.HotspotExposeTemperature, comp.HotspotExposeVolume, ent, true);
  30. }
  31. }
  32. }
  33. }