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
This commit is contained in:
madmaxoft@gmail.com
2013-02-08 16:01:44 +00:00
parent fe7e07d69d
commit 7c0a7d662d
10 changed files with 395 additions and 199 deletions
+42 -148
View File
@@ -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