]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Janitor QoL (#15626)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sun, 23 Apr 2023 08:20:03 +0000 (18:20 +1000)
committerGitHub <noreply@github.com>
Sun, 23 Apr 2023 08:20:03 +0000 (18:20 +1000)
Content.Server/Fluids/EntitySystems/PuddleSystem.Evaporation.cs
Content.Server/Fluids/EntitySystems/PuddleSystem.cs
Content.Shared/Fluids/AbsorbentComponent.cs
Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml

index 65eacba3153db70b25df7f4eaba7ad4da28a7138..46a66beab47934f1b24950e510342bd6df5e02b6 100644 (file)
@@ -49,7 +49,7 @@ public sealed partial class PuddleSystem
                 continue;
 
             var reagentTick = evaporation.EvaporationAmount * EvaporationCooldown.TotalSeconds;
-            puddleSolution.RemoveReagent(EvaporationReagent, reagentTick);
+            _solutionContainerSystem.TryRemoveReagent(uid, puddleSolution, EvaporationReagent, reagentTick);
 
             // Despawn if we're done
             if (puddleSolution.Volume == FixedPoint2.Zero)
index 6dc6a64f8ffe86a48d7c7b15f81c076121699ae5..c444afa83464e48bd5041f2bc946316801d6fb84 100644 (file)
@@ -96,9 +96,9 @@ public sealed partial class PuddleSystem : SharedPuddleSystem
 
         var puddleQuery = GetEntityQuery<PuddleComponent>();
 
+        // For overflows, we never go to a fully evaporative tile just to avoid continuously having to mop it.
+
         // First we overflow to neighbors with overflow capacity
-        // Then we go to free tiles
-        // Then we go to anything else.
         if (args.Neighbors.Count > 0)
         {
             _random.Shuffle(args.Neighbors);
@@ -107,7 +107,8 @@ public sealed partial class PuddleSystem : SharedPuddleSystem
             foreach (var neighbor in args.Neighbors)
             {
                 if (!puddleQuery.TryGetComponent(neighbor, out var puddle) ||
-                    !_solutionContainerSystem.TryGetSolution(neighbor, puddle.SolutionName, out var neighborSolution))
+                    !_solutionContainerSystem.TryGetSolution(neighbor, puddle.SolutionName, out var neighborSolution) ||
+                    CanFullyEvaporate(neighborSolution))
                 {
                     continue;
                 }
@@ -136,10 +137,20 @@ public sealed partial class PuddleSystem : SharedPuddleSystem
             }
         }
 
+        // Then we go to free tiles -> only overflow if we can go up to capacity at least.
         if (args.NeighborFreeTiles.Count > 0 && args.Updates > 0)
         {
+            // We'll only spill if we have the minimum threshold per tile.
+            var spillCount = (int) Math.Floor(overflow.Volume.Float() / component.OverflowVolume.Float());
+
+            if (spillCount == 0)
+            {
+                return;
+            }
+
             _random.Shuffle(args.NeighborFreeTiles);
-            var spillAmount = overflow.Volume / args.NeighborFreeTiles.Count;
+            spillCount = Math.Min(args.NeighborFreeTiles.Count, spillCount);
+            var spillAmount = overflow.Volume / spillCount;
 
             foreach (var tile in args.NeighborFreeTiles)
             {
@@ -155,6 +166,7 @@ public sealed partial class PuddleSystem : SharedPuddleSystem
             return;
         }
 
+        // Then we go to anything else.
         if (overflow.Volume > FixedPoint2.Zero && args.Neighbors.Count > 0 && args.Updates > 0)
         {
             var spillPerNeighbor = overflow.Volume / args.Neighbors.Count;
@@ -165,6 +177,7 @@ public sealed partial class PuddleSystem : SharedPuddleSystem
                 // This is to avoid diluting solutions too much.
                 if (!puddleQuery.TryGetComponent(neighbor, out var puddle) ||
                     !_solutionContainerSystem.TryGetSolution(neighbor, puddle.SolutionName, out var neighborSolution) ||
+                    CanFullyEvaporate(neighborSolution) ||
                     neighborSolution.Volume >= puddle.OverflowVolume)
                 {
                     continue;
index b68f2d8b97ff07d41e26afb56c41155849c1ffa6..4966c8c5f6e176ec7b7bc98631bdf7d97ae3d843 100644 (file)
@@ -18,7 +18,7 @@ public sealed class AbsorbentComponent : Component
     /// How much solution we can transfer in one interaction.
     /// </summary>
     [DataField("pickupAmount")]
-    public FixedPoint2 PickupAmount = FixedPoint2.New(60);
+    public FixedPoint2 PickupAmount = FixedPoint2.New(100);
 
     [DataField("pickupSound")]
     public SoundSpecifier PickupSound = new SoundPathSpecifier("/Audio/Effects/Fluids/watersplash.ogg")
index 9a4c09a6840a0f20f63174ec9edfbdef5a3c893d..2f058caa28500523f506dc8fb0e9ddd36dd423a9 100644 (file)
@@ -26,9 +26,9 @@
   - type: SolutionContainerManager
     solutions:
       absorbed:
-        maxVol: 60
+        maxVol: 100
   - type: UseDelay
-    delay: 1.5
+    delay: 1
   - type: Tag
     tags:
       - DroneUsable #No bucket because it holds chems, they can drag the cart or use a drain