pocketmine\math\Vector2::createRandomDirection PHP Method

createRandomDirection() public static method

public static createRandomDirection ( Random $random )
$random pocketmine\utils\Random
    public static function createRandomDirection(Random $random)
    {
        return VectorMath::getDirection2D($random->nextFloat() * 2 * pi());
    }

Usage Example

Esempio n. 1
0
 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;
 }