From f12f277c359a9c8b1c81798b30cf6f96abbf7a46 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 26 Apr 2023 21:29:31 +1000 Subject: [PATCH] Puddle fixes (#15820) --- Content.Client/Fluids/PuddleSystem.cs | 2 +- .../Fluids/EntitySystems/PuddleSystem.cs | 23 ++++++------------- Content.Shared/Fluids/SharedPuddleSystem.cs | 2 ++ 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/Content.Client/Fluids/PuddleSystem.cs b/Content.Client/Fluids/PuddleSystem.cs index 12004d7ff6..54b1d5b86b 100644 --- a/Content.Client/Fluids/PuddleSystem.cs +++ b/Content.Client/Fluids/PuddleSystem.cs @@ -36,7 +36,7 @@ public sealed class PuddleSystem : SharedPuddleSystem args.Sprite.LayerSetState(0, $"{smooth.StateBase}a"); _smooth.SetEnabled(uid, false, smooth); } - else if (volume < 0.6f) + else if (volume < MediumThreshold) { args.Sprite.LayerSetState(0, $"{smooth.StateBase}b"); _smooth.SetEnabled(uid, false, smooth); diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs index 902f2188e2..3552c8d897 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs @@ -105,7 +105,7 @@ public sealed partial class PuddleSystem : SharedPuddleSystem continue; } - var remaining = neighborSolution.Volume - puddle.OverflowVolume; + var remaining = puddle.OverflowVolume - neighborSolution.Volume; if (remaining <= FixedPoint2.Zero) continue; @@ -129,20 +129,13 @@ public sealed partial class PuddleSystem : SharedPuddleSystem } } - // Then we go to free tiles -> only overflow if we can go up to capacity at least. + // Then we go to free tiles. + // Need to go even if we have a little remainder to avoid solution sploshing around internally + // for ages. 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); - spillCount = Math.Min(args.NeighborFreeTiles.Count, spillCount); - var spillAmount = overflow.Volume / spillCount; + var spillAmount = overflow.Volume / args.NeighborFreeTiles.Count; foreach (var neighbor in args.NeighborFreeTiles) { @@ -165,12 +158,10 @@ public sealed partial class PuddleSystem : SharedPuddleSystem foreach (var neighbor in args.Neighbors) { - // Overflow to neighbours but not if they're already at the cap - // This is to avoid diluting solutions too much. + // Overflow to neighbours (unless it's pure water) if (!puddleQuery.TryGetComponent(neighbor, out var puddle) || !_solutionContainerSystem.TryGetSolution(neighbor, puddle.SolutionName, out var neighborSolution) || - CanFullyEvaporate(neighborSolution) || - neighborSolution.Volume >= puddle.OverflowVolume) + CanFullyEvaporate(neighborSolution)) { continue; } diff --git a/Content.Shared/Fluids/SharedPuddleSystem.cs b/Content.Shared/Fluids/SharedPuddleSystem.cs index c693632238..161ea1469d 100644 --- a/Content.Shared/Fluids/SharedPuddleSystem.cs +++ b/Content.Shared/Fluids/SharedPuddleSystem.cs @@ -11,6 +11,8 @@ public abstract class SharedPuddleSystem : EntitySystem /// public const float LowThreshold = 0.3f; + public const float MediumThreshold = 0.6f; + public override void Initialize() { base.Initialize(); -- 2.51.2