pocketmine\level\generator\object\BigTree::getLeafGroupPoints PHP Метод

getLeafGroupPoints() приватный Метод

private getLeafGroupPoints ( pocketmine\level\ChunkManager $level, $x, $y, $z )
$level pocketmine\level\ChunkManager
    private function getLeafGroupPoints(ChunkManager $level, $x, $y, $z)
    {
        $amount = $this->leafAmount * $this->totalHeight / 13;
        $groupsPerLayer = (int) (1.382 + $amount * $amount);
        if ($groupsPerLayer == 0) {
            $groupsPerLayer = 1;
        }
        $trunkTopY = $y + $this->trunkHeight;
        $groups = [];
        $groupY = $y + $this->totalHeight - $this->leafDistanceLimit;
        $groups[] = [new Vector3($x, $groupY, $z), $trunkTopY];
        for ($currentLayer = (int) ($this->totalHeight - $this->leafDistanceLimit); $currentLayer >= 0; $currentLayer--) {
            $layerSize = $this->getRoughLayerSize($currentLayer);
            if ($layerSize < 0) {
                $groupY--;
                continue;
            }
            for ($count = 0; $count < $groupsPerLayer; $count++) {
                $scale = $this->widthScale * $layerSize * ($this->random->nextFloat() + 0.328);
                $randomOffset = Vector2::createRandomDirection($this->random)->multiply($scale);
                $groupX = (int) ($randomOffset->getX() + $x + 0.5);
                $groupZ = (int) ($randomOffset->getY() + $z + 0.5);
                $group = new Vector3($groupX, $groupY, $groupZ);
                if ($this->getAvailableBlockSpace($level, $group, $group->add(0, $this->leafDistanceLimit, 0)) != -1) {
                    continue;
                }
                $xOff = (int) ($x - $groupX);
                $zOff = (int) ($z - $groupZ);
                $horizontalDistanceToTrunk = sqrt($xOff * $xOff + $zOff * $zOff);
                $verticalDistanceToTrunk = $horizontalDistanceToTrunk * $this->branchSlope;
                $yDiff = (int) ($groupY - $verticalDistanceToTrunk);
                if ($yDiff > $trunkTopY) {
                    $base = $trunkTopY;
                } else {
                    $base = $yDiff;
                }
                if ($this->getAvailableBlockSpace($level, new Vector3($x, $base, $z), $group) == -1) {
                    $groups[] = [$group, $base];
                }
            }
            $groupY--;
        }
        return $groups;
    }