summaryrefslogblamecommitdiffstats
path: root/source/Generating/ChunkDesc.h
blob: 02b67998ac4e2769344de5635603761dcdad2674 (plain) (tree)






























































































































































































                                                                                                                                                                

// ChunkDesc.h

// Declares the cChunkDesc class representing the chunk description used while generating a chunk. This class is also exported to Lua for HOOK_CHUNK_GENERATING.





#pragma once

#include "../ChunkDef.h"





class cChunkDesc  // tolua_export
{  // tolua_export
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));
	}
	
	~cChunkDesc()
	{}

	// tolua_begin



	// 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;
	}
	
	
	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;
	}

	// 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; }

private:
	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