summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-02-08 17:01:44 +0100
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-02-08 17:01:44 +0100
commit7c0a7d662daec45a44bdf598735d1600bf7c187d (patch)
tree28886a3bb1b71b127821a05d58505e26b08e0a0b /source
parentAdded cBlockArea:CopyTo() and :CopyFrom(), so now block areas can be duplicated easily. (diff)
downloadcuberite-7c0a7d662daec45a44bdf598735d1600bf7c187d.tar
cuberite-7c0a7d662daec45a44bdf598735d1600bf7c187d.tar.gz
cuberite-7c0a7d662daec45a44bdf598735d1600bf7c187d.tar.bz2
cuberite-7c0a7d662daec45a44bdf598735d1600bf7c187d.tar.lz
cuberite-7c0a7d662daec45a44bdf598735d1600bf7c187d.tar.xz
cuberite-7c0a7d662daec45a44bdf598735d1600bf7c187d.tar.zst
cuberite-7c0a7d662daec45a44bdf598735d1600bf7c187d.zip
Diffstat (limited to 'source')
-rw-r--r--source/Bindings.cpp142
-rw-r--r--source/Bindings.h2
-rw-r--r--source/ChunkDef.h6
-rw-r--r--source/Generating/ChunkDesc.cpp219
-rw-r--r--source/Generating/ChunkDesc.h196
-rw-r--r--source/Generating/ChunkGenerator.cpp17
-rw-r--r--source/Generating/ChunkGenerator.h4
-rw-r--r--source/Generating/ComposableGenerator.cpp8
-rw-r--r--source/Generating/ComposableGenerator.h2
9 files changed, 394 insertions, 202 deletions
diff --git a/source/Bindings.cpp b/source/Bindings.cpp
index d3450955e..0dad837ba 100644
--- a/source/Bindings.cpp
+++ b/source/Bindings.cpp
@@ -1,6 +1,6 @@
/*
** Lua binding: AllToLua
-** Generated automatically by tolua++-1.0.92 on 02/07/13 11:39:26.
+** Generated automatically by tolua++-1.0.92 on 02/08/13 16:56:54.
*/
#ifndef __cplusplus
@@ -19147,16 +19147,16 @@ static int tolua_AllToLua_cChunkDesc_SetBlock00(lua_State* tolua_S)
#endif
{
cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
- int a_X = ((int) tolua_tonumber(tolua_S,2,0));
- int a_Y = ((int) tolua_tonumber(tolua_S,3,0));
- int a_Z = ((int) tolua_tonumber(tolua_S,4,0));
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelY = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,4,0));
unsigned char a_BlockType = (( unsigned char) tolua_tonumber(tolua_S,5,0));
unsigned char a_BlockMeta = (( unsigned char) tolua_tonumber(tolua_S,6,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetBlock'", NULL);
#endif
{
- self->SetBlock(a_X,a_Y,a_Z,a_BlockType,a_BlockMeta);
+ self->SetBlock(a_RelX,a_RelY,a_RelZ,a_BlockType,a_BlockMeta);
}
}
return 0;
@@ -19168,9 +19168,48 @@ static int tolua_AllToLua_cChunkDesc_SetBlock00(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
-/* method: GetBlock of class cChunkDesc */
-#ifndef TOLUA_DISABLE_tolua_AllToLua_cChunkDesc_GetBlock00
-static int tolua_AllToLua_cChunkDesc_GetBlock00(lua_State* tolua_S)
+/* method: SetBlockType of class cChunkDesc */
+#ifndef TOLUA_DISABLE_tolua_AllToLua_cChunkDesc_SetBlockType00
+static int tolua_AllToLua_cChunkDesc_SetBlockType00(lua_State* tolua_S)
+{
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isusertype(tolua_S,1,"cChunkDesc",0,&tolua_err) ||
+ !tolua_isnumber(tolua_S,2,0,&tolua_err) ||
+ !tolua_isnumber(tolua_S,3,0,&tolua_err) ||
+ !tolua_isnumber(tolua_S,4,0,&tolua_err) ||
+ !tolua_isnumber(tolua_S,5,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,6,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+ cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelY = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,4,0));
+ unsigned char a_BlockType = (( unsigned char) tolua_tonumber(tolua_S,5,0));
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetBlockType'", NULL);
+#endif
+ {
+ self->SetBlockType(a_RelX,a_RelY,a_RelZ,a_BlockType);
+ }
+ }
+ return 0;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'SetBlockType'.",&tolua_err);
+ return 0;
+#endif
+}
+#endif //#ifndef TOLUA_DISABLE
+
+/* method: GetBlockType of class cChunkDesc */
+#ifndef TOLUA_DISABLE_tolua_AllToLua_cChunkDesc_GetBlockType00
+static int tolua_AllToLua_cChunkDesc_GetBlockType00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
@@ -19186,21 +19225,60 @@ static int tolua_AllToLua_cChunkDesc_GetBlock00(lua_State* tolua_S)
#endif
{
cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
- int a_X = ((int) tolua_tonumber(tolua_S,2,0));
- int a_Y = ((int) tolua_tonumber(tolua_S,3,0));
- int a_Z = ((int) tolua_tonumber(tolua_S,4,0));
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelY = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,4,0));
#ifndef TOLUA_RELEASE
- if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetBlock'", NULL);
+ if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetBlockType'", NULL);
#endif
{
- unsigned char tolua_ret = ( unsigned char) self->GetBlock(a_X,a_Y,a_Z);
+ unsigned char tolua_ret = ( unsigned char) self->GetBlockType(a_RelX,a_RelY,a_RelZ);
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
}
}
return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
- tolua_error(tolua_S,"#ferror in function 'GetBlock'.",&tolua_err);
+ tolua_error(tolua_S,"#ferror in function 'GetBlockType'.",&tolua_err);
+ return 0;
+#endif
+}
+#endif //#ifndef TOLUA_DISABLE
+
+/* method: SetBlockMeta of class cChunkDesc */
+#ifndef TOLUA_DISABLE_tolua_AllToLua_cChunkDesc_SetBlockMeta00
+static int tolua_AllToLua_cChunkDesc_SetBlockMeta00(lua_State* tolua_S)
+{
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isusertype(tolua_S,1,"cChunkDesc",0,&tolua_err) ||
+ !tolua_isnumber(tolua_S,2,0,&tolua_err) ||
+ !tolua_isnumber(tolua_S,3,0,&tolua_err) ||
+ !tolua_isnumber(tolua_S,4,0,&tolua_err) ||
+ !tolua_isnumber(tolua_S,5,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,6,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+ cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelY = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,4,0));
+ unsigned char a_BlockMeta = (( unsigned char) tolua_tonumber(tolua_S,5,0));
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetBlockMeta'", NULL);
+#endif
+ {
+ self->SetBlockMeta(a_RelX,a_RelY,a_RelZ,a_BlockMeta);
+ }
+ }
+ return 0;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'SetBlockMeta'.",&tolua_err);
return 0;
#endif
}
@@ -19224,14 +19302,14 @@ static int tolua_AllToLua_cChunkDesc_GetBlockMeta00(lua_State* tolua_S)
#endif
{
cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
- int a_X = ((int) tolua_tonumber(tolua_S,2,0));
- int a_Y = ((int) tolua_tonumber(tolua_S,3,0));
- int a_Z = ((int) tolua_tonumber(tolua_S,4,0));
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelY = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,4,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetBlockMeta'", NULL);
#endif
{
- unsigned char tolua_ret = ( unsigned char) self->GetBlockMeta(a_X,a_Y,a_Z);
+ unsigned char tolua_ret = ( unsigned char) self->GetBlockMeta(a_RelX,a_RelY,a_RelZ);
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
}
}
@@ -19262,14 +19340,14 @@ static int tolua_AllToLua_cChunkDesc_SetBiome00(lua_State* tolua_S)
#endif
{
cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
- int a_X = ((int) tolua_tonumber(tolua_S,2,0));
- int a_Z = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,3,0));
int a_BiomeID = ((int) tolua_tonumber(tolua_S,4,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetBiome'", NULL);
#endif
{
- self->SetBiome(a_X,a_Z,a_BiomeID);
+ self->SetBiome(a_RelX,a_RelZ,a_BiomeID);
}
}
return 0;
@@ -19298,13 +19376,13 @@ static int tolua_AllToLua_cChunkDesc_GetBiome00(lua_State* tolua_S)
#endif
{
cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
- int a_X = ((int) tolua_tonumber(tolua_S,2,0));
- int a_Z = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,3,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetBiome'", NULL);
#endif
{
- int tolua_ret = (int) self->GetBiome(a_X,a_Z);
+ EMCSBiome tolua_ret = (EMCSBiome) self->GetBiome(a_RelX,a_RelZ);
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
}
}
@@ -19335,14 +19413,14 @@ static int tolua_AllToLua_cChunkDesc_SetHeight00(lua_State* tolua_S)
#endif
{
cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
- int a_X = ((int) tolua_tonumber(tolua_S,2,0));
- int a_Z = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,3,0));
int a_Height = ((int) tolua_tonumber(tolua_S,4,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetHeight'", NULL);
#endif
{
- self->SetHeight(a_X,a_Z,a_Height);
+ self->SetHeight(a_RelX,a_RelZ,a_Height);
}
}
return 0;
@@ -19371,13 +19449,13 @@ static int tolua_AllToLua_cChunkDesc_GetHeight00(lua_State* tolua_S)
#endif
{
cChunkDesc* self = (cChunkDesc*) tolua_tousertype(tolua_S,1,0);
- int a_X = ((int) tolua_tonumber(tolua_S,2,0));
- int a_Z = ((int) tolua_tonumber(tolua_S,3,0));
+ int a_RelX = ((int) tolua_tonumber(tolua_S,2,0));
+ int a_RelZ = ((int) tolua_tonumber(tolua_S,3,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetHeight'", NULL);
#endif
{
- int tolua_ret = (int) self->GetHeight(a_X,a_Z);
+ int tolua_ret = (int) self->GetHeight(a_RelX,a_RelZ);
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
}
}
@@ -21915,7 +21993,9 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_beginmodule(tolua_S,"cChunkDesc");
tolua_function(tolua_S,"FillBlocks",tolua_AllToLua_cChunkDesc_FillBlocks00);
tolua_function(tolua_S,"SetBlock",tolua_AllToLua_cChunkDesc_SetBlock00);
- tolua_function(tolua_S,"GetBlock",tolua_AllToLua_cChunkDesc_GetBlock00);
+ tolua_function(tolua_S,"SetBlockType",tolua_AllToLua_cChunkDesc_SetBlockType00);
+ tolua_function(tolua_S,"GetBlockType",tolua_AllToLua_cChunkDesc_GetBlockType00);
+ tolua_function(tolua_S,"SetBlockMeta",tolua_AllToLua_cChunkDesc_SetBlockMeta00);
tolua_function(tolua_S,"GetBlockMeta",tolua_AllToLua_cChunkDesc_GetBlockMeta00);
tolua_function(tolua_S,"SetBiome",tolua_AllToLua_cChunkDesc_SetBiome00);
tolua_function(tolua_S,"GetBiome",tolua_AllToLua_cChunkDesc_GetBiome00);
diff --git a/source/Bindings.h b/source/Bindings.h
index 5d3bb6014..121189ed4 100644
--- a/source/Bindings.h
+++ b/source/Bindings.h
@@ -1,6 +1,6 @@
/*
** Lua binding: AllToLua
-** Generated automatically by tolua++-1.0.92 on 02/07/13 11:39:26.
+** Generated automatically by tolua++-1.0.92 on 02/08/13 16:56:55.
*/
/* Exported function */
diff --git a/source/ChunkDef.h b/source/ChunkDef.h
index 0eebabefe..9e5f190b8 100644
--- a/source/ChunkDef.h
+++ b/source/ChunkDef.h
@@ -209,6 +209,12 @@ public:
}
+ inline static void SetBlock(BLOCKTYPE * a_BlockTypes, int a_Index, BLOCKTYPE a_Type)
+ {
+ a_BlockTypes[a_Index] = a_Type;
+ }
+
+
inline static BLOCKTYPE GetBlock(const BLOCKTYPE * a_BlockTypes, int a_X, int a_Y, int a_Z)
{
ASSERT((a_X >= 0) && (a_X < Width));
diff --git a/source/Generating/ChunkDesc.cpp b/source/Generating/ChunkDesc.cpp
new file mode 100644
index 000000000..29eb80be7
--- /dev/null
+++ b/source/Generating/ChunkDesc.cpp
@@ -0,0 +1,219 @@
+
+// ChunkDesc.cpp
+
+// Implements the cChunkDesc class representing the chunk description used while generating a chunk. This class is also exported to Lua for HOOK_CHUNK_GENERATING.
+
+#include "Globals.h"
+#include "ChunkDesc.h"
+
+
+
+
+
+cChunkDesc::cChunkDesc(void) :
+ m_bUseDefaultBiomes(true),
+ m_bUseDefaultHeight(true),
+ m_bUseDefaultComposition(true),
+ m_bUseDefaultStructures(true),
+ m_bUseDefaultFinish(true)
+{
+ memset(m_BlockTypes, 0, sizeof(cChunkDef::BlockTypes));
+ memset(m_BlockMeta, 0, sizeof(cChunkDef::BlockNibbles));
+ memset(m_BiomeMap, 0, sizeof(cChunkDef::BiomeMap));
+ memset(m_HeightMap, 0, sizeof(cChunkDef::HeightMap));
+}
+
+
+
+
+
+cChunkDesc::~cChunkDesc()
+{
+ // Nothing needed yet
+}
+
+
+
+
+
+void cChunkDesc::FillBlocks(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
+{
+ const NIBBLETYPE CompressedMeta = a_BlockMeta | (a_BlockMeta << 4);
+ memset(m_BlockTypes, a_BlockType, sizeof(cChunkDef::BlockTypes));
+ memset(m_BlockMeta, CompressedMeta, sizeof(cChunkDef::BlockNibbles));
+}
+
+
+
+
+
+void cChunkDesc::SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
+{
+ int Index = cChunkDef::MakeIndex(a_RelX, a_RelY, a_RelZ);
+ cChunkDef::SetBlock(m_BlockTypes, Index, a_BlockType);
+ cChunkDef::SetNibble(m_BlockMeta, Index, a_BlockMeta);
+}
+
+
+
+
+
+void cChunkDesc::SetBlockType(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType)
+{
+ cChunkDef::SetBlock(m_BlockTypes, a_RelX, a_RelY, a_RelZ, a_BlockType);
+}
+
+
+
+
+
+BLOCKTYPE cChunkDesc::GetBlockType(int a_RelX, int a_RelY, int a_RelZ)
+{
+ return cChunkDef::GetBlock(m_BlockTypes, a_RelX, a_RelY, a_RelZ);
+}
+
+
+
+
+
+NIBBLETYPE cChunkDesc::GetBlockMeta(int a_RelX, int a_RelY, int a_RelZ)
+{
+ return cChunkDef::GetNibble(m_BlockMeta, a_RelX, a_RelY, a_RelZ);
+}
+
+
+
+
+
+void cChunkDesc::SetBlockMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_BlockMeta)
+{
+ cChunkDef::SetNibble(m_BlockMeta, a_RelX, a_RelY, a_RelZ, a_BlockMeta);
+}
+
+
+
+
+
+void cChunkDesc::SetBiome(int a_RelX, int a_RelZ, int a_BiomeID)
+{
+ cChunkDef::SetBiome(m_BiomeMap, a_RelX, a_RelZ, (EMCSBiome)a_BiomeID);
+}
+
+
+
+
+EMCSBiome cChunkDesc::GetBiome(int a_RelX, int a_RelZ)
+{
+ return cChunkDef::GetBiome(m_BiomeMap, a_RelX, a_RelZ);
+}
+
+
+
+
+
+void cChunkDesc::SetHeight(int a_RelX, int a_RelZ, int a_Height)
+{
+ cChunkDef::SetHeight(m_HeightMap, a_RelX, a_RelZ, a_Height);
+}
+
+
+
+
+
+int cChunkDesc::GetHeight(int a_RelX, int a_RelZ)
+{
+ return cChunkDef::GetHeight(m_HeightMap, a_RelX, a_RelZ);
+}
+
+
+
+
+
+void cChunkDesc::SetUseDefaultBiomes(bool a_bUseDefaultBiomes)
+{
+ m_bUseDefaultBiomes = a_bUseDefaultBiomes;
+}
+
+
+
+
+
+bool cChunkDesc::IsUsingDefaultBiomes(void) const
+{
+ return m_bUseDefaultBiomes;
+}
+
+
+
+
+
+void cChunkDesc::SetUseDefaultHeight(bool a_bUseDefaultHeight)
+{
+ m_bUseDefaultHeight = a_bUseDefaultHeight;
+}
+
+
+
+
+
+bool cChunkDesc::IsUsingDefaultHeight(void) const
+{
+ return m_bUseDefaultHeight;
+}
+
+
+
+
+
+void cChunkDesc::SetUseDefaultComposition(bool a_bUseDefaultComposition)
+{
+ m_bUseDefaultComposition = a_bUseDefaultComposition;
+}
+
+
+
+
+
+bool cChunkDesc::IsUsingDefaultComposition(void) const
+{
+ return m_bUseDefaultComposition;
+}
+
+
+
+
+
+void cChunkDesc::SetUseDefaultStructures(bool a_bUseDefaultStructures)
+{
+ m_bUseDefaultStructures = a_bUseDefaultStructures;
+}
+
+
+
+
+
+bool cChunkDesc::IsUsingDefaultStructures(void) const
+{
+ return m_bUseDefaultStructures;
+}
+
+
+
+
+
+void cChunkDesc::SetUseDefaultFinish(bool a_bUseDefaultFinish)
+{
+ m_bUseDefaultFinish = a_bUseDefaultFinish;
+}
+
+
+
+
+
+bool cChunkDesc::IsUsingDefaultFinish(void) const
+{
+ return m_bUseDefaultFinish;
+}
+
+
+
diff --git a/source/Generating/ChunkDesc.h b/source/Generating/ChunkDesc.h
index 02b67998a..e8d4aa17a 100644
--- a/source/Generating/ChunkDesc.h
+++ b/source/Generating/ChunkDesc.h
@@ -15,175 +15,69 @@
-class cChunkDesc // tolua_export
-{ // tolua_export
+// tolua_begin
+class cChunkDesc
+{
public:
- cChunkDesc(
- cChunkDef::BlockTypes & a_BlockTypes,
- cChunkDef::BlockNibbles & a_BlockNibbles ,
- cChunkDef::HeightMap & a_HeightMap,
- cChunkDef::BiomeMap & a_BiomeMap
- )
- : m_BiomeMap(a_BiomeMap)
- , m_BlockTypes(a_BlockTypes)
- , m_BlockMeta(a_BlockNibbles)
- , m_HeightMap(a_HeightMap)
- , m_bUseDefaultBiomes(true)
- , m_bUseDefaultHeight(true)
- , m_bUseDefaultComposition(true)
- , m_bUseDefaultStructures(true)
- , m_bUseDefaultFinish(true)
- {
- memset(m_BlockTypes, 0, sizeof(cChunkDef::BlockTypes));
- memset(m_BlockMeta, 0, sizeof(cChunkDef::BlockNibbles));
- memset(m_BiomeMap, 0, sizeof(cChunkDef::BiomeMap));
- memset(m_HeightMap, 0, sizeof(cChunkDef::HeightMap));
- }
+ // tolua_end
- ~cChunkDesc()
- {}
+ cChunkDesc(void);
+ ~cChunkDesc();
// tolua_begin
+ void FillBlocks(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
+ void SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
-
- // Block functions:
- void FillBlocks(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
- {
- const NIBBLETYPE CompressedMeta = a_BlockMeta | a_BlockMeta << 4;
- memset(m_BlockTypes, a_BlockType, sizeof(cChunkDef::BlockTypes));
- memset(m_BlockMeta, CompressedMeta, sizeof(cChunkDef::BlockNibbles));
- }
-
-
- void SetBlock(int a_X, int a_Y, int a_Z, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
- {
- cChunkDef::SetBlock( m_BlockTypes, a_X, a_Y, a_Z, a_BlockType );
- cChunkDef::SetNibble( m_BlockMeta, a_X, a_Y, a_Z, a_BlockMeta );
- }
-
-
- BLOCKTYPE GetBlock( int a_X, int a_Y, int a_Z )
- {
- return cChunkDef::GetBlock( m_BlockTypes, a_X, a_Y, a_Z );
- }
-
-
- NIBBLETYPE GetBlockMeta( int a_X, int a_Y, int a_Z )
- {
- return cChunkDef::GetNibble( m_BlockMeta, a_X, a_Y, a_Z );
- }
-
-
-
- // Biome functinos
- void SetBiome( int a_X, int a_Z, int a_BiomeID )
- {
- cChunkDef::SetBiome( m_BiomeMap, a_X, a_Z, (EMCSBiome)a_BiomeID );
- }
-
-
- int GetBiome( int a_X, int a_Z )
- {
- return cChunkDef::GetBiome( m_BiomeMap, a_X, a_Z );
- }
-
-
-
- // Height functions
- void SetHeight( int a_X, int a_Z, int a_Height )
- {
- cChunkDef::SetHeight( m_HeightMap, a_X, a_Z, a_Height );
- }
-
-
- int GetHeight( int a_X, int a_Z )
- {
- return cChunkDef::GetHeight( m_HeightMap, a_X, a_Z );
- }
-
-
-
- // Functions to explicitly tell the server to use default behavior for certain parts of generating terrain
- void SetUseDefaultBiomes(bool a_bUseDefaultBiomes)
- {
- m_bUseDefaultBiomes = a_bUseDefaultBiomes;
- }
-
+ void SetBlockType(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType);
+ BLOCKTYPE GetBlockType(int a_RelX, int a_RelY, int a_RelZ);
- bool IsUsingDefaultBiomes(void) const
- {
- return m_bUseDefaultBiomes;
- }
-
-
- void SetUseDefaultHeight(bool a_bUseDefaultHeight)
- {
- m_bUseDefaultHeight = a_bUseDefaultHeight;
- }
-
-
- bool IsUsingDefaultHeight(void) const
- {
- return m_bUseDefaultHeight;
- }
-
-
- void SetUseDefaultComposition(bool a_bUseDefaultComposition)
- {
- m_bUseDefaultComposition = a_bUseDefaultComposition;
- }
-
-
- bool IsUsingDefaultComposition(void) const
- {
- return m_bUseDefaultComposition;
- }
-
-
- void SetUseDefaultStructures(bool a_bUseDefaultStructures)
- {
- m_bUseDefaultStructures = a_bUseDefaultStructures;
- }
-
-
- bool IsUsingDefaultStructures(void) const
- {
- return m_bUseDefaultStructures;
- }
-
-
- void SetUseDefaultFinish(bool a_bUseDefaultFinish)
- {
- m_bUseDefaultFinish = a_bUseDefaultFinish;
- }
-
-
- bool IsUsingDefaultFinish(void) const
- {
- return m_bUseDefaultFinish;
- }
+ void SetBlockMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_BlockMeta);
+ NIBBLETYPE GetBlockMeta(int a_RelX, int a_RelY, int a_RelZ);
+
+ void SetBiome(int a_RelX, int a_RelZ, int a_BiomeID);
+ EMCSBiome GetBiome(int a_RelX, int a_RelZ);
+
+ void SetHeight(int a_RelX, int a_RelZ, int a_Height);
+ int GetHeight(int a_RelX, int a_RelZ);
+
+ // Default generation:
+ void SetUseDefaultBiomes(bool a_bUseDefaultBiomes);
+ bool IsUsingDefaultBiomes(void) const;
+ void SetUseDefaultHeight(bool a_bUseDefaultHeight);
+ bool IsUsingDefaultHeight(void) const;
+ void SetUseDefaultComposition(bool a_bUseDefaultComposition);
+ bool IsUsingDefaultComposition(void) const;
+ void SetUseDefaultStructures(bool a_bUseDefaultStructures);
+ bool IsUsingDefaultStructures(void) const;
+ void SetUseDefaultFinish(bool a_bUseDefaultFinish);
+ bool IsUsingDefaultFinish(void) const;
// tolua_end
// Accessors used by cChunkGenerator::Generator descendants:
- cChunkDef::BiomeMap & GetBiomeMap (void) { return m_BiomeMap; }
- cChunkDef::BlockTypes & GetBlockTypes(void) { return m_BlockTypes; }
- cChunkDef::BlockNibbles & GetBlockMetas(void) { return m_BlockMeta; }
- cChunkDef::HeightMap & GetHeightMap (void) { return m_HeightMap; }
-
+ cChunkDef::BiomeMap & GetBiomeMap (void) { return m_BiomeMap; }
+ cChunkDef::BlockTypes & GetBlockTypes (void) { return m_BlockTypes; }
+ cChunkDef::BlockNibbles & GetBlockMetas (void) { return m_BlockMeta; }
+ cChunkDef::HeightMap & GetHeightMap (void) { return m_HeightMap; }
+ cEntityList & GetEntities (void) { return m_Entities; }
+ cBlockEntityList & GetBlockEntities(void) { return m_BlockEntities; }
+
private:
+ cChunkDef::BiomeMap m_BiomeMap;
+ cChunkDef::BlockTypes m_BlockTypes;
+ cChunkDef::BlockNibbles m_BlockMeta;
+ cChunkDef::HeightMap m_HeightMap;
+ cEntityList m_Entities; // Individual entities are NOT owned by this object!
+ cBlockEntityList m_BlockEntities; // Individual block entities are NOT owned by this object!
+
+
bool m_bUseDefaultBiomes;
bool m_bUseDefaultHeight;
bool m_bUseDefaultComposition;
bool m_bUseDefaultStructures;
bool m_bUseDefaultFinish;
-
- cChunkDef::BiomeMap & m_BiomeMap;
- cChunkDef::BlockTypes & m_BlockTypes;
- cChunkDef::BlockNibbles & m_BlockMeta;
- cChunkDef::HeightMap & m_HeightMap;
} ; // tolua_export
diff --git a/source/Generating/ChunkGenerator.cpp b/source/Generating/ChunkGenerator.cpp
index 70b95f0d9..0285fa7af 100644
--- a/source/Generating/ChunkGenerator.cpp
+++ b/source/Generating/ChunkGenerator.cpp
@@ -266,24 +266,17 @@ void cChunkGenerator::Execute(void)
void cChunkGenerator::DoGenerate(int a_ChunkX, int a_ChunkY, int a_ChunkZ)
{
- cChunkDef::BiomeMap BiomeMap;
- cChunkDef::BlockTypes BlockTypes;
- cChunkDef::BlockNibbles BlockMeta;
- cChunkDef::HeightMap HeightMap;
- cEntityList Entities;
- cBlockEntityList BlockEntities;
-
- cChunkDesc ChunkDesc(BlockTypes, BlockMeta, HeightMap, BiomeMap);
+ cChunkDesc ChunkDesc;
cRoot::Get()->GetPluginManager()->CallHookChunkGenerating(m_World, a_ChunkX, a_ChunkZ, &ChunkDesc);
- m_Generator->DoGenerate(a_ChunkX, a_ChunkZ, ChunkDesc, Entities, BlockEntities);
+ m_Generator->DoGenerate(a_ChunkX, a_ChunkZ, ChunkDesc);
cRoot::Get()->GetPluginManager()->CallHookChunkGenerated(m_World, a_ChunkX, a_ChunkZ, &ChunkDesc);
m_World->SetChunkData(
a_ChunkX, a_ChunkY, a_ChunkZ,
- BlockTypes, BlockMeta,
+ ChunkDesc.GetBlockTypes(), ChunkDesc.GetBlockMetas(),
NULL, NULL, // We don't have lighting, chunk will be lighted when needed
- &HeightMap, &BiomeMap,
- Entities, BlockEntities,
+ &ChunkDesc.GetHeightMap(), &ChunkDesc.GetBiomeMap(),
+ ChunkDesc.GetEntities(), ChunkDesc.GetBlockEntities(),
true
);
}
diff --git a/source/Generating/ChunkGenerator.h b/source/Generating/ChunkGenerator.h
index e89e9def8..2d3bb8082 100644
--- a/source/Generating/ChunkGenerator.h
+++ b/source/Generating/ChunkGenerator.h
@@ -56,8 +56,8 @@ public:
/// Returns the biome at the specified coords. Used by ChunkMap if an invalid chunk is queried for biome. Default implementation uses GenerateBiomes().
virtual EMCSBiome GetBiomeAt(int a_BlockX, int a_BlockZ);
- /// Called in a separate thread to do the actual chunk generation. Generator should generate into a_ChunkDesc, a_Entities and a_BlockEntities.
- virtual void DoGenerate(int a_ChunkX, int a_ChunkZ, cChunkDesc & a_ChunkDesc, cEntityList & a_Entities, cBlockEntityList & a_BlockEntities) = 0;
+ /// Called in a separate thread to do the actual chunk generation. Generator should generate into a_ChunkDesc.
+ virtual void DoGenerate(int a_ChunkX, int a_ChunkZ, cChunkDesc & a_ChunkDesc) = 0;
protected:
cChunkGenerator & m_ChunkGenerator;
diff --git a/source/Generating/ComposableGenerator.cpp b/source/Generating/ComposableGenerator.cpp
index a758d5049..793d6a449 100644
--- a/source/Generating/ComposableGenerator.cpp
+++ b/source/Generating/ComposableGenerator.cpp
@@ -88,14 +88,14 @@ void cComposableGenerator::GenerateBiomes(int a_ChunkX, int a_ChunkZ, cChunkDef:
-void cComposableGenerator::DoGenerate(int a_ChunkX, int a_ChunkZ, cChunkDesc & a_ChunkDesc, cEntityList & a_Entities, cBlockEntityList & a_BlockEntities)
+void cComposableGenerator::DoGenerate(int a_ChunkX, int a_ChunkZ, cChunkDesc & a_ChunkDesc)
{
cChunkDef::BiomeMap & BiomeMap = a_ChunkDesc.GetBiomeMap();
cChunkDef::BlockTypes & BlockTypes = a_ChunkDesc.GetBlockTypes();
cChunkDef::BlockNibbles & BlockMeta = a_ChunkDesc.GetBlockMetas();
cChunkDef::HeightMap & HeightMap = a_ChunkDesc.GetHeightMap();
- cEntityList & Entities = a_Entities;
- cBlockEntityList & BlockEntities = a_BlockEntities;
+ cEntityList & Entities = a_ChunkDesc.GetEntities();
+ cBlockEntityList & BlockEntities = a_ChunkDesc.GetBlockEntities();
if (a_ChunkDesc.IsUsingDefaultBiomes())
{
@@ -109,7 +109,7 @@ void cComposableGenerator::DoGenerate(int a_ChunkX, int a_ChunkZ, cChunkDesc & a
if (a_ChunkDesc.IsUsingDefaultComposition())
{
- m_CompositionGen->ComposeTerrain(a_ChunkX, a_ChunkZ, BlockTypes, BlockMeta, HeightMap, BiomeMap, a_Entities, a_BlockEntities);
+ m_CompositionGen->ComposeTerrain(a_ChunkX, a_ChunkZ, BlockTypes, BlockMeta, HeightMap, BiomeMap, Entities, BlockEntities);
}
if (a_ChunkDesc.IsUsingDefaultStructures())
diff --git a/source/Generating/ComposableGenerator.h b/source/Generating/ComposableGenerator.h
index 327074436..b6f946eb3 100644
--- a/source/Generating/ComposableGenerator.h
+++ b/source/Generating/ComposableGenerator.h
@@ -150,7 +150,7 @@ public:
virtual void Initialize(cWorld * a_World, cIniFile & a_IniFile) override;
virtual void GenerateBiomes(int a_ChunkX, int a_ChunkZ, cChunkDef::BiomeMap & a_BiomeMap) override;
- virtual void DoGenerate(int a_ChunkX, int a_ChunkZ, cChunkDesc & a_ChunkDesc, cEntityList & a_Entities, cBlockEntityList & a_BlockEntities) override;
+ virtual void DoGenerate(int a_ChunkX, int a_ChunkZ, cChunkDesc & a_ChunkDesc) override;
protected:
// The generation composition: