From 7c0a7d662daec45a44bdf598735d1600bf7c187d Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Fri, 8 Feb 2013 16:01:44 +0000 Subject: Prepared cChunkDesc for further API extension; used it as the sole container for generated chunk data, including entities / block entities. git-svn-id: http://mc-server.googlecode.com/svn/trunk@1200 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- VC2008/MCServer.vcproj | 4 + source/Bindings.cpp | 142 ++++++++++++++----- source/Bindings.h | 2 +- source/ChunkDef.h | 6 + source/Generating/ChunkDesc.cpp | 219 ++++++++++++++++++++++++++++++ source/Generating/ChunkDesc.h | 196 ++++++-------------------- source/Generating/ChunkGenerator.cpp | 17 +-- source/Generating/ChunkGenerator.h | 4 +- source/Generating/ComposableGenerator.cpp | 8 +- source/Generating/ComposableGenerator.h | 2 +- 10 files changed, 398 insertions(+), 202 deletions(-) create mode 100644 source/Generating/ChunkDesc.cpp diff --git a/VC2008/MCServer.vcproj b/VC2008/MCServer.vcproj index 16f58fad6..98883b991 100644 --- a/VC2008/MCServer.vcproj +++ b/VC2008/MCServer.vcproj @@ -1674,6 +1674,10 @@ RelativePath="..\source\Generating\Caves.h" > + + 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: -- cgit v1.2.3