2014-01-25 14:14:14 -05:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2014-01-26 09:20:39 -05:00
|
|
|
#include "../ChunkMap.h"
|
|
|
|
#include "../ForEachChunkProvider.h"
|
2014-02-01 09:01:13 -05:00
|
|
|
#include "WorldInterface.h"
|
|
|
|
|
2014-01-26 09:20:39 -05:00
|
|
|
|
2014-02-28 20:46:50 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class cChunkInterface:
|
|
|
|
public cForEachChunkProvider
|
2014-01-25 14:14:14 -05:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
2014-01-26 09:20:39 -05:00
|
|
|
cChunkInterface(cChunkMap * a_ChunkMap) : m_ChunkMap(a_ChunkMap) {}
|
|
|
|
|
2014-02-28 20:46:50 -05:00
|
|
|
BLOCKTYPE GetBlock(int a_BlockX, int a_BlockY, int a_BlockZ)
|
2014-01-26 09:20:39 -05:00
|
|
|
{
|
2014-07-19 08:53:41 -04:00
|
|
|
return m_ChunkMap->GetBlock(a_BlockX, a_BlockY, a_BlockZ);
|
2014-01-26 09:20:39 -05:00
|
|
|
}
|
2014-02-28 20:54:46 -05:00
|
|
|
BLOCKTYPE GetBlock(const Vector3i & a_Pos)
|
2014-07-17 16:50:58 -04:00
|
|
|
{
|
2014-02-28 20:54:46 -05:00
|
|
|
return GetBlock(a_Pos.x, a_Pos.y, a_Pos.z);
|
2014-01-26 09:20:39 -05:00
|
|
|
}
|
2014-02-28 20:46:50 -05:00
|
|
|
NIBBLETYPE GetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ)
|
2014-01-26 09:20:39 -05:00
|
|
|
{
|
|
|
|
return m_ChunkMap->GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
|
|
|
}
|
2014-01-25 14:14:14 -05:00
|
|
|
|
2014-02-28 20:46:50 -05:00
|
|
|
bool GetBlockTypeMeta(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta)
|
2014-01-31 18:17:41 -05:00
|
|
|
{
|
|
|
|
return m_ChunkMap->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta);
|
|
|
|
}
|
2014-02-28 20:46:50 -05:00
|
|
|
|
2014-01-25 14:14:14 -05:00
|
|
|
/** Sets the block at the specified coords to the specified value.
|
|
|
|
Full processing, incl. updating neighbors, is performed.
|
|
|
|
*/
|
2014-02-01 08:06:32 -05:00
|
|
|
void SetBlock(cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
|
2014-01-26 09:20:39 -05:00
|
|
|
{
|
|
|
|
m_ChunkMap->SetBlock(a_WorldInterface, a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta);
|
|
|
|
}
|
2014-02-28 20:46:50 -05:00
|
|
|
|
|
|
|
void SetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYPE a_MetaData)
|
2014-01-26 09:20:39 -05:00
|
|
|
{
|
|
|
|
m_ChunkMap->SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, a_MetaData);
|
|
|
|
}
|
2014-01-25 14:14:14 -05:00
|
|
|
|
2014-02-01 08:06:32 -05:00
|
|
|
void QueueSetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, int a_TickDelay, BLOCKTYPE a_PreviousBlockType, cWorldInterface & a_WorldInterface)
|
2014-01-26 09:20:39 -05:00
|
|
|
{
|
2014-02-01 08:06:32 -05:00
|
|
|
m_ChunkMap->QueueSetBlock(a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta, a_WorldInterface.GetWorldAge() + a_TickDelay, a_PreviousBlockType);
|
2014-01-26 09:20:39 -05:00
|
|
|
}
|
2014-01-25 14:14:14 -05:00
|
|
|
|
|
|
|
/** Sets the block at the specified coords to the specified value.
|
|
|
|
The replacement doesn't trigger block updates.
|
|
|
|
The replaced blocks aren't checked for block entities (block entity is leaked if it exists at this block)
|
|
|
|
*/
|
2014-01-26 09:20:39 -05:00
|
|
|
void FastSetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
|
|
|
|
{
|
|
|
|
m_ChunkMap->FastSetBlock(a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta);
|
|
|
|
}
|
2014-02-28 20:46:50 -05:00
|
|
|
|
2014-07-21 09:19:48 -04:00
|
|
|
void FastSetBlock(const Vector3i & a_Pos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
|
2014-02-28 20:46:50 -05:00
|
|
|
{
|
2014-07-21 09:19:48 -04:00
|
|
|
FastSetBlock( a_Pos.x, a_Pos.y, a_Pos.z, a_BlockType, a_BlockMeta);
|
2014-02-28 20:46:50 -05:00
|
|
|
}
|
2014-01-26 09:20:39 -05:00
|
|
|
|
|
|
|
void UseBlockEntity(cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
|
|
|
|
{
|
|
|
|
m_ChunkMap->UseBlockEntity(a_Player, a_BlockX, a_BlockY, a_BlockZ);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual bool ForEachChunkInRect(int a_MinChunkX, int a_MaxChunkX, int a_MinChunkZ, int a_MaxChunkZ, cChunkDataCallback & a_Callback) override
|
|
|
|
{
|
|
|
|
return m_ChunkMap->ForEachChunkInRect(a_MinChunkX, a_MaxChunkX, a_MinChunkZ, a_MaxChunkZ, a_Callback);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual bool WriteBlockArea(cBlockArea & a_Area, int a_MinBlockX, int a_MinBlockY, int a_MinBlockZ, int a_DataTypes) override
|
|
|
|
{
|
|
|
|
return m_ChunkMap->WriteBlockArea(a_Area, a_MinBlockX, a_MinBlockY, a_MinBlockZ, a_DataTypes);
|
|
|
|
}
|
2014-01-25 14:14:14 -05:00
|
|
|
|
2014-02-01 09:01:13 -05:00
|
|
|
bool DigBlock(cWorldInterface & a_WorldInterface, int a_X, int a_Y, int a_Z);
|
|
|
|
|
2014-01-26 09:20:39 -05:00
|
|
|
private:
|
|
|
|
cChunkMap * m_ChunkMap;
|
2014-01-25 14:14:14 -05:00
|
|
|
};
|
2014-02-28 20:46:50 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|