Reduced LightUpdate dependency on ChunkManager to indirect

this opens the gateway for alternative SubChunkIteratorManager implementations which don't use ChunkManager at all.
This commit is contained in:
Dylan K. Taylor 2020-09-20 12:41:53 +01:00
parent 5661d0496f
commit 4879df626d
4 changed files with 11 additions and 11 deletions

View File

@ -77,6 +77,7 @@ use pocketmine\world\particle\DestroyBlockParticle;
use pocketmine\world\particle\Particle; use pocketmine\world\particle\Particle;
use pocketmine\world\sound\BlockPlaceSound; use pocketmine\world\sound\BlockPlaceSound;
use pocketmine\world\sound\Sound; use pocketmine\world\sound\Sound;
use pocketmine\world\utils\SubChunkIteratorManager;
use function abs; use function abs;
use function array_fill_keys; use function array_fill_keys;
use function array_map; use function array_map;
@ -1165,14 +1166,14 @@ class World implements ChunkManager{
$blockFactory = BlockFactory::getInstance(); $blockFactory = BlockFactory::getInstance();
$this->timings->doBlockSkyLightUpdates->startTiming(); $this->timings->doBlockSkyLightUpdates->startTiming();
if($this->skyLightUpdate === null){ if($this->skyLightUpdate === null){
$this->skyLightUpdate = new SkyLightUpdate($this, $blockFactory->lightFilter, $blockFactory->blocksDirectSkyLight); $this->skyLightUpdate = new SkyLightUpdate(new SubChunkIteratorManager($this), $blockFactory->lightFilter, $blockFactory->blocksDirectSkyLight);
} }
$this->skyLightUpdate->recalculateNode($x, $y, $z); $this->skyLightUpdate->recalculateNode($x, $y, $z);
$this->timings->doBlockSkyLightUpdates->stopTiming(); $this->timings->doBlockSkyLightUpdates->stopTiming();
$this->timings->doBlockLightUpdates->startTiming(); $this->timings->doBlockLightUpdates->startTiming();
if($this->blockLightUpdate === null){ if($this->blockLightUpdate === null){
$this->blockLightUpdate = new BlockLightUpdate($this, $blockFactory->lightFilter, $blockFactory->light); $this->blockLightUpdate = new BlockLightUpdate(new SubChunkIteratorManager($this), $blockFactory->lightFilter, $blockFactory->light);
} }
$this->blockLightUpdate->recalculateNode($x, $y, $z); $this->blockLightUpdate->recalculateNode($x, $y, $z);
$this->timings->doBlockLightUpdates->stopTiming(); $this->timings->doBlockLightUpdates->stopTiming();

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\world\light; namespace pocketmine\world\light;
use pocketmine\world\ChunkManager; use pocketmine\world\utils\SubChunkIteratorManager;
use function max; use function max;
class BlockLightUpdate extends LightUpdate{ class BlockLightUpdate extends LightUpdate{
@ -40,8 +40,8 @@ class BlockLightUpdate extends LightUpdate{
* @phpstan-param \SplFixedArray<int> $lightFilters * @phpstan-param \SplFixedArray<int> $lightFilters
* @phpstan-param \SplFixedArray<int> $lightEmitters * @phpstan-param \SplFixedArray<int> $lightEmitters
*/ */
public function __construct(ChunkManager $world, \SplFixedArray $lightFilters, \SplFixedArray $lightEmitters){ public function __construct(SubChunkIteratorManager $subChunkHandler, \SplFixedArray $lightFilters, \SplFixedArray $lightEmitters){
parent::__construct($world, $lightFilters); parent::__construct($subChunkHandler, $lightFilters);
$this->lightEmitters = $lightEmitters; $this->lightEmitters = $lightEmitters;
} }

View File

@ -23,7 +23,6 @@ declare(strict_types=1);
namespace pocketmine\world\light; namespace pocketmine\world\light;
use pocketmine\world\ChunkManager;
use pocketmine\world\format\LightArray; use pocketmine\world\format\LightArray;
use pocketmine\world\utils\SubChunkIteratorManager; use pocketmine\world\utils\SubChunkIteratorManager;
use pocketmine\world\World; use pocketmine\world\World;
@ -54,10 +53,10 @@ abstract class LightUpdate{
* @param \SplFixedArray|int[] $lightFilters * @param \SplFixedArray|int[] $lightFilters
* @phpstan-param \SplFixedArray<int> $lightFilters * @phpstan-param \SplFixedArray<int> $lightFilters
*/ */
public function __construct(ChunkManager $world, \SplFixedArray $lightFilters){ public function __construct(SubChunkIteratorManager $subChunkHandler, \SplFixedArray $lightFilters){
$this->lightFilters = $lightFilters; $this->lightFilters = $lightFilters;
$this->subChunkHandler = new SubChunkIteratorManager($world); $this->subChunkHandler = $subChunkHandler;
$this->subChunkHandler->onSubChunkChange(\Closure::fromCallable([$this, 'updateLightArrayRef'])); $this->subChunkHandler->onSubChunkChange(\Closure::fromCallable([$this, 'updateLightArrayRef']));
} }

View File

@ -23,7 +23,7 @@ declare(strict_types=1);
namespace pocketmine\world\light; namespace pocketmine\world\light;
use pocketmine\world\ChunkManager; use pocketmine\world\utils\SubChunkIteratorManager;
use pocketmine\world\World; use pocketmine\world\World;
use function max; use function max;
@ -41,8 +41,8 @@ class SkyLightUpdate extends LightUpdate{
* @phpstan-param \SplFixedArray<int> $lightFilters * @phpstan-param \SplFixedArray<int> $lightFilters
* @phpstan-param \SplFixedArray<bool> $directSkyLightBlockers * @phpstan-param \SplFixedArray<bool> $directSkyLightBlockers
*/ */
public function __construct(ChunkManager $world, \SplFixedArray $lightFilters, \SplFixedArray $directSkyLightBlockers){ public function __construct(SubChunkIteratorManager $subChunkHandler, \SplFixedArray $lightFilters, \SplFixedArray $directSkyLightBlockers){
parent::__construct($world, $lightFilters); parent::__construct($subChunkHandler, $lightFilters);
$this->directSkyLightBlockers = $directSkyLightBlockers; $this->directSkyLightBlockers = $directSkyLightBlockers;
} }