summaryrefslogtreecommitdiffstats
path: root/source/cChunkMap.h
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-02-28 11:45:53 +0100
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-02-28 11:45:53 +0100
commit230f98a774d956934e42cb4ba7b2cddcdc365676 (patch)
tree0049f65fefb73d9bd8c4c3adcc076634451d5271 /source/cChunkMap.h
parentVC2008: slight project reorganization, chunk-generation-related sources are now in one folder (diff)
downloadcuberite-230f98a774d956934e42cb4ba7b2cddcdc365676.tar
cuberite-230f98a774d956934e42cb4ba7b2cddcdc365676.tar.gz
cuberite-230f98a774d956934e42cb4ba7b2cddcdc365676.tar.bz2
cuberite-230f98a774d956934e42cb4ba7b2cddcdc365676.tar.lz
cuberite-230f98a774d956934e42cb4ba7b2cddcdc365676.tar.xz
cuberite-230f98a774d956934e42cb4ba7b2cddcdc365676.tar.zst
cuberite-230f98a774d956934e42cb4ba7b2cddcdc365676.zip
Diffstat (limited to '')
-rw-r--r--source/cChunkMap.h28
1 files changed, 22 insertions, 6 deletions
diff --git a/source/cChunkMap.h b/source/cChunkMap.h
index f22c6f046..1b7192a92 100644
--- a/source/cChunkMap.h
+++ b/source/cChunkMap.h
@@ -83,10 +83,16 @@ public:
/// Touches the chunk, causing it to be loaded or generated
void TouchChunk(int a_ChunkX, int a_ChunkY, int a_ChunkZ);
+ /// Loads the chunk, if not already loaded. Doesn't generate. Returns true if chunk valid (even if already loaded before)
+ bool LoadChunk(int a_ChunkX, int a_ChunkY, int a_ChunkZ);
+
+ /// Loads the chunks specified. Doesn't report failure, other than chunks being !IsValid()
+ void LoadChunks(const cChunkCoordsList & a_Chunks);
+
void UpdateSign(int a_X, int a_Y, int a_Z, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
- /// Marks (a_Stay == true) or unmarks (a_Stay == false) a chunk as non-unloadable; to be used only by cChunkStay!
- void ChunkStay(int a_ChunkX, int a_ChunkY, int a_ChunkZ, bool a_Stay = true);
+ /// Marks (a_Stay == true) or unmarks (a_Stay == false) chunks as non-unloadable; to be used only by cChunkStay!
+ void ChunksStay(const cChunkCoordsList & a_Chunks, bool a_Stay = true);
void Tick( float a_Dt, MTRand & a_TickRand );
@@ -170,8 +176,9 @@ private:
cWorld * m_World;
- cChunkPtr GetChunk ( int a_ChunkX, int a_ChunkY, int a_ChunkZ ); // Also queues the chunk for loading / generating if not valid
- cChunkPtr GetChunkNoGen( int a_ChunkX, int a_ChunkY, int a_ChunkZ ); // Also queues the chunk for loading if not valid; doesn't generate
+ cChunkPtr GetChunk (int a_ChunkX, int a_ChunkY, int a_ChunkZ); // Also queues the chunk for loading / generating if not valid
+ cChunkPtr GetChunkNoGen (int a_ChunkX, int a_ChunkY, int a_ChunkZ); // Also queues the chunk for loading if not valid; doesn't generate
+ cChunkPtr GetChunkNoLoad(int a_ChunkX, int a_ChunkY, int a_ChunkZ); // Doesn't load, doesn't generate
};
@@ -179,7 +186,9 @@ private:
/** Makes chunks stay loaded until this object is cleared or destroyed
-Works by setting internal flags in the cChunk that it should not be unloaded
+Works by setting internal flags in the cChunk that it should not be unloaded.
+To optimize for speed, cChunkStay has an Enabled flag, it will "stay" the chunks only when enabled and it will refuse manipulations when enabled
+The object itself is not made thread-safe, it's supposed to be used from a single thread only.
*/
class cChunkStay
{
@@ -192,11 +201,18 @@ public:
void Add(int a_ChunkX, int a_ChunkY, int a_ChunkZ);
void Remove(int a_ChunkX, int a_ChunkY, int a_ChunkZ);
+ void Enable(void);
+ void Disable(void);
+
+ // Allow cChunkStay be passed to functions expecting a const cChunkCoordsList &
+ operator const cChunkCoordsList(void) const {return m_Chunks; }
+
protected:
cWorld * m_World;
- cCriticalSection m_CS;
+ bool m_IsEnabled;
+
cChunkCoordsList m_Chunks;
} ;