예제 #1
0
void cWorld::unloadAll()
{
	for (int y = 0; y < LIMIT_MAP; y++)
	{
		for (int x = 0; x < LIMIT_MAP; x++)
		{
			if (map[x][y].isLoaded) {
				unloadChunk(vec2i(x, y));
			}
		}
	}
}
void SubChunkMeshGenerator::initialize()
{
    m_air.see_through = true;
    m_air.partial_alpha = false;
    m_air.name = "Air";

    loadResources();

    bool success;
    success = connect(m_owner->game(), SIGNAL(chunkUpdated(Int3D,Int3D)), this, SLOT(handleUpdatedChunk(Int3D,Int3D)));
    Q_ASSERT(success);
    success = connect(m_owner->game(), SIGNAL(unloadChunk(Int3D)), this, SLOT(queueDeleteSubChunkMesh(Int3D)));
    Q_ASSERT(success);
    m_owner->game()->start();
}
예제 #3
0
void ServerConnector::loadAndPruneChunks()
{
	ChunkPosition currentPosition = world()->chunkPosition(me()->v_position.x, me()->v_position.z);
	QList<ChunkPosition> wantedChunks; // The chunks we still want to be active

	// Create a list of the wanted chunks
	for(int x = - i_viewDistance; x < i_viewDistance+1; ++x)
	{
		for(int z = - i_viewDistance; z < i_viewDistance+1; ++z)
		{
			ChunkPosition position = ChunkPosition(currentPosition.first + x, currentPosition.second + z);
			wantedChunks.push_back(position);
		}
	}

	// Let's see if we have to prune unwanted ones...
	for (int i = 0; i < m_loadedChunks.size(); ++i) {
		ChunkPosition processingChunk = m_loadedChunks.at(i);

		// If the chunk is wanted
		if(wantedChunks.contains(processingChunk)) {
			// delete it from the wanted ones
			wantedChunks.removeOne(processingChunk);
		}
		else {
			// The chunk is unwanted, get rid of it
			unloadChunk(processingChunk);
			// Delete it from the loaded chunks list
			m_loadedChunks.removeAt(i); i--;
		}
	}

	// Now we load the chunks that were not in the loaded chunks
	for (int i = 0; i < wantedChunks.size(); ++i) {
		ChunkPosition processingChunk = wantedChunks.at(i);
		loadChunk(processingChunk);
		m_loadedChunks.push_back(processingChunk);
	}
}