54 array $adjacentChunks,
55 \Closure $onCompletion
57 $this->chunk = $chunk !==
null ? FastChunkSerializer::serializeTerrain($chunk) :
null;
59 $this->adjacentChunks = igbinary_serialize(array_map(
60 fn(?
Chunk $c) => $c !==
null ? FastChunkSerializer::serializeTerrain($c) :
null,
64 $this->
storeLocal(self::TLS_KEY_ON_COMPLETION, $onCompletion);
69 if($context ===
null){
70 throw new AssumptionFailedError(
"Generator context should have been initialized before any PopulationTask execution");
73 $chunk = $this->chunk !==
null ? FastChunkSerializer::deserializeTerrain($this->chunk) : null;
79 $serialChunks = igbinary_unserialize($this->adjacentChunks);
81 function(?
string $serialized) : ?
Chunk{
82 if($serialized ===
null){
85 $chunk = FastChunkSerializer::deserializeTerrain($serialized);
86 $chunk->clearTerrainDirtyFlags();
93 $context->getWorldMinY(),
94 $context->getWorldMaxY(),
95 $context->getGenerator(),
102 $this->chunk = FastChunkSerializer::serializeTerrain($chunk);
105 foreach($chunks as $relativeChunkHash => $c){
106 $serialChunks[$relativeChunkHash] = $c->isTerrainDirty() ? FastChunkSerializer::serializeTerrain($c) : null;
108 $this->adjacentChunks = igbinary_serialize($serialChunks) ??
throw new AssumptionFailedError(
"igbinary_serialize() returned null");
116 $onCompletion = $this->fetchLocal(self::TLS_KEY_ON_COMPLETION);
118 $chunk = $this->chunk !==
null ?
119 FastChunkSerializer::deserializeTerrain($this->chunk) :
126 $serialAdjacentChunks = igbinary_unserialize($this->adjacentChunks);
127 $adjacentChunks = [];
128 foreach($serialAdjacentChunks as $relativeChunkHash => $c){
130 $adjacentChunks[$relativeChunkHash] = FastChunkSerializer::deserializeTerrain($c);
134 $onCompletion($chunk, $adjacentChunks);