diff options
Diffstat (limited to 'src/World.cpp')
-rw-r--r-- | src/World.cpp | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/src/World.cpp b/src/World.cpp index aca640091..721624790 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -1599,17 +1599,17 @@ bool cWorld::DoWithChunkAt(Vector3i a_BlockPos, cChunkCallback a_Callback) -bool cWorld::GrowTree(int a_X, int a_Y, int a_Z) +bool cWorld::GrowTree(const Vector3i a_BlockPos) { - if (GetBlock(a_X, a_Y, a_Z) == E_BLOCK_SAPLING) + if (GetBlock(a_BlockPos) == E_BLOCK_SAPLING) { // There is a sapling here, grow a tree according to its type: - return GrowTreeFromSapling(a_X, a_Y, a_Z, GetBlockMeta(a_X, a_Y, a_Z)); + return GrowTreeFromSapling(a_BlockPos); } else { // There is nothing here, grow a tree based on the current biome here: - return GrowTreeByBiome(a_X, a_Y, a_Z); + return GrowTreeByBiome(a_BlockPos); } } @@ -1617,36 +1617,37 @@ bool cWorld::GrowTree(int a_X, int a_Y, int a_Z) -bool cWorld::GrowTreeFromSapling(int a_X, int a_Y, int a_Z, NIBBLETYPE a_SaplingMeta) +bool cWorld::GrowTreeFromSapling(Vector3i a_BlockPos) { cNoise Noise(m_Generator.GetSeed()); sSetBlockVector Logs, Other; auto WorldAge = static_cast<int>(std::chrono::duration_cast<cTickTimeLong>(m_WorldAge).count() & 0xffffffff); - switch (a_SaplingMeta & 0x07) + auto SaplingMeta = GetBlockMeta(a_BlockPos); + switch (SaplingMeta & 0x07) { - case E_META_SAPLING_APPLE: GetAppleTreeImage ({ a_X, a_Y, a_Z }, Noise, WorldAge, Logs, Other); break; - case E_META_SAPLING_BIRCH: GetBirchTreeImage ({ a_X, a_Y, a_Z }, Noise, WorldAge, Logs, Other); break; + case E_META_SAPLING_APPLE: GetAppleTreeImage (a_BlockPos, Noise, WorldAge, Logs, Other); break; + case E_META_SAPLING_BIRCH: GetBirchTreeImage (a_BlockPos, Noise, WorldAge, Logs, Other); break; case E_META_SAPLING_CONIFER: { - bool IsLarge = GetLargeTreeAdjustment(a_X, a_Y, a_Z, a_SaplingMeta); - GetConiferTreeImage({ a_X, a_Y, a_Z }, Noise, WorldAge, Logs, Other, IsLarge); + bool IsLarge = GetLargeTreeAdjustment(a_BlockPos, SaplingMeta); + GetConiferTreeImage(a_BlockPos, Noise, WorldAge, Logs, Other, IsLarge); break; } - case E_META_SAPLING_ACACIA: GetAcaciaTreeImage ({ a_X, a_Y, a_Z }, Noise, WorldAge, Logs, Other); break; + case E_META_SAPLING_ACACIA: GetAcaciaTreeImage (a_BlockPos, Noise, WorldAge, Logs, Other); break; case E_META_SAPLING_JUNGLE: { - bool IsLarge = GetLargeTreeAdjustment(a_X, a_Y, a_Z, a_SaplingMeta); - GetJungleTreeImage({ a_X, a_Y, a_Z }, Noise, WorldAge, Logs, Other, IsLarge); + bool IsLarge = GetLargeTreeAdjustment(a_BlockPos, SaplingMeta); + GetJungleTreeImage(a_BlockPos, Noise, WorldAge, Logs, Other, IsLarge); break; } case E_META_SAPLING_DARK_OAK: { - if (!GetLargeTreeAdjustment(a_X, a_Y, a_Z, a_SaplingMeta)) + if (!GetLargeTreeAdjustment(a_BlockPos, SaplingMeta)) { return false; } - GetDarkoakTreeImage({ a_X, a_Y, a_Z }, Noise, WorldAge, Logs, Other); + GetDarkoakTreeImage(a_BlockPos, Noise, WorldAge, Logs, Other); break; } } @@ -1659,7 +1660,7 @@ bool cWorld::GrowTreeFromSapling(int a_X, int a_Y, int a_Z, NIBBLETYPE a_Sapling -bool cWorld::GetLargeTreeAdjustment(int & a_X, int & a_Y, int & a_Z, NIBBLETYPE a_Meta) +bool cWorld::GetLargeTreeAdjustment(Vector3i & a_BlockPos, NIBBLETYPE a_Meta) { bool IsLarge = true; a_Meta = a_Meta & 0x07; @@ -1671,8 +1672,8 @@ bool cWorld::GetLargeTreeAdjustment(int & a_X, int & a_Y, int & a_Z, NIBBLETYPE { NIBBLETYPE meta; BLOCKTYPE type; - GetBlockTypeMeta(a_X + x, a_Y, a_Z + z, type, meta); - IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((a_Meta & meta) == a_Meta); + GetBlockTypeMeta(a_BlockPos.addedXZ(x, z), type, meta); + IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((meta & 0x07) == a_Meta); } } @@ -1689,14 +1690,14 @@ bool cWorld::GetLargeTreeAdjustment(int & a_X, int & a_Y, int & a_Z, NIBBLETYPE { NIBBLETYPE meta; BLOCKTYPE type; - GetBlockTypeMeta(a_X + x, a_Y, a_Z + z, type, meta); - IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((a_Meta & meta) == a_Meta); + GetBlockTypeMeta(a_BlockPos.addedXZ(x, z), type, meta); + IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((meta & 0x07) == a_Meta); } } if (IsLarge) { - --a_Z; + --a_BlockPos.z; return true; } @@ -1708,15 +1709,15 @@ bool cWorld::GetLargeTreeAdjustment(int & a_X, int & a_Y, int & a_Z, NIBBLETYPE { NIBBLETYPE meta; BLOCKTYPE type; - GetBlockTypeMeta(a_X + x, a_Y, a_Z + z, type, meta); - IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((a_Meta & meta) == a_Meta); + GetBlockTypeMeta(a_BlockPos.addedXZ(x, z), type, meta); + IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((meta & 0x07) == a_Meta); } } if (IsLarge) { - --a_Z; - --a_X; + --a_BlockPos.x; + --a_BlockPos.z; return true; } @@ -1728,14 +1729,14 @@ bool cWorld::GetLargeTreeAdjustment(int & a_X, int & a_Y, int & a_Z, NIBBLETYPE { NIBBLETYPE meta; BLOCKTYPE type; - GetBlockTypeMeta(a_X + x, a_Y, a_Z + z, type, meta); - IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((a_Meta & meta) == a_Meta); + GetBlockTypeMeta(a_BlockPos.addedXZ(x, z), type, meta); + IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((meta & 0x07) == a_Meta); } } if (IsLarge) { - --a_X; + --a_BlockPos.x; } return IsLarge; @@ -1745,11 +1746,12 @@ bool cWorld::GetLargeTreeAdjustment(int & a_X, int & a_Y, int & a_Z, NIBBLETYPE -bool cWorld::GrowTreeByBiome(int a_X, int a_Y, int a_Z) +bool cWorld::GrowTreeByBiome(const Vector3i a_BlockPos) { cNoise Noise(m_Generator.GetSeed()); sSetBlockVector Logs, Other; - GetTreeImageByBiome({ a_X, a_Y, a_Z }, Noise, static_cast<int>(std::chrono::duration_cast<cTickTimeLong>(m_WorldAge).count() & 0xffffffff), GetBiomeAt(a_X, a_Z), Logs, Other); + auto seq = static_cast<int>(std::chrono::duration_cast<cTickTimeLong>(m_WorldAge).count() & 0xffffffff); + GetTreeImageByBiome(a_BlockPos, Noise, seq, GetBiomeAt(a_BlockPos.x, a_BlockPos.z), Logs, Other); Other.insert(Other.begin(), Logs.begin(), Logs.end()); Logs.clear(); return GrowTreeImage(Other); |