mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-12 16:59:44 +00:00
Revert "Remove hacks for triggering adjacent light refill"
This reverts commit 1dca9074d5f087d15f8d30d2941150fe51617489. This change introduced performance issues with transparent blocks.
This commit is contained in:
parent
c266f86b1b
commit
ae9f57ac28
@ -1492,8 +1492,8 @@ class Level implements ChunkManager, Metadatable{
|
||||
for($i = $y; $i >= $newHeightMap; --$i){
|
||||
$this->skyLightUpdate->setAndUpdateLight($x, $i, $z, 15);
|
||||
}
|
||||
}else{ //No heightmap change, block changed "underground" - trigger recalculation from surroundings
|
||||
$this->skyLightUpdate->setAndUpdateLight($x, $y, $z, 0);
|
||||
}else{ //No heightmap change, block changed "underground"
|
||||
$this->skyLightUpdate->setAndUpdateLight($x, $y, $z, max(0, $this->getHighestAdjacentBlockSkyLight($x, $y, $z) - BlockFactory::$lightFilter[($source->getId() << 4) | $source->getMeta()]));
|
||||
}
|
||||
|
||||
$this->timings->doBlockSkyLightUpdates->stopTiming();
|
||||
@ -1523,10 +1523,12 @@ class Level implements ChunkManager, Metadatable{
|
||||
$this->timings->doBlockLightUpdates->startTiming();
|
||||
|
||||
$block = $this->getBlockAt($x, $y, $z);
|
||||
$newLevel = max($block->getLightLevel(), $this->getHighestAdjacentBlockLight($x, $y, $z) - BlockFactory::$lightFilter[($block->getId() << 4) | $block->getMeta()]);
|
||||
|
||||
if($this->blockLightUpdate === null){
|
||||
$this->blockLightUpdate = new BlockLightUpdate($this);
|
||||
}
|
||||
$this->blockLightUpdate->setAndUpdateLight($x, $y, $z, $block->getLightLevel());
|
||||
$this->blockLightUpdate->setAndUpdateLight($x, $y, $z, $newLevel);
|
||||
|
||||
$this->timings->doBlockLightUpdates->stopTiming();
|
||||
}
|
||||
|
@ -72,13 +72,13 @@ abstract class LightUpdate{
|
||||
|
||||
if($oldLevel !== $newLevel){
|
||||
$this->setLight($x, $y, $z, $newLevel);
|
||||
}
|
||||
if($newLevel > $oldLevel){ //light increased
|
||||
$this->spreadVisited[$blockHash] = true;
|
||||
$this->spreadQueue->enqueue([$x, $y, $z]);
|
||||
}elseif($newLevel < 15){ //light removed or stayed the same, force recheck nearby environment
|
||||
$this->removalVisited[$blockHash] = true;
|
||||
$this->removalQueue->enqueue([$x, $y, $z, $oldLevel]);
|
||||
if($oldLevel < $newLevel){ //light increased
|
||||
$this->spreadVisited[$blockHash] = true;
|
||||
$this->spreadQueue->enqueue([$x, $y, $z]);
|
||||
}else{ //light removed
|
||||
$this->removalVisited[$blockHash] = true;
|
||||
$this->removalQueue->enqueue([$x, $y, $z, $oldLevel]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user