Alternate chunk generation between multiple levels

This commit is contained in:
Shoghi Cervantes 2014-08-16 11:49:37 +02:00
parent de6f5309dc
commit 24134a06b8

View File

@ -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]; }
Level::getXZ($key = key($chunks), $chunkX, $chunkZ);
unset($this->requestQueue[$levelID][$key]);
$this->generateChunk($levelID, $chunkX, $chunkZ); $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){