summaryrefslogtreecommitdiffstats
path: root/src/BlockArea.cpp
diff options
context:
space:
mode:
authormadmaxoft <github@xoft.cz>2014-04-01 20:50:10 +0200
committermadmaxoft <github@xoft.cz>2014-04-01 20:50:10 +0200
commit1229795ff0fd82412e780fffc9f37a2d6eed5522 (patch)
tree865b3ecec47d1cf669c738959f8729ac90ef1d74 /src/BlockArea.cpp
parentRemoved the exit-time-destructors flag from clang. (diff)
downloadcuberite-1229795ff0fd82412e780fffc9f37a2d6eed5522.tar
cuberite-1229795ff0fd82412e780fffc9f37a2d6eed5522.tar.gz
cuberite-1229795ff0fd82412e780fffc9f37a2d6eed5522.tar.bz2
cuberite-1229795ff0fd82412e780fffc9f37a2d6eed5522.tar.lz
cuberite-1229795ff0fd82412e780fffc9f37a2d6eed5522.tar.xz
cuberite-1229795ff0fd82412e780fffc9f37a2d6eed5522.tar.zst
cuberite-1229795ff0fd82412e780fffc9f37a2d6eed5522.zip
Diffstat (limited to 'src/BlockArea.cpp')
-rw-r--r--src/BlockArea.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/BlockArea.cpp b/src/BlockArea.cpp
index 2b950378a..543dbe04d 100644
--- a/src/BlockArea.cpp
+++ b/src/BlockArea.cpp
@@ -173,6 +173,21 @@ static inline void MergeCombinatorSpongePrint(BLOCKTYPE & a_DstType, BLOCKTYPE a
+/** Combinator used for cBlockArea::msMask merging */
+static inline void MergeCombinatorMask(BLOCKTYPE & a_DstType, BLOCKTYPE a_SrcType, NIBBLETYPE & a_DstMeta, NIBBLETYPE a_SrcMeta)
+{
+ // If the blocks are the same, keep the dest; otherwise replace with air
+ if ((a_SrcType != a_DstType) || (a_SrcMeta != a_DstMeta))
+ {
+ a_DstType = E_BLOCK_AIR;
+ a_DstMeta = 0;
+ }
+}
+
+
+
+
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// cBlockArea:
@@ -710,6 +725,21 @@ void cBlockArea::Merge(const cBlockArea & a_Src, int a_RelX, int a_RelY, int a_R
break;
} // case msSpongePrint
+ case msMask:
+ {
+ InternalMergeBlocks(
+ m_BlockTypes, a_Src.GetBlockTypes(),
+ DstMetas, SrcMetas,
+ SizeX, SizeY, SizeZ,
+ SrcOffX, SrcOffY, SrcOffZ,
+ DstOffX, DstOffY, DstOffZ,
+ a_Src.GetSizeX(), a_Src.GetSizeY(), a_Src.GetSizeZ(),
+ m_Size.x, m_Size.y, m_Size.z,
+ MergeCombinatorMask
+ );
+ break;
+ } // case msMask
+
default:
{
LOGWARNING("Unknown block area merge strategy: %d", a_Strategy);