WorldStorage no longer queues chunks into generator.
This commit is contained in:
parent
4230eb3d92
commit
103fa8812d
@ -163,7 +163,7 @@ cChunkPtr cChunkMap::GetChunk(int a_ChunkX, int a_ChunkZ)
|
||||
{
|
||||
Chunk->SetPresence(cChunk::cpQueued);
|
||||
Chunk->SetShouldGenerateIfLoadFailed(true);
|
||||
m_World->GetStorage().QueueLoadChunk(a_ChunkX, a_ChunkZ, true);
|
||||
m_World->GetStorage().QueueLoadChunk(a_ChunkX, a_ChunkZ);
|
||||
}
|
||||
return Chunk;
|
||||
}
|
||||
@ -191,7 +191,7 @@ cChunkPtr cChunkMap::GetChunkNoGen(int a_ChunkX, int a_ChunkZ)
|
||||
if (!Chunk->IsValid() && !Chunk->IsQueued())
|
||||
{
|
||||
Chunk->SetPresence(cChunk::cpQueued);
|
||||
m_World->GetStorage().QueueLoadChunk(a_ChunkX, a_ChunkZ, false);
|
||||
m_World->GetStorage().QueueLoadChunk(a_ChunkX, a_ChunkZ);
|
||||
}
|
||||
|
||||
return Chunk;
|
||||
|
@ -112,6 +112,8 @@ void cChunkGenerator::Stop(void)
|
||||
|
||||
void cChunkGenerator::QueueGenerateChunk(int a_ChunkX, int a_ChunkZ, bool a_ForceGenerate)
|
||||
{
|
||||
ASSERT(m_ChunkSink->IsChunkQueued(a_ChunkX, a_ChunkZ));
|
||||
|
||||
{
|
||||
cCSLock Lock(m_CS);
|
||||
|
||||
|
@ -141,11 +141,11 @@ size_t cWorldStorage::GetSaveQueueLength(void)
|
||||
|
||||
|
||||
|
||||
void cWorldStorage::QueueLoadChunk(int a_ChunkX, int a_ChunkZ, bool a_Generate)
|
||||
void cWorldStorage::QueueLoadChunk(int a_ChunkX, int a_ChunkZ)
|
||||
{
|
||||
ASSERT(m_World->IsChunkQueued(a_ChunkX, a_ChunkZ));
|
||||
|
||||
m_LoadQueue.EnqueueItem(sChunkLoad(a_ChunkX, a_ChunkZ, a_Generate));
|
||||
m_LoadQueue.EnqueueItem(cChunkCoords(a_ChunkX, a_ChunkZ));
|
||||
m_Event.Set();
|
||||
}
|
||||
|
||||
@ -167,7 +167,7 @@ void cWorldStorage::QueueSaveChunk(int a_ChunkX, int a_ChunkZ)
|
||||
|
||||
void cWorldStorage::UnqueueLoad(int a_ChunkX, int a_ChunkZ)
|
||||
{
|
||||
m_LoadQueue.Remove(sChunkLoad(a_ChunkX, a_ChunkZ, true));
|
||||
m_LoadQueue.Remove(cChunkCoords(a_ChunkX, a_ChunkZ));
|
||||
}
|
||||
|
||||
|
||||
@ -246,23 +246,14 @@ void cWorldStorage::Execute(void)
|
||||
|
||||
bool cWorldStorage::LoadOneChunk(void)
|
||||
{
|
||||
sChunkLoad ToLoad(0, 0, false);
|
||||
cChunkCoords ToLoad(0, 0);
|
||||
bool ShouldLoad = m_LoadQueue.TryDequeueItem(ToLoad);
|
||||
|
||||
if (ShouldLoad && !LoadChunk(ToLoad.m_ChunkX, ToLoad.m_ChunkZ))
|
||||
if (ShouldLoad)
|
||||
{
|
||||
if (ToLoad.m_Generate)
|
||||
{
|
||||
// The chunk couldn't be loaded, generate it:
|
||||
m_World->GetGenerator().QueueGenerateChunk(ToLoad.m_ChunkX, ToLoad.m_ChunkZ, false);
|
||||
return LoadChunk(ToLoad.m_ChunkX, ToLoad.m_ChunkZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: Notify the world that the load has failed:
|
||||
// m_World->ChunkLoadFailed(ToLoad.m_ChunkX, ToLoad.m_ChunkZ);
|
||||
}
|
||||
}
|
||||
return ShouldLoad;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -64,12 +64,9 @@ public:
|
||||
cWorldStorage(void);
|
||||
~cWorldStorage();
|
||||
|
||||
void QueueLoadChunk(int a_ChunkX, int a_ChunkZ, bool a_Generate); // Queues the chunk for loading; if not loaded, the chunk will be generated if a_Generate is true
|
||||
void QueueLoadChunk(int a_ChunkX, int a_ChunkZ);
|
||||
void QueueSaveChunk(int a_ChunkX, int a_ChunkZ);
|
||||
|
||||
/// Loads the chunk specified; returns true on success, false on failure
|
||||
bool LoadChunk(int a_ChunkX, int a_ChunkZ);
|
||||
|
||||
void UnqueueLoad(int a_ChunkX, int a_ChunkZ);
|
||||
void UnqueueSave(const cChunkCoords & a_Chunk);
|
||||
|
||||
@ -84,38 +81,10 @@ public:
|
||||
|
||||
protected:
|
||||
|
||||
struct sChunkLoad
|
||||
{
|
||||
int m_ChunkX;
|
||||
int m_ChunkZ;
|
||||
bool m_Generate; // If true, the chunk will be generated if it cannot be loaded
|
||||
|
||||
sChunkLoad(int a_ChunkX, int a_ChunkZ, bool a_Generate) : m_ChunkX(a_ChunkX), m_ChunkZ(a_ChunkZ), m_Generate(a_Generate) {}
|
||||
|
||||
bool operator ==(const sChunkLoad other) const
|
||||
{
|
||||
return (
|
||||
(this->m_ChunkX == other.m_ChunkX) &&
|
||||
(this->m_ChunkZ == other.m_ChunkZ)
|
||||
);
|
||||
}
|
||||
} ;
|
||||
|
||||
struct FuncTable
|
||||
{
|
||||
static void Delete(sChunkLoad) {}
|
||||
static void Combine(sChunkLoad & a_orig, const sChunkLoad a_new)
|
||||
{
|
||||
a_orig.m_Generate |= a_new.m_Generate;
|
||||
}
|
||||
};
|
||||
|
||||
typedef cQueue<sChunkLoad, FuncTable> sChunkLoadQueue;
|
||||
|
||||
cWorld * m_World;
|
||||
AString m_StorageSchemaName;
|
||||
|
||||
sChunkLoadQueue m_LoadQueue;
|
||||
cChunkCoordsQueue m_LoadQueue;
|
||||
cChunkCoordsQueue m_SaveQueue;
|
||||
|
||||
/// All the storage schemas (all used for loading)
|
||||
@ -124,6 +93,10 @@ protected:
|
||||
/// The one storage schema used for saving
|
||||
cWSSchema * m_SaveSchema;
|
||||
|
||||
|
||||
/// Loads the chunk specified; returns true on success, false on failure
|
||||
bool LoadChunk(int a_ChunkX, int a_ChunkZ);
|
||||
|
||||
void InitSchemas(int a_StorageCompressionFactor);
|
||||
|
||||
virtual void Execute(void) override;
|
||||
|
Loading…
Reference in New Issue
Block a user