Merge pull request #2346 from SamJBarney/TreeGrowthUpdate
Sapling Growth Update
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "Globals.h"
|
||||
#include "Trees.h"
|
||||
#include "../BlockID.h"
|
||||
#include "../World.h"
|
||||
|
||||
|
||||
|
||||
@@ -200,7 +201,8 @@ void GetTreeImageByBiome(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_No
|
||||
}
|
||||
else
|
||||
{
|
||||
GetJungleTreeImage(a_BlockX, a_BlockY, a_BlockZ, a_Noise, a_Seq, a_LogBlocks, a_OtherBlocks);
|
||||
bool IsLarge = a_Noise.IntNoise3DInt(a_BlockX + 32 * a_Seq, a_BlockY + 32 * a_Seq, a_BlockZ) < 0x60000000;
|
||||
GetJungleTreeImage(a_BlockX, a_BlockY, a_BlockZ, a_Noise, a_Seq, a_LogBlocks, a_OtherBlocks, IsLarge);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -920,9 +922,9 @@ void GetAppleBushImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Nois
|
||||
|
||||
|
||||
|
||||
void GetJungleTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Noise, int a_Seq, sSetBlockVector & a_LogBlocks, sSetBlockVector & a_OtherBlocks)
|
||||
void GetJungleTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Noise, int a_Seq, sSetBlockVector & a_LogBlocks, sSetBlockVector & a_OtherBlocks, bool a_Large)
|
||||
{
|
||||
if (a_Noise.IntNoise3DInt(a_BlockX + 32 * a_Seq, a_BlockY + 32 * a_Seq, a_BlockZ) < 0x60000000)
|
||||
if (!a_Large)
|
||||
{
|
||||
GetSmallJungleTreeImage(a_BlockX, a_BlockY, a_BlockZ, a_Noise, a_Seq, a_LogBlocks, a_OtherBlocks);
|
||||
}
|
||||
@@ -1041,3 +1043,89 @@ void GetSmallJungleTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise &
|
||||
|
||||
|
||||
|
||||
|
||||
bool GetLargeTreeAdjustment(cWorld & a_World, int & a_X, int & a_Y, int & a_Z, NIBBLETYPE a_Meta)
|
||||
{
|
||||
bool IsLarge = true;
|
||||
a_Meta = a_Meta & 0x07;
|
||||
|
||||
// Check to see if we are the northwest corner
|
||||
for (int x = 0; x < 2; ++x)
|
||||
{
|
||||
for (int z = 0; z < 2; ++z)
|
||||
{
|
||||
NIBBLETYPE meta;
|
||||
BLOCKTYPE type;
|
||||
a_World.GetBlockTypeMeta(a_X + x, a_Y, a_Z + z, type, meta);
|
||||
IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((a_Meta & meta) == a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsLarge)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
IsLarge = true;
|
||||
// Check to see if we are the southwest corner
|
||||
for (int x = 0; x < 2; ++x)
|
||||
{
|
||||
for (int z = 0; z > -2; --z)
|
||||
{
|
||||
NIBBLETYPE meta;
|
||||
BLOCKTYPE type;
|
||||
a_World.GetBlockTypeMeta(a_X + x, a_Y, a_Z + z, type, meta);
|
||||
IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((a_Meta & meta) == a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsLarge)
|
||||
{
|
||||
--a_Z;
|
||||
return true;
|
||||
}
|
||||
|
||||
IsLarge = true;
|
||||
// Check to see if we are the southeast corner
|
||||
for (int x = 0; x > -2; --x)
|
||||
{
|
||||
for (int z = 0; z > -2; --z)
|
||||
{
|
||||
NIBBLETYPE meta;
|
||||
BLOCKTYPE type;
|
||||
a_World.GetBlockTypeMeta(a_X + x, a_Y, a_Z + z, type, meta);
|
||||
IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((a_Meta & meta) == a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsLarge)
|
||||
{
|
||||
--a_Z;
|
||||
--a_X;
|
||||
return true;
|
||||
}
|
||||
|
||||
IsLarge = true;
|
||||
// Check to see if we are the northeast corner
|
||||
for (int x = 0; x > -2; --x)
|
||||
{
|
||||
for (int z = 0; z < 2; ++z)
|
||||
{
|
||||
NIBBLETYPE meta;
|
||||
BLOCKTYPE type;
|
||||
a_World.GetBlockTypeMeta(a_X + x, a_Y, a_Z + z, type, meta);
|
||||
IsLarge = IsLarge && (type == E_BLOCK_SAPLING) && ((a_Meta & meta) == a_Meta);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsLarge)
|
||||
{
|
||||
--a_X;
|
||||
}
|
||||
|
||||
return IsLarge;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@ logs can overwrite others(leaves), but others shouldn't overwrite logs. This is
|
||||
#include "../ChunkDef.h"
|
||||
#include "../Noise/Noise.h"
|
||||
|
||||
class cWorld;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -96,7 +98,7 @@ void GetSwampTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Nois
|
||||
void GetAppleBushImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Noise, int a_Seq, sSetBlockVector & a_LogBlocks, sSetBlockVector & a_OtherBlocks);
|
||||
|
||||
/// Generates an image of a random jungle tree
|
||||
void GetJungleTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Noise, int a_Seq, sSetBlockVector & a_LogBlocks, sSetBlockVector & a_OtherBlocks);
|
||||
void GetJungleTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Noise, int a_Seq, sSetBlockVector & a_LogBlocks, sSetBlockVector & a_OtherBlocks, bool a_Large);
|
||||
|
||||
/// Generates an image of a large jungle tree (2x2 trunk)
|
||||
void GetLargeJungleTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Noise, int a_Seq, sSetBlockVector & a_LogBlocks, sSetBlockVector & a_OtherBlocks);
|
||||
@@ -104,7 +106,7 @@ void GetLargeJungleTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise &
|
||||
/// Generates an image of a small jungle tree (1x1 trunk)
|
||||
void GetSmallJungleTreeImage(int a_BlockX, int a_BlockY, int a_BlockZ, cNoise & a_Noise, int a_Seq, sSetBlockVector & a_LogBlocks, sSetBlockVector & a_OtherBlocks);
|
||||
|
||||
|
||||
bool GetLargeTreeAdjustment(cWorld & a_World, int & a_X, int & a_Y, int & a_Z, NIBBLETYPE a_Meta);
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user