Janitor QoL (#15626)
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user