Fix task splitting causing generation of already generated sections
This commit is contained in:
+17
-1
@@ -34,7 +34,6 @@ import com.seibel.distanthorizons.core.pooling.PhantomArrayListCheckout;
|
||||
import com.seibel.distanthorizons.core.pooling.PhantomArrayListPool;
|
||||
import com.seibel.distanthorizons.core.pos.DhSectionPos;
|
||||
import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos2D;
|
||||
import com.seibel.distanthorizons.core.render.renderer.DebugRenderer;
|
||||
import com.seibel.distanthorizons.core.render.renderer.IDebugRenderable;
|
||||
import com.seibel.distanthorizons.core.util.LodUtil;
|
||||
import com.seibel.distanthorizons.core.util.threading.PriorityTaskPicker;
|
||||
@@ -455,6 +454,23 @@ public class GeneratedFullDataSourceProvider extends FullDataSourceProviderV2 im
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Boolean> shouldGenerateSplitChild(long pos)
|
||||
{
|
||||
return GeneratedFullDataSourceProvider.this.getAsync(pos).thenApply(fullDataSource ->
|
||||
{
|
||||
//noinspection TryFinallyCanBeTryWithResources
|
||||
try
|
||||
{
|
||||
return !GeneratedFullDataSourceProvider.this.isFullyGenerated(fullDataSource.columnGenerationSteps);
|
||||
}
|
||||
finally
|
||||
{
|
||||
fullDataSource.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
private CompletableFuture<Void> onDataSourceSaveAsync(FullDataSourceV2 fullDataSource)
|
||||
{
|
||||
|
||||
+8
-1
@@ -74,7 +74,14 @@ public class RemoteWorldRetrievalQueue extends AbstractFullDataNetworkRequestQue
|
||||
return WorldGenResult.CreateFail();
|
||||
case REQUIRES_SPLITTING:
|
||||
List<CompletableFuture<WorldGenResult>> childFutures = new ArrayList<>(4);
|
||||
DhSectionPos.forEachChild(sectionPos, childPos -> childFutures.add(this.submitRetrievalTask(childPos, requiredDataDetail, tracker)));
|
||||
DhSectionPos.forEachChild(sectionPos, childPos -> {
|
||||
tracker.shouldGenerateSplitChild(childPos).thenAccept(shouldGenerate -> {
|
||||
if (shouldGenerate)
|
||||
{
|
||||
childFutures.add(this.submitRetrievalTask(childPos, requiredDataDetail, tracker));
|
||||
}
|
||||
});
|
||||
});
|
||||
return WorldGenResult.CreateSplit(childFutures);
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -22,6 +22,7 @@ package com.seibel.distanthorizons.core.generation.tasks;
|
||||
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
@@ -33,4 +34,6 @@ public interface IWorldGenTaskTracker
|
||||
@Nullable
|
||||
Consumer<FullDataSourceV2> getDataSourceConsumer();
|
||||
|
||||
CompletableFuture<Boolean> shouldGenerateSplitChild(long pos);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user