1
0
cuberite-2a/src/ChunkDataCallback.h

104 lines
2.9 KiB
C
Raw Normal View History

2014-05-29 12:25:08 -04:00
// ChunkDataCallback.h
// Declares the cChunkDataCallback interface and several trivial descendants, for reading chunk data
2014-05-29 12:25:08 -04:00
#pragma once
2014-05-21 14:58:48 -04:00
#include "ChunkData.h"
2014-05-29 12:25:08 -04:00
/** Interface class used for getting data out of a chunk using the GetAllData() function.
Implementation must use the pointers immediately and NOT store any of them for later use
2015-07-31 10:49:10 -04:00
The virtual methods are called in the same order as they're declared here. */
class cChunkDataCallback abstract
{
public:
virtual ~cChunkDataCallback() {}
/** Called before any other callbacks to inform of the current coords
(only in processes where multiple chunks can be processed, such as cWorld::ForEachChunkInRect()).
2015-07-31 10:49:10 -04:00
If false is returned, the chunk is skipped. */
virtual bool Coords(int a_ChunkX, int a_ChunkZ) { UNUSED(a_ChunkX); UNUSED(a_ChunkZ); return true; }
2016-02-05 16:45:45 -05:00
2015-07-31 10:49:10 -04:00
/** Called once to provide heightmap data */
virtual void HeightMap(const cChunkDef::HeightMap * a_HeightMap) { UNUSED(a_HeightMap); }
2016-02-05 16:45:45 -05:00
2015-07-31 10:49:10 -04:00
/** Called once to provide biome data */
virtual void BiomeData(const cChunkDef::BiomeMap * a_BiomeMap) { UNUSED(a_BiomeMap); }
2016-02-05 16:45:45 -05:00
2015-07-31 10:49:10 -04:00
/** Called once to let know if the chunk lighting is valid. Return value is ignored */
virtual void LightIsValid(bool a_IsLightValid) { UNUSED(a_IsLightValid); }
2016-02-05 16:45:45 -05:00
2015-07-31 10:49:10 -04:00
/** Called once to export block info */
virtual void ChunkData(const cChunkData & a_Buffer) { UNUSED(a_Buffer); }
2016-02-05 16:45:45 -05:00
2015-07-31 10:49:10 -04:00
/** Called for each entity in the chunk */
virtual void Entity(cEntity * a_Entity) { UNUSED(a_Entity); }
2016-02-05 16:45:45 -05:00
2015-07-31 10:49:10 -04:00
/** Called for each blockentity in the chunk */
virtual void BlockEntity(cBlockEntity * a_Entity) { UNUSED(a_Entity); }
} ;
2014-05-29 12:25:08 -04:00
2015-07-31 10:49:10 -04:00
/** A simple implementation of the cChunkDataCallback interface that collects all block data into a single buffer */
2014-05-21 14:58:48 -04:00
class cChunkDataArrayCollector :
2014-05-24 08:33:40 -04:00
public cChunkDataCallback
{
public:
// Must be unsigned char instead of BLOCKTYPE or NIBBLETYPE, because it houses both.
unsigned char m_BlockData[cChunkDef::BlockDataSize];
protected:
2014-05-21 14:58:48 -04:00
virtual void ChunkData(const cChunkData & a_ChunkBuffer) override
{
2014-05-29 12:25:08 -04:00
a_ChunkBuffer.CopyBlockTypes(m_BlockData);
a_ChunkBuffer.CopyMetas(m_BlockData + cChunkDef::NumBlocks);
2014-05-24 08:33:40 -04:00
a_ChunkBuffer.CopyBlockLight(m_BlockData + 3 * cChunkDef::NumBlocks / 2);
a_ChunkBuffer.CopySkyLight(m_BlockData + 2 * cChunkDef::NumBlocks);
}
};
2014-05-29 12:25:08 -04:00
/** A simple implementation of the cChunkDataCallback interface that collects all block data into separate buffers */
class cChunkDataSeparateCollector :
2014-05-24 08:33:40 -04:00
public cChunkDataCallback
{
public:
cChunkDef::BlockTypes m_BlockTypes;
cChunkDef::BlockNibbles m_BlockMetas;
cChunkDef::BlockNibbles m_BlockLight;
cChunkDef::BlockNibbles m_BlockSkyLight;
protected:
2014-05-21 14:58:48 -04:00
virtual void ChunkData(const cChunkData & a_ChunkBuffer) override
{
2014-05-29 12:25:08 -04:00
a_ChunkBuffer.CopyBlockTypes(m_BlockTypes);
a_ChunkBuffer.CopyMetas(m_BlockMetas);
a_ChunkBuffer.CopyBlockLight(m_BlockLight);
a_ChunkBuffer.CopySkyLight(m_BlockSkyLight);
}
} ;
2014-05-29 12:25:08 -04:00