diff options
author | Tiger Wang <ziwei.tiger@hotmail.co.uk> | 2014-05-06 21:15:19 +0200 |
---|---|---|
committer | Tiger Wang <ziwei.tiger@hotmail.co.uk> | 2014-05-06 21:15:19 +0200 |
commit | 696a7bc52e9b029b627feee76eaf5e1239417033 (patch) | |
tree | ac3e5152dd6e7eb2a9420daad8df3bb2560d544f /src/Simulator/VanillaFluidSimulator.cpp | |
parent | Suggestions'd #2 (diff) | |
parent | Merge pull request #978 from mc-server/VectorAssignmentOperator (diff) | |
download | cuberite-696a7bc52e9b029b627feee76eaf5e1239417033.tar cuberite-696a7bc52e9b029b627feee76eaf5e1239417033.tar.gz cuberite-696a7bc52e9b029b627feee76eaf5e1239417033.tar.bz2 cuberite-696a7bc52e9b029b627feee76eaf5e1239417033.tar.lz cuberite-696a7bc52e9b029b627feee76eaf5e1239417033.tar.xz cuberite-696a7bc52e9b029b627feee76eaf5e1239417033.tar.zst cuberite-696a7bc52e9b029b627feee76eaf5e1239417033.zip |
Diffstat (limited to 'src/Simulator/VanillaFluidSimulator.cpp')
-rw-r--r-- | src/Simulator/VanillaFluidSimulator.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/Simulator/VanillaFluidSimulator.cpp b/src/Simulator/VanillaFluidSimulator.cpp index 78aff9d68..18d9b07e1 100644 --- a/src/Simulator/VanillaFluidSimulator.cpp +++ b/src/Simulator/VanillaFluidSimulator.cpp @@ -35,14 +35,16 @@ cVanillaFluidSimulator::cVanillaFluidSimulator( -void cVanillaFluidSimulator::Spread(cChunk * a_Chunk, int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_NewMeta) +void cVanillaFluidSimulator::SpreadXZ(cChunk * a_Chunk, int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_NewMeta) { + // Calculate the distance to the nearest "hole" in each direction: int Cost[4]; Cost[0] = CalculateFlowCost(a_Chunk, a_RelX + 1, a_RelY, a_RelZ, X_PLUS); Cost[1] = CalculateFlowCost(a_Chunk, a_RelX - 1, a_RelY, a_RelZ, X_MINUS); Cost[2] = CalculateFlowCost(a_Chunk, a_RelX, a_RelY, a_RelZ + 1, Z_PLUS); Cost[3] = CalculateFlowCost(a_Chunk, a_RelX, a_RelY, a_RelZ - 1, Z_MINUS); + // Find the minimum distance: int MinCost = InfiniteCost; for (unsigned int i = 0; i < ARRAYCOUNT(Cost); ++i) { @@ -52,6 +54,7 @@ void cVanillaFluidSimulator::Spread(cChunk * a_Chunk, int a_RelX, int a_RelY, in } } + // Spread in all directions where the distance matches the minimum: if (Cost[0] == MinCost) { SpreadToNeighbor(a_Chunk, a_RelX + 1, a_RelY, a_RelZ, a_NewMeta); @@ -86,7 +89,10 @@ int cVanillaFluidSimulator::CalculateFlowCost(cChunk * a_Chunk, int a_RelX, int { return Cost; } - if (!IsPassableForFluid(BlockType) && !IsBlockLiquid(BlockType)) + if ( + !IsPassableForFluid(BlockType) || // The block cannot be passed by the liquid ... + (IsAllowedBlock(BlockType) && (BlockMeta == 0)) // ... or if it is liquid, it is a source block + ) { return Cost; } |