Simplify chunks_set() in TerrainWorld.

This commit is contained in:
Relintai 2025-02-08 15:55:40 +01:00
parent 42a2979d3e
commit 23614770f1

View File

@ -471,49 +471,39 @@ Vector<Variant> TerrainWorld::chunks_get() {
} }
void TerrainWorld::chunks_set(const Vector<Variant> &chunks) { void TerrainWorld::chunks_set(const Vector<Variant> &chunks) {
if (is_inside_tree()) { for (int i = 0; i < _chunks_vector.size(); ++i) {
for (int i = 0; i < _chunks_vector.size(); ++i) { Ref<TerrainChunk> chunk = Ref<TerrainChunk>(_chunks_vector[i]);
Ref<TerrainChunk> chunk = Ref<TerrainChunk>(_chunks_vector[i]);
if (chunks.find(chunk) == -1) { if (chunks.find(chunk) == -1) {
chunk_remove_index(i); chunk_remove_index(i);
_generation_queue.erase(chunk); _generation_queue.erase(chunk);
chunk->exit_tree(); chunk->exit_tree();
if (chunk->get_is_generating()) { if (chunk->get_is_generating()) {
chunk->cancel_build(); chunk->cancel_build();
}
//never remove from this here
//_generating.erase(chunk);
--i;
}
}
//add the difference
for (int i = 0; i < chunks.size(); ++i) {
Ref<TerrainChunk> chunk = Ref<TerrainChunk>(chunks[i]);
if (!chunk.is_valid()) {
continue;
} }
if (_chunks_vector.find(chunk) != -1) { //never remove from this here
continue; //_generating.erase(chunk);
}
chunk_add(chunk, chunk->get_position_x(), chunk->get_position_z()); --i;
} }
} else { }
_chunks_vector.clear();
for (int i = 0; i < chunks.size(); ++i) { //add the difference
Ref<TerrainChunk> chunk = Ref<TerrainChunk>(chunks[i]); for (int i = 0; i < chunks.size(); ++i) {
Ref<TerrainChunk> chunk = Ref<TerrainChunk>(chunks[i]);
_chunks_vector.push_back(chunk); if (!chunk.is_valid()) {
continue;
} }
if (_chunks_vector.find(chunk) != -1) {
continue;
}
chunk_add(chunk, chunk->get_position_x(), chunk->get_position_z());
} }
} }