mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-07 04:17:07 +00:00
Alternate chunk generation between multiple levels
This commit is contained in:
parent
de6f5309dc
commit
24134a06b8
@ -101,8 +101,8 @@ class GenerationManager{
|
|||||||
|
|
||||||
protected $generatedQueue = [];
|
protected $generatedQueue = [];
|
||||||
|
|
||||||
/** @var \SplQueue */
|
/** @var array */
|
||||||
protected $requestQueue;
|
protected $requestQueue = [];
|
||||||
|
|
||||||
/** @var array */
|
/** @var array */
|
||||||
protected $needsChunk = [];
|
protected $needsChunk = [];
|
||||||
@ -118,15 +118,18 @@ class GenerationManager{
|
|||||||
$this->socket = $socket;
|
$this->socket = $socket;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
$this->loader = $loader;
|
$this->loader = $loader;
|
||||||
$this->requestQueue = new \SplQueue();
|
$chunkX = $chunkZ = null;
|
||||||
|
|
||||||
while($this->shutdown !== true){
|
while($this->shutdown !== true){
|
||||||
if($this->requestQueue->count() > 0){
|
if(count($this->requestQueue) > 0){
|
||||||
$r = $this->requestQueue->dequeue();
|
foreach($this->requestQueue as $levelID => $chunks){
|
||||||
$levelID = $r[0];
|
if(count($chunks) === 0){
|
||||||
$chunkX = $r[1];
|
unset($this->requestQueue[$levelID]);
|
||||||
$chunkZ = $r[2];
|
}
|
||||||
$this->generateChunk($levelID, $chunkX, $chunkZ);
|
Level::getXZ($key = key($chunks), $chunkX, $chunkZ);
|
||||||
|
unset($this->requestQueue[$levelID][$key]);
|
||||||
|
$this->generateChunk($levelID, $chunkX, $chunkZ);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
$this->readPacket();
|
$this->readPacket();
|
||||||
}
|
}
|
||||||
@ -171,7 +174,15 @@ class GenerationManager{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function enqueueChunk($levelID, $chunkX, $chunkZ){
|
protected function enqueueChunk($levelID, $chunkX, $chunkZ){
|
||||||
$this->requestQueue->enqueue([$levelID, $chunkX, $chunkZ]);
|
if(!isset($this->requestQueue[$levelID])){
|
||||||
|
$this->requestQueue[$levelID] = [];
|
||||||
|
}
|
||||||
|
if(!isset($this->requestQueue[$levelID][$index = "$chunkX:$chunkZ"])){
|
||||||
|
$this->requestQueue[$levelID][$index] = 1;
|
||||||
|
}else{
|
||||||
|
$this->requestQueue[$levelID][$index]++;
|
||||||
|
arsort($this->requestQueue[$levelID]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function receiveChunk($levelID, FullChunk $chunk){
|
protected function receiveChunk($levelID, FullChunk $chunk){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user