Exemplo n.º 1
0
bool cWorldStorage::SaveOneChunk(void)
{
	// Dequeue one chunk to save:
	cChunkCoordsWithCallback ToSave(0, 0, nullptr);
	bool ShouldSave = m_SaveQueue.TryDequeueItem(ToSave);
	if (!ShouldSave)
	{
		return false;
	}
	
	// Save the chunk, if it's valid:
	if (m_World->IsChunkValid(ToSave.m_ChunkX, ToSave.m_ChunkZ))
	{
		m_World->MarkChunkSaving(ToSave.m_ChunkX, ToSave.m_ChunkZ);
		if (m_SaveSchema->SaveChunk(cChunkCoords(ToSave.m_ChunkX, ToSave.m_ChunkZ)))
		{
			m_World->MarkChunkSaved(ToSave.m_ChunkX, ToSave.m_ChunkZ);
		}
	}

	// Call the callback, if specified:
	if (ToSave.m_Callback != nullptr)
	{
		ToSave.m_Callback->Call(ToSave.m_ChunkX, ToSave.m_ChunkZ);
	}
	return true;
}
Exemplo n.º 2
0
bool cWorldStorage::SaveOneChunk(void)
{
	cChunkCoords ToSave(0, 0);
	bool ShouldSave = m_SaveQueue.TryDequeueItem(ToSave);
	if (ShouldSave && m_World->IsChunkValid(ToSave.m_ChunkX, ToSave.m_ChunkZ))
	{
		m_World->MarkChunkSaving(ToSave.m_ChunkX, ToSave.m_ChunkZ);
		if (m_SaveSchema->SaveChunk(ToSave))
		{
			m_World->MarkChunkSaved(ToSave.m_ChunkX, ToSave.m_ChunkZ);
		}
	}
	return ShouldSave;
}
Exemplo n.º 3
0
bool cWorldStorage::SaveOneChunk(void)
{
	cChunkCoords ToSave(0, 0, 0);
	bool ShouldSave = m_SaveQueue.TryDequeueItem(ToSave);
	if(ShouldSave) {
		if (ToSave.m_ChunkY == CHUNK_Y_MESSAGE)
		{
			LOGINFO("Saved all chunks in world %s", m_World->GetName().c_str());
			return ShouldSave;
		}
		if (ShouldSave && m_World->IsChunkValid(ToSave.m_ChunkX, ToSave.m_ChunkZ))
		{
			m_World->MarkChunkSaving(ToSave.m_ChunkX, ToSave.m_ChunkZ);
			if (m_SaveSchema->SaveChunk(ToSave))
			{
				m_World->MarkChunkSaved(ToSave.m_ChunkX, ToSave.m_ChunkZ);
			}
		}
	}
	return ShouldSave;
}