summaryrefslogtreecommitdiffstats
path: root/src/SetChunkData.h
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@outlook.com>2021-03-05 14:03:55 +0100
committerGitHub <noreply@github.com>2021-03-05 14:03:55 +0100
commit868cd94ee9a5a0638c014a4cc42224f01ff234c8 (patch)
treecd23dc866f77de5b0b3e89a5eafeeb2ef24ffbdd /src/SetChunkData.h
parentfixed the crash on generating in the SinglePiceStructuresGen (#5136) (diff)
downloadcuberite-868cd94ee9a5a0638c014a4cc42224f01ff234c8.tar
cuberite-868cd94ee9a5a0638c014a4cc42224f01ff234c8.tar.gz
cuberite-868cd94ee9a5a0638c014a4cc42224f01ff234c8.tar.bz2
cuberite-868cd94ee9a5a0638c014a4cc42224f01ff234c8.tar.lz
cuberite-868cd94ee9a5a0638c014a4cc42224f01ff234c8.tar.xz
cuberite-868cd94ee9a5a0638c014a4cc42224f01ff234c8.tar.zst
cuberite-868cd94ee9a5a0638c014a4cc42224f01ff234c8.zip
Diffstat (limited to '')
-rw-r--r--src/SetChunkData.h101
1 files changed, 16 insertions, 85 deletions
diff --git a/src/SetChunkData.h b/src/SetChunkData.h
index 1744d3b78..8a4a8b995 100644
--- a/src/SetChunkData.h
+++ b/src/SetChunkData.h
@@ -1,7 +1,7 @@
// SetChunkData.h
-// Declares the cSetChunkData class used for sending loaded / generated chunk data into cWorld
+// Defines the SetChunkData struct that contains the data for a loaded / generated chunk, ready to be set
#pragma once
@@ -12,94 +12,25 @@
-class cSetChunkData
+struct SetChunkData
{
-public:
- /** Constructs a new instance with empty data.
- Allocates new buffers for the block data.
- Prefer to use this constructor, then fill the object with data and then send it to cWorld, as this will
- reduce the copying required to queue the set operation. */
- cSetChunkData(int a_ChunkX, int a_ChunkZ, bool a_ShouldMarkDirty);
+ /** Initialise the structure with chunk coordinates.
+ The caller is responsible for initialising the remaining members. */
+ SetChunkData(const cChunkCoords a_Chunk) :
+ Chunk(a_Chunk)
+ {
+ }
- /** Constructs a new instance based on data existing elsewhere, will copy all the memory. Prefer to use the
- other constructor as much as possible.
- Will move the entity list and blockentities into the internal storage, and invalidate a_Entities and
- a_BlockEntities.
- When passing an lvalue, a_Entities and a_BlockEntities must be explicitly converted to an rvalue beforehand
- with std::move().
- a_BlockTypes and a_BlockMetas must always be valid.
- If either of the light arrays are nullptr, the chunk data will be marked as not having any light at all and
- will be scheduled for re-lighting once it is set into the chunkmap.
- If a_Biomes is not valid, the internal flag is set and the world will calculate the biomes using the chunk
- generator when setting the chunk data.
- If a_HeightMap is not assigned, the world will calculate the heightmap based on the blocktypes when setting
- the chunk data. */
- cSetChunkData(
- int a_ChunkX, int a_ChunkZ,
- const BLOCKTYPE * a_BlockTypes,
- const NIBBLETYPE * a_BlockMetas,
- const NIBBLETYPE * a_BlockLight,
- const NIBBLETYPE * a_SkyLight,
- const cChunkDef::HeightMap * a_HeightMap,
- const cChunkDef::BiomeMap * a_Biomes,
- cEntityList && a_Entities,
- cBlockEntities && a_BlockEntities,
- bool a_ShouldMarkDirty
- );
+ cChunkCoords Chunk;
- int GetChunkX(void) const { return m_ChunkX; }
- int GetChunkZ(void) const { return m_ChunkZ; }
+ ChunkBlockData BlockData;
+ ChunkLightData LightData;
- /** Returns the internal storage of block types, metas and lighting. */
- cChunkData & GetChunkData(void) { return m_ChunkData; }
+ cChunkDef::BiomeMap BiomeMap;
+ cChunkDef::HeightMap HeightMap;
- /** Returns the internal storage for heightmap, read-only. */
- const cChunkDef::HeightMap & GetHeightMap(void) const { return m_HeightMap; }
+ cEntityList Entities;
+ cBlockEntities BlockEntities;
- /** Returns the internal storage for biomes, read-write. */
- cChunkDef::BiomeMap & GetBiomes(void) { return m_Biomes; }
-
- /** Returns the internal storage for entities, read-write. */
- cEntityList & GetEntities(void) { return m_Entities; }
-
- /** Returns the internal storage for block entities, read-write. */
- cBlockEntities & GetBlockEntities(void) { return m_BlockEntities; }
-
- /** Returns whether both light arrays stored in this object are valid. */
- bool IsLightValid(void) const { return m_IsLightValid; }
-
- /** Returns whether the heightmap stored in this object is valid. */
- bool IsHeightMapValid(void) const { return m_IsHeightMapValid; }
-
- /** Returns whether the biomes stored in this object are valid. */
- bool AreBiomesValid(void) const { return m_AreBiomesValid; }
-
- /** Returns whether the chunk should be marked as dirty after its data is set.
- Used by the generator to save chunks after generating. */
- bool ShouldMarkDirty(void) const { return m_ShouldMarkDirty; }
-
- /** Marks the biomes stored in this object as valid. */
- void MarkBiomesValid(void) { m_AreBiomesValid = true; }
-
- /** Calculates the heightmap based on the contained blocktypes and marks it valid. */
- void CalculateHeightMap(void);
-
- /** Removes the block entities that don't have a proper blocktype at their corresponding coords. */
- void RemoveInvalidBlockEntities(void);
-
-protected:
- int m_ChunkX;
- int m_ChunkZ;
-
- cListAllocationPool<cChunkData::sChunkSection> m_Pool;
- cChunkData m_ChunkData;
- cChunkDef::HeightMap m_HeightMap;
- cChunkDef::BiomeMap m_Biomes;
- cEntityList m_Entities;
- cBlockEntities m_BlockEntities;
-
- bool m_IsLightValid;
- bool m_IsHeightMapValid;
- bool m_AreBiomesValid;
- bool m_ShouldMarkDirty;
+ bool IsLightValid;
};