summaryrefslogblamecommitdiffstats
path: root/source/LuaChunk.h
blob: dc6f2a0f2039b1ad14f0be9e53886e4cc413a120 (plain) (tree)









































































































































                                                                                                                  
                     
#pragma once

#include "ChunkDef.h"

class cLuaChunk			//tolua_export
{						//tolua_export
public:
	cLuaChunk( 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( false )
		, m_bUseDefaultComposition( false )
		, m_bUseDefaultStructures( false )
		, m_bUseDefaultFinish( false )
	{
		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 ) );
	}
	~cLuaChunk()
	{}

	//tolua_begin

	// Block functions
	void FillBlocks( char a_BlockID, unsigned char a_BlockMeta )
	{
		const NIBBLETYPE CompressedMeta = a_BlockMeta | a_BlockMeta << 4;
		memset( m_BlockTypes, a_BlockID, sizeof( cChunkDef::BlockTypes ) );
		memset( m_BlockMeta, CompressedMeta, sizeof( cChunkDef::BlockNibbles ) );
	}

	void SetBlock( int a_X, int a_Y, int a_Z, char a_BlockID, unsigned char a_BlockMeta )
	{
		cChunkDef::SetBlock( m_BlockTypes, a_X, a_Y, a_Z, a_BlockID );
		cChunkDef::SetNibble( m_BlockMeta, a_X, a_Y, a_Z, a_BlockMeta );
	}

	char GetBlock( int a_X, int a_Y, int a_Z )
	{
		return cChunkDef::GetBlock( m_BlockTypes, a_X, a_Y, a_Z );
	}

	char 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() 
	{
		return m_bUseDefaultBiomes;
	}

	void SetUseDefaultComposition( bool a_bUseDefaultComposition )
	{
		m_bUseDefaultComposition = a_bUseDefaultComposition;
	}
	bool IsUsingDefaultComposition()
	{
		return m_bUseDefaultComposition;
	}

	void SetUseDefaultStructures( bool a_bUseDefaultStructures )
	{
		m_bUseDefaultStructures = a_bUseDefaultStructures;
	}
	bool IsUsingDefaultStructures()
	{
		return m_bUseDefaultStructures;
	}

	void SetUseDefaultFinish( bool a_bUseDefaultFinish )
	{
		m_bUseDefaultFinish = a_bUseDefaultFinish;
	}
	bool IsUsingDefaultFinish()
	{
		return m_bUseDefaultFinish;
	}

	//tolua_end

private:
	bool m_bUseDefaultBiomes;
	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