4 #include <luabind/luabind.hpp> 5 #include <luabind/object.hpp> 7 #include "BlockConfig.h" 8 #include "BlockCommon.h" 9 #include "BlockChunk.h" 10 #include "IAttributeFields.h" 11 #include "ChunkMaxHeight.h" 15 class VerticalChunkIterator;
33 ATTRIBUTE_METHOD1(
BlockRegion, GetRegionX_s,
int*) { *p1 = cls->GetRegionX();
return S_OK; }
34 ATTRIBUTE_METHOD1(
BlockRegion, GetRegionZ_s,
int*) { *p1 = cls->GetRegionZ();
return S_OK; }
36 ATTRIBUTE_METHOD1(
BlockRegion, GetChunksLoaded_s,
int*) { *p1 = cls->GetChunksLoaded();
return S_OK; }
37 ATTRIBUTE_METHOD1(
BlockRegion, SetChunksLoaded_s,
int) { cls->SetChunksLoaded((uint32)p1);
return S_OK; }
39 ATTRIBUTE_METHOD1(
BlockRegion, IsModified_s,
bool*) { *p1 = cls->IsModified();
return S_OK; }
40 ATTRIBUTE_METHOD1(
BlockRegion, SetModified_s,
bool) { cls->SetModified(p1);
return S_OK; }
42 ATTRIBUTE_METHOD1(
BlockRegion, GetTotalBytes_s,
int*) { *p1 = cls->GetTotalBytes();
return S_OK; }
45 ATTRIBUTE_METHOD(
BlockRegion, ClearAllLight_s) { cls->ClearAllLight();
return S_OK; }
47 virtual const std::string& GetIdentifier();
48 virtual void SetIdentifier(
const std::string& sID);
59 void RefreshBlockTemplateByIndex(uint16_t x_rs, uint16_t y_rs, uint16_t z_rs,
BlockTemplate* pTemplate);
61 uint32_t GetBlockTemplateIdByIndex(int16_t x,int16_t y,int16_t z);
63 BlockTemplate* GetBlockTemplateByIndex(int16_t x,int16_t y,int16_t z);
67 void SetBlockUserDataByIndex(int16_t x,int16_t y,int16_t z,uint32_t data);
69 uint32_t GetBlockUserDataByIndex(int16_t x,int16_t y,int16_t z);
79 bool IntersectBlock(int16_t blockX,int16_t blockY,int16_t blockZ,uint32_t filter);
82 inline int16_t GetRegionX(){
return m_regionX;}
85 inline int16_t GetRegionZ(){
return m_regionZ;}
88 ChunkMaxHeight* GetHighestBlock(uint16_t blockIdX_rs, uint16_t blockIdZ_rs);
92 uint32_t QueryApproxNeighborBlockState(
const Int16x3& blockPos);
97 Block* GetBlock(uint16_t x_rs,uint16_t y_rs,uint16_t z_rs);
106 void OnLoadWorldFinished();
107 void OnUnloadWorld();
109 void DeleteAllBlocks();
111 void RefreshAllLightsInColumn(uint16_t chunkX_ws,uint16_t chunkZ_ws);
113 void GetBlocksInChunk(uint16_t chunkX_ws,uint16_t chunkZ_ws,uint16_t startChunkY,uint16_t endChunkY,
115 void GetBlocksInChunk(uint16_t chunkX_ws, uint16_t chunkZ_ws, uint32_t verticalSectionFilter,
118 const std::string& GetMapChunkData(uint32_t chunkX, uint32_t chunkZ,
bool bIncludeInit, uint32_t verticalSectionFilter = 0xffff);
120 void ApplyMapChunkData(uint32_t chunkX, uint32_t chunkZ, uint32_t verticalSectionFilter,
const std::string& chunkData,
const luabind::adl::object& output);
123 void SetChunkDirty(uint16_t packedChunkID,
bool isDirty);
126 void SetChunkDirtyByNeighbor(uint16_t packedChunkID);
127 void SetChunkLightDirty(uint16_t packedChunkID);
129 inline uint16_t GetPackedRegionIndex()
131 return m_regionX + (m_regionZ << 6);
136 BlockChunk* GetChunk( uint16_t packedChunkID,
bool createIfNotExist);
143 uint32 GetChunksLoaded()
const;
144 void SetChunksLoaded(uint32 val);
148 void CalculateTotalBytes();
156 void ClearAllLight();
164 bool SetBlockToAir(uint16_t chunkId,
Uint16x3& blockId_r);
167 BlockChunk* CreateNewChunk(uint16_t chunkIndex);
169 bool IsChunkDirty(int16_t packedChunkID);
171 void CheckNeighborChunkDirty(
Uint16x3& blockId_rs);
173 void SetNeighborChunkDirty(
Uint16x3& neighborChunkId_ws);
175 void UpdateBlockHeightMap(
Uint16x3& blockId_rs,
bool isRemove,
bool isTransparent);
181 void LoadWorldThreadFunc();
195 BlockChunkPtr* m_chunks;
196 int GetChunksCount();
199 std::vector<byte> m_chunkTimestamp;
202 std::vector<byte> m_biomes;
206 std::vector<ChunkMaxHeight> m_blockHeightMap;
227 std::thread m_thread;
228 int32 m_nEventAsyncLoadWorldFinished;
229 uint32 m_nChunksLoaded;
bool IsModified()
whether modified.
Definition: BlockRegion.cpp:1549
an attribute class is a collection of attribute fields.
Definition: AttributeClass.h:10
void GetCenterBlockWs(Uint16x3 *pPos)
get the world space position for the center block.
Definition: BlockRegion.cpp:2046
different physics engine has different winding order.
Definition: EventBinding.h:32
Definition: BlockChunk.h:14
void SetModified(bool bModified=true)
set modified.
Definition: BlockRegion.cpp:1554
basic block world coordinate
Definition: BlockCoordinate.h:72
Definition: RenderableChunk.h:17
int GetTotalBytes()
total number of bytes that this region occupies
Definition: BlockRegion.cpp:2074
Definition: object.hpp:749
uint16_t GetChunkColumnTimeStamp(uint16_t x, uint16_t z)
get the time stamp of for the given chunk column 0 means not available, 1 means loaded before ...
Definition: BlockRegion.cpp:1533
base class for an instance of block world
Definition: BlockWorld.h:35
void SetChunksDirtyByBlockTemplate(uint16_t templateId)
refresh chunks include one type block
Definition: BlockRegion.cpp:161
Chunk is a 16*16*16 inside a region.
Definition: BlockChunk.h:138
block template base class.
Definition: BlockTemplate.h:15
A common interface for all classes implementing IAttributeFields By implementing this class's virtual...
Definition: IAttributeFields.h:59
it presents a real or virtual file in ParaEngine.
Definition: ParaFile.h:31
void SetChunkColumnTimeStamp(uint16_t x_rs, uint16_t z_rs, uint16_t nTimeStamp)
set chunk column time stamp.
Definition: BlockRegion.cpp:1512
void SetBlockTemplateByIndex(uint16_t x_rs, uint16_t y_rs, uint16_t z_rs, BlockTemplate *pTemplate)
Definition: BlockRegion.cpp:174
virtual int InstallFields(CAttributeClass *pClass, bool bOverride)
this class should be implemented if one wants to add new attribute.
Definition: BlockRegion.cpp:2103
512*512 region
Definition: BlockRegion.h:22
basic block world coordinate
Definition: BlockCoordinate.h:10
chunk column's height map data
Definition: ChunkMaxHeight.h:6