]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
AutomaticAtmosSystem uses MassDataChangedEvent, clarifies TileMassMultiplier (#37548)
authorKrunklehorn <42424291+Krunklehorn@users.noreply.github.com>
Sun, 18 May 2025 01:57:50 +0000 (21:57 -0400)
committerGitHub <noreply@github.com>
Sun, 18 May 2025 01:57:50 +0000 (21:57 -0400)
* Initial commit, no tile changes, just mass

* Rename TileMassMultiplier to TileDensityMultiplier

Content.Server/Atmos/EntitySystems/AutomaticAtmosSystem.cs
Content.Server/Shuttles/Systems/ShuttleSystem.cs

index 60d7778f5f4de3d7fc7537b9bd21a022abb3c8e2..f1ffa0dafae91b2f7156369a7fe4a09e6818af7a 100644 (file)
@@ -1,8 +1,7 @@
 using Content.Server.Atmos.Components;
 using Content.Server.Shuttles.Systems;
-using Content.Shared.Maps;
-using Robust.Shared.Map;
-using Robust.Shared.Physics.Components;
+using Robust.Shared.Map.Components;
+using Robust.Shared.Physics.Events;
 
 namespace Content.Server.Atmos.EntitySystems;
 
@@ -12,46 +11,29 @@ namespace Content.Server.Atmos.EntitySystems;
 /// </summary>
 public sealed class AutomaticAtmosSystem : EntitySystem
 {
-    [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!;
     [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
 
     public override void Initialize()
     {
         base.Initialize();
-        SubscribeLocalEvent<TileChangedEvent>(OnTileChanged);
+        SubscribeLocalEvent<MapGridComponent, MassDataChangedEvent>(OnMassDataChanged);
     }
 
-    private void OnTileChanged(ref TileChangedEvent ev)
+    private void OnMassDataChanged(Entity<MapGridComponent> ent, ref MassDataChangedEvent ev)
     {
-        if (_atmosphereSystem.HasAtmosphere(ev.Entity) || !TryComp<PhysicsComponent>(ev.Entity, out var physics))
+        if (_atmosphereSystem.HasAtmosphere(ent))
             return;
 
-        foreach (var change in ev.Changes)
+        // We can't actually count how many tiles there are efficiently, so instead estimate with the mass.
+        if (ev.NewMass / ShuttleSystem.TileDensityMultiplier >= 7.0f)
         {
-            // Only if a atmos-holding tile has been added or removed.
-            // Also, these calls are surprisingly slow.
-            // TODO: Make tiledefmanager cache the IsSpace property, and turn this lookup-through-two-interfaces into
-            // TODO: a simple array lookup, as tile IDs are likely contiguous, and there's at most 2^16 possibilities anyway.
-
-            var oldSpace = change.OldTile.IsSpace(_tileDefinitionManager);
-            var newSpace = change.NewTile.IsSpace(_tileDefinitionManager);
-
-            if (!(oldSpace && !newSpace ||
-                  !oldSpace && newSpace))
-            {
-                continue;
-            }
+            AddComp<GridAtmosphereComponent>(ent);
+            Log.Info($"Giving grid {ent} GridAtmosphereComponent.");
+        }
 
-            // We can't actually count how many tiles there are efficiently, so instead estimate with the mass.
-            if (physics.Mass / ShuttleSystem.TileMassMultiplier >= 7.0f)
-            {
-                AddComp<GridAtmosphereComponent>(ev.Entity);
-                Log.Info($"Giving grid {ev.Entity} GridAtmosphereComponent.");
-            }
+        // It's not super important to remove it should the grid become too small again.
+        // If explosions ever gain the ability to outright shatter grids, do rethink this.
 
-            // It's not super important to remove it should the grid become too small again.
-            // If explosions ever gain the ability to outright shatter grids, do rethink this.
-            return;
-        }
+        return;
     }
 }
index 96a173d68ed4e492ad4ea55820a07c1ed4de9d81..4eb96692980ed462db47c3c502d1af8e0cd6dced 100644 (file)
@@ -75,7 +75,7 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem
     private EntityQuery<PhysicsComponent> _physicsQuery;
     private EntityQuery<TransformComponent> _xformQuery;
 
-    public const float TileMassMultiplier = 0.5f;
+    public const float TileDensityMultiplier = 0.5f;
 
     public override void Initialize()
     {
@@ -111,7 +111,7 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem
     {
         foreach (var fixture in args.NewFixtures)
         {
-            _physics.SetDensity(uid, fixture.Key, fixture.Value, TileMassMultiplier, false, manager);
+            _physics.SetDensity(uid, fixture.Key, fixture.Value, TileDensityMultiplier, false, manager);
             _fixtures.SetRestitution(uid, fixture.Key, fixture.Value, 0.1f, false, manager);
         }
     }