PopulationTask: reduce code duplication

This commit is contained in:
Dylan K. Taylor 2021-10-01 23:18:56 +01:00
parent 88f799da2c
commit c7e9138994
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -102,32 +102,13 @@ class PopulationTask extends AsyncTask{
}
}
$manager->setChunk($this->chunkX, $this->chunkZ, $chunk ?? new Chunk());
if($chunk === null){
$generator->generateChunk($manager, $this->chunkX, $this->chunkZ);
$chunk = $manager->getChunk($this->chunkX, $this->chunkZ);
if($chunk === null){
throw new AssumptionFailedError("We just set this chunk, so it must exist");
}
$chunk->setTerrainDirtyFlag(Chunk::DIRTY_FLAG_TERRAIN, true);
$chunk->setTerrainDirtyFlag(Chunk::DIRTY_FLAG_BIOMES, true);
}
self::setOrGenerateChunk($manager, $generator, $this->chunkX, $this->chunkZ, $chunk);
$resultChunks = []; //this is just to keep phpstan's type inference happy
foreach($chunks as $i => $c){
$cX = (-1 + $i % 3) + $this->chunkX;
$cZ = (-1 + intdiv($i, 3)) + $this->chunkZ;
$manager->setChunk($cX, $cZ, $c ?? new Chunk());
if($c === null){
$generator->generateChunk($manager, $cX, $cZ);
$c = $manager->getChunk($cX, $cZ);
if($c === null){
throw new AssumptionFailedError("We just set this chunk, so it must exist");
}
$c->setTerrainDirtyFlag(Chunk::DIRTY_FLAG_TERRAIN, true);
$c->setTerrainDirtyFlag(Chunk::DIRTY_FLAG_BIOMES, true);
}
$resultChunks[$i] = $c;
$resultChunks[$i] = self::setOrGenerateChunk($manager, $generator, $cX, $cZ, $c);
}
$chunks = $resultChunks;
@ -145,6 +126,20 @@ class PopulationTask extends AsyncTask{
}
}
private static function setOrGenerateChunk(SimpleChunkManager $manager, Generator $generator, int $chunkX, int $chunkZ, ?Chunk $chunk) : Chunk{
$manager->setChunk($chunkX, $chunkZ, $chunk ?? new Chunk());
if($chunk === null){
$generator->generateChunk($manager, $chunkX, $chunkZ);
$chunk = $manager->getChunk($chunkX, $chunkZ);
if($chunk === null){
throw new AssumptionFailedError("We just set this chunk, so it must exist");
}
$chunk->setTerrainDirtyFlag(Chunk::DIRTY_FLAG_TERRAIN, true);
$chunk->setTerrainDirtyFlag(Chunk::DIRTY_FLAG_BIOMES, true);
}
return $chunk;
}
public function onCompletion() : void{
/** @var World $world */
$world = $this->fetchLocal(self::TLS_KEY_WORLD);