4 #include "BlockTemplate.h" 8 class VerticalChunkIterator;
19 Block() :m_pTemplate(
nullptr), m_blockData(0), m_nInstanceCount(0)
22 Block(
BlockTemplate *pTemplate, uint32_t nData = 0) :m_pTemplate(pTemplate), m_blockData(nData), m_nInstanceCount(0)
31 inline uint16_t GetTemplateId()
33 return m_pTemplate->GetID();
36 inline uint32_t GetUserData(){
return m_blockData;}
39 int32 GetTextureIndex();
42 m_pTemplate = pTemplate;
44 inline void SetUserData(uint32_t data){
45 m_blockData = (uint16)data;
47 void PushEmptySlotIndex(uint16 nIndex){
53 uint16 PopEmptySlot(){
54 uint16 nNextEmptySlotIndex = m_blockData;
56 return nNextEmptySlotIndex;
60 return m_nInstanceCount == 0;
63 uint16 GetInstanceCount(){
64 return m_nInstanceCount;
67 uint16 DecreaseInstanceCount(){
69 return m_nInstanceCount;
71 uint16 IncreaseInstanceCount(){
73 return m_nInstanceCount;
78 uint16 m_nInstanceCount;
83 ChunkDataMask_HasMaskData = 0x1<<31,
84 ChunkDataMask_HasCustomData = 0x1<<30,
85 ChunkDataMask_HasBlockData = 0x1<<29,
96 ChunkCustomDataType_Biomes,
98 ChunkCustomDataType_Biomes_SameInteger,
99 ChunkCustomDataType_TimeStamp,
101 ChunkCustomDataType_TimeStamp_SameInteger,
102 ChunkCustomDataType_Heightmap,
103 ChunkCustomDataType_LightValues,
106 ChunkCustomDataType_ChunksData = 100,
117 uint8_t GetBrightness(
bool isSunLight);
119 void SetBrightness(uint8_t
value,
bool isSunLight);
121 uint8_t GetMaxBrightness(
CBlockWorld* pBlockWorld);
124 void LoadBrightness(uint8_t sun, uint8_t torch);
126 inline bool IsInfluencedBySun()
128 return (m_value & 0xF0) > 0;
131 inline bool IsZero(){
return m_value == 0; }
142 std::vector<int16_t> m_blockIndices;
145 std::set<uint16_t> m_lightBlockIndices;
161 std::vector<Block> m_blocks;
163 uint16 m_isBoundaryChunk;
164 uint16 m_emptyBlockSlotIndex;
166 int16_t m_packedChunkID;
168 inline bool IsBoundaryChunk()
const {
return m_isBoundaryChunk>0; }
169 void SetBoundaryChunk(
bool val) { m_isBoundaryChunk = val ? 1:0; }
173 void SetBlockEmpty(uint16_t nBlockIndex,
Block& block);
174 bool RecycleBlock(uint16 nIndex,
Block& block);
175 Block* CreateBlock(uint16_t nBlockIndex);
180 static int GetTotalChunksInMemory();
183 void ReserveBlocks(
int nCount);
191 bool CanBlockSeeTheSkyWS(uint16 x, uint16 y, uint16 z);
193 uint32 GetBlockCount();
195 inline bool IsDirty()
const {
return m_nDirty > 0; }
197 void SetDirty(
bool val);
199 void SetDirtyByNeighbor();
200 void SetLightDirty();
202 bool IsDirtyByNeighbor();
204 bool IsDirtyByLight();
206 bool IsDirtyByBlockChange();
208 void SetLightingInitialized(
bool bInitialized);
209 bool IsLightingInitialized();
214 Block& GetBlockByIndex(uint16_t nBlockIndex);
219 Block* GetBlock(uint16_t nBlockIndex);
224 int LoadBlocks(
const std::vector<uint16_t>& blockIndices,
BlockTemplate* pTemplate);
226 Uint16x3 GetBlockPosRs(uint16 nBlockIndex);
228 void UpdateHeightMapAtLoadTime(uint16_t nBlockIndex,
bool isTransparent);
230 void LoadBlock(uint16_t nBlockIndex,
BlockTemplate* pTemplate);
231 void SetBlockTemplate(uint16_t nBlockIndex,
BlockTemplate* pTemplate);
234 void SetBlockData(uint16_t nBlockIndex, uint32 nData);
236 void SetBlock(uint16_t nBlockIndex,
BlockTemplate* pTemplate, uint32 nData);
244 bool SetBlockToAir(
Uint16x3& blockId_r);
249 bool RemoveLight(
Uint16x3& blockId_r);
253 void AddLight(uint16 nPackedBlockID);
258 LightData* GetLightData(uint16_t nIndex);
261 bool IsInfluenceBySunLight();
270 bool IsVisibleBlock(int32_t index,
Block* pBlock = NULL);
276 void QueryNeighborBlockData(
const Uint16x3& blockId_cs,
Block** pBlockData,
int nFrom = 0,
int nTo = 26);
279 bool IsNearbyChunksLoaded();
282 std::vector<Uint16x3> refreshBlockVisible(uint16_t blockTemplateId);
284 void ClearAllLight();
using skip 1 algorithm.
Definition: BlockChunk.h:93
raw block index array.
Definition: BlockChunk.h:91
different physics engine has different winding order.
Definition: EventBinding.h:32
Definition: BlockChunk.h:14
ChunkDataMask
chunk data mask
Definition: BlockChunk.h:82
basic block world coordinate
Definition: BlockCoordinate.h:72
compress using delta.
Definition: BlockChunk.h:95
base class for an instance of block world
Definition: BlockWorld.h:35
Definition: enum_maker.hpp:46
Chunk is a 16*16*16 inside a region.
Definition: BlockChunk.h:138
block template base class.
Definition: BlockTemplate.h:15
static int s_total_chunks
total number of chunks
Definition: BlockChunk.h:158
ChunkCustomDataType
custom chunk data
Definition: BlockChunk.h:89
Block Light Data.
Definition: BlockChunk.h:110
std::vector< LightData > m_lightmapArray
16*16*16 of light data (fixed sized at initialization)
Definition: BlockChunk.h:148
512*512 region
Definition: BlockRegion.h:22