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-c427514a06d6master
parent
fe7e07d69d
commit
7c0a7d662d
|
@ -1674,6 +1674,10 @@
|
|||
RelativePath="..\source\Generating\Caves.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\source\Generating\ChunkDesc.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\source\Generating\ChunkDesc.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: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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -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 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 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 SetHeight(int a_RelX, int a_RelZ, int a_Height);
|
||||
int GetHeight(int a_RelX, int a_RelZ);
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
// 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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue