61 array $adjacentChunks,
62 \Closure $onCompletion
64 $this->chunk = $chunk !==
null ? FastChunkSerializer::serializeTerrain($chunk) :
null;
66 $this->adjacentChunks = igbinary_serialize(array_map(
67 fn(?
Chunk $c) => $c !==
null ? FastChunkSerializer::serializeTerrain($c) :
null,
71 $this->
storeLocal(self::TLS_KEY_ON_COMPLETION, $onCompletion);
76 if($context ===
null){
77 throw new AssumptionFailedError(
"Generator context should have been initialized before any PopulationTask execution");
80 $chunk = $this->chunk !==
null ? FastChunkSerializer::deserializeTerrain($this->chunk) : null;
86 $serialChunks = igbinary_unserialize($this->adjacentChunks);
88 function(?
string $serialized) : ?
Chunk{
89 if($serialized ===
null){
92 $chunk = FastChunkSerializer::deserializeTerrain($serialized);
93 $chunk->clearTerrainDirtyFlags();
100 $context->getWorldMinY(),
101 $context->getWorldMaxY(),
102 $context->getGenerator(),
109 $this->chunk = FastChunkSerializer::serializeTerrain($chunk);
112 foreach($chunks as $relativeChunkHash => $c){
113 $serialChunks[$relativeChunkHash] = $c->isTerrainDirty() ? FastChunkSerializer::serializeTerrain($c) : null;
115 $this->adjacentChunks = igbinary_serialize($serialChunks) ??
throw new AssumptionFailedError(
"igbinary_serialize() returned null");
123 $onCompletion = $this->fetchLocal(self::TLS_KEY_ON_COMPLETION);
125 $chunk = $this->chunk !==
null ?
126 FastChunkSerializer::deserializeTerrain($this->chunk) :
133 $serialAdjacentChunks = igbinary_unserialize($this->adjacentChunks);
134 $adjacentChunks = [];
135 foreach($serialAdjacentChunks as $relativeChunkHash => $c){
137 $adjacentChunks[$relativeChunkHash] = FastChunkSerializer::deserializeTerrain($c);
141 $onCompletion($chunk, $adjacentChunks);