diff --git a/Content.IntegrationTests/Tests/Fluids/PuddleTest.cs b/Content.IntegrationTests/Tests/Fluids/PuddleTest.cs new file mode 100644 index 0000000000..4333444c65 --- /dev/null +++ b/Content.IntegrationTests/Tests/Fluids/PuddleTest.cs @@ -0,0 +1,102 @@ +using System.Threading.Tasks; +using Content.Server.GameObjects.Components.Fluids; +using Content.Shared.Chemistry; +using NUnit.Framework; +using Robust.Server.Interfaces.Timing; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Map; + +namespace Content.IntegrationTests.Tests.Fluids +{ + [TestFixture] + [TestOf(typeof(PuddleComponent))] + public class PuddleTest : ContentIntegrationTest + { + [Test] + public async Task TilePuddleTest() + { + var server = StartServerDummyTicker(); + + await server.WaitIdleAsync(); + + var mapManager = server.ResolveDependency(); + var pauseManager = server.ResolveDependency(); + var tileDefinitionManager = server.ResolveDependency(); + + GridCoordinates coordinates = default; + + // Build up test environment + server.Post(() => + { + // Create a one tile grid to spill onto + var mapId = mapManager.CreateMap(); + + pauseManager.AddUninitializedMap(mapId); + + var gridId = new GridId(1); + + if (!mapManager.TryGetGrid(gridId, out var grid)) + { + grid = mapManager.CreateGrid(mapId, gridId); + } + + var tileDefinition = tileDefinitionManager["underplating"]; + var tile = new Tile(tileDefinition.TileId); + coordinates = new GridCoordinates(0, 0, gridId); + + grid.SetTile(coordinates, tile); + + pauseManager.DoMapInitialize(mapId); + }); + + await server.WaitIdleAsync(); + + server.Assert(() => + { + var solution = new Solution("water", ReagentUnit.New(20)); + var puddle = solution.SpillAt(coordinates, "PuddleSmear"); + Assert.NotNull(puddle); + }); + + await server.WaitIdleAsync(); + } + + [Test] + public async Task SpaceNoPuddleTest() + { + var server = StartServerDummyTicker(); + + await server.WaitIdleAsync(); + var mapManager = server.ResolveDependency(); + var pauseManager = server.ResolveDependency(); + + // Build up test environment + server.Post(() => + { + var mapId = mapManager.CreateMap(); + + pauseManager.AddUninitializedMap(mapId); + + var gridId = new GridId(1); + + if (!mapManager.GridExists(gridId)) + { + mapManager.CreateGrid(mapId, gridId); + } + }); + + await server.WaitIdleAsync(); + + server.Assert(() => + { + var gridId = new GridId(1); + var coordinates = new GridCoordinates(0, 0, gridId); + var solution = new Solution("water", ReagentUnit.New(20)); + var puddle = solution.SpillAt(coordinates, "PuddleSmear"); + Assert.Null(puddle); + }); + + await server.WaitIdleAsync(); + } + } +} diff --git a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs index 7cc38996ec..2ba084cef7 100644 --- a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs @@ -43,7 +43,6 @@ namespace Content.Server.GameObjects.Components.Fluids // Small puddles will evaporate after a set delay // TODO: 'leaves fluidtracks', probably in a separate component for stuff like gibb chunks?; - // TODO: Add stuff like slipping -> probably in a separate component (for stuff like bananas) // based on behaviour (e.g. someone being punched vs slashed with a sword would have different blood sprite) // to check for low volumes for evaporation or whatever