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(); }
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); } }