]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
feat: allow mopping evaporating puddles (#38743)
authorPerry Fraser <perryprog@users.noreply.github.com>
Fri, 4 Jul 2025 21:50:44 +0000 (17:50 -0400)
committerGitHub <noreply@github.com>
Fri, 4 Jul 2025 21:50:44 +0000 (23:50 +0200)
Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs
Content.Server/Fluids/EntitySystems/PuddleSystem.Evaporation.cs
Resources/Locale/en-US/fluids/components/absorbent-component.ftl

index 1177c243042e4ed6854496ab179a8616abd4d32f..28c36602e1a16dc155ce6a292765b08009332f58 100644 (file)
@@ -277,17 +277,22 @@ public sealed class AbsorbentSystem : SharedAbsorbentSystem
         if (!_solutionContainerSystem.ResolveSolution(target, puddle.SolutionName, ref puddle.Solution, out var puddleSolution) || puddleSolution.Volume <= 0)
             return false;
 
-        // Check if the puddle has any non-evaporative reagents
-        if (_puddleSystem.CanFullyEvaporate(puddleSolution))
-        {
-            _popups.PopupEntity(Loc.GetString("mopping-system-puddle-evaporate", ("target", target)), user, user);
-            return true;
-        }
-
         Solution puddleSplit;
         var isRemoved = false;
         if (absorber.UseAbsorberSolution)
         {
+            // No reason to mop something that 1) can evaporate, 2) is an absorber, and 3) is being mopped with
+            // something that uses absorbers.
+            var puddleAbsorberVolume =
+                puddleSolution.GetTotalPrototypeQuantity(_puddleSystem.GetAbsorbentReagents(puddleSolution));
+            if (puddleAbsorberVolume == puddleSolution.Volume)
+            {
+                _popups.PopupEntity(Loc.GetString("mopping-system-puddle-already-mopped", ("target", target)),
+                    user,
+                    user);
+                return true;
+            }
+
             // Check if we have any evaporative reagents on our absorber to transfer
             var absorberSolution = absorberSoln.Comp.Solution;
             var available = absorberSolution.GetTotalPrototypeQuantity(_puddleSystem.GetAbsorbentReagents(absorberSolution));
@@ -317,6 +322,7 @@ public sealed class AbsorbentSystem : SharedAbsorbentSystem
         }
         else
         {
+            // Note: arguably shouldn't this get all solutions?
             puddleSplit = puddleSolution.SplitSolutionWithout(absorber.PickupAmount, _puddleSystem.GetAbsorbentReagents(puddleSolution));
             // Despawn if we're done
             if (puddleSolution.Volume == FixedPoint2.Zero)
index f92504e74cf5a514f8dc079439d95fd97cd439ba..245ab8308f97ca68e587163938c5cfe8bb6f4192 100644 (file)
@@ -46,6 +46,7 @@ public sealed partial class PuddleSystem
             if (!_solutionContainerSystem.ResolveSolution(uid, puddle.SolutionName, ref puddle.Solution, out var puddleSolution))
                 continue;
 
+            // Yes, this means that 50u water + 50u holy water evaporates twice as fast as 100u water.
             foreach ((string evaporatingReagent, FixedPoint2 evaporatingSpeed) in GetEvaporationSpeeds(puddleSolution))
             {
                 var reagentTick = evaporation.EvaporationAmount * EvaporationCooldown.TotalSeconds * evaporatingSpeed;
index 51e500a6fe9e01795254c05d5932e4a423dfe39e..d6cb60e25e953cb08b39331ee909e6caaf37fcfc 100644 (file)
@@ -1,7 +1,7 @@
 mopping-system-target-container-empty = { CAPITALIZE(THE($target)) } is empty!
 mopping-system-target-container-empty-water = { CAPITALIZE(THE($target)) } has no water!
-mopping-system-puddle-space = { CAPITALIZE(THE($used)) } is full of water
-mopping-system-puddle-evaporate = {  CAPITALIZE(THE($target)) } is evaporating
+mopping-system-puddle-space = { CAPITALIZE(THE($used)) } is full of water.
+mopping-system-puddle-already-mopped = { CAPITALIZE(THE($target)) } is already mopped.
 mopping-system-no-water = { CAPITALIZE(THE($used)) } has no water!
 mopping-system-no-hands = You have no hands!