Janitor QoL (#15626)

This commit is contained in:
metalgearsloth
2023-04-23 18:20:03 +10:00
committed by GitHub
parent 3116621501
commit 6076130987
4 changed files with 21 additions and 8 deletions

View File

@@ -49,7 +49,7 @@ public sealed partial class PuddleSystem
continue; continue;
var reagentTick = evaporation.EvaporationAmount * EvaporationCooldown.TotalSeconds; var reagentTick = evaporation.EvaporationAmount * EvaporationCooldown.TotalSeconds;
puddleSolution.RemoveReagent(EvaporationReagent, reagentTick); _solutionContainerSystem.TryRemoveReagent(uid, puddleSolution, EvaporationReagent, reagentTick);
// Despawn if we're done // Despawn if we're done
if (puddleSolution.Volume == FixedPoint2.Zero) if (puddleSolution.Volume == FixedPoint2.Zero)

View File

@@ -96,9 +96,9 @@ public sealed partial class PuddleSystem : SharedPuddleSystem
var puddleQuery = GetEntityQuery<PuddleComponent>(); 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 // 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) if (args.Neighbors.Count > 0)
{ {
_random.Shuffle(args.Neighbors); _random.Shuffle(args.Neighbors);
@@ -107,7 +107,8 @@ public sealed partial class PuddleSystem : SharedPuddleSystem
foreach (var neighbor in args.Neighbors) foreach (var neighbor in args.Neighbors)
{ {
if (!puddleQuery.TryGetComponent(neighbor, out var puddle) || 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; 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) 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); _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) foreach (var tile in args.NeighborFreeTiles)
{ {
@@ -155,6 +166,7 @@ public sealed partial class PuddleSystem : SharedPuddleSystem
return; return;
} }
// Then we go to anything else.
if (overflow.Volume > FixedPoint2.Zero && args.Neighbors.Count > 0 && args.Updates > 0) if (overflow.Volume > FixedPoint2.Zero && args.Neighbors.Count > 0 && args.Updates > 0)
{ {
var spillPerNeighbor = overflow.Volume / args.Neighbors.Count; 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. // This is to avoid diluting solutions too much.
if (!puddleQuery.TryGetComponent(neighbor, out var puddle) || 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) ||
neighborSolution.Volume >= puddle.OverflowVolume) neighborSolution.Volume >= puddle.OverflowVolume)
{ {
continue; continue;

View File

@@ -18,7 +18,7 @@ public sealed class AbsorbentComponent : Component
/// How much solution we can transfer in one interaction. /// How much solution we can transfer in one interaction.
/// </summary> /// </summary>
[DataField("pickupAmount")] [DataField("pickupAmount")]
public FixedPoint2 PickupAmount = FixedPoint2.New(60); public FixedPoint2 PickupAmount = FixedPoint2.New(100);
[DataField("pickupSound")] [DataField("pickupSound")]
public SoundSpecifier PickupSound = new SoundPathSpecifier("/Audio/Effects/Fluids/watersplash.ogg") public SoundSpecifier PickupSound = new SoundPathSpecifier("/Audio/Effects/Fluids/watersplash.ogg")

View File

@@ -26,9 +26,9 @@
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
absorbed: absorbed:
maxVol: 60 maxVol: 100
- type: UseDelay - type: UseDelay
delay: 1.5 delay: 1
- type: Tag - type: Tag
tags: tags:
- DroneUsable #No bucket because it holds chems, they can drag the cart or use a drain - DroneUsable #No bucket because it holds chems, they can drag the cart or use a drain