ExtinguishTileReaction.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Content.Server.Atmos.EntitySystems;
  2. using Content.Shared.Atmos;
  3. using Content.Shared.Chemistry.Reaction;
  4. using Content.Shared.Chemistry.Reagent;
  5. using Content.Shared.FixedPoint;
  6. using JetBrains.Annotations;
  7. using Robust.Shared.Map;
  8. namespace Content.Server.Chemistry.TileReactions
  9. {
  10. [UsedImplicitly]
  11. [DataDefinition]
  12. public sealed partial class ExtinguishTileReaction : ITileReaction
  13. {
  14. [DataField("coolingTemperature")] private float _coolingTemperature = 2f;
  15. public FixedPoint2 TileReact(TileRef tile,
  16. ReagentPrototype reagent,
  17. FixedPoint2 reactVolume,
  18. IEntityManager entityManager,
  19. List<ReagentData>? data)
  20. {
  21. if (reactVolume <= FixedPoint2.Zero || tile.Tile.IsEmpty)
  22. return FixedPoint2.Zero;
  23. var atmosphereSystem = entityManager.System<AtmosphereSystem>();
  24. var environment = atmosphereSystem.GetTileMixture(tile.GridUid, null, tile.GridIndices, true);
  25. if (environment == null || !atmosphereSystem.IsHotspotActive(tile.GridUid, tile.GridIndices))
  26. return FixedPoint2.Zero;
  27. environment.Temperature =
  28. MathF.Max(MathF.Min(environment.Temperature - (_coolingTemperature * 1000f),
  29. environment.Temperature / _coolingTemperature), Atmospherics.TCMB);
  30. atmosphereSystem.ReactTile(tile.GridUid, tile.GridIndices);
  31. atmosphereSystem.HotspotExtinguish(tile.GridUid, tile.GridIndices);
  32. return FixedPoint2.Zero;
  33. }
  34. }
  35. }