ExperienceOrb: clean up some confusing code

This commit is contained in:
Dylan K. Taylor 2019-01-23 16:46:18 +00:00
parent dc89b48354
commit 187f36fe38

View File

@ -28,6 +28,7 @@ use pocketmine\entity\Human;
use pocketmine\nbt\tag\IntTag; use pocketmine\nbt\tag\IntTag;
use pocketmine\nbt\tag\ShortTag; use pocketmine\nbt\tag\ShortTag;
use pocketmine\Player; use pocketmine\Player;
use function sqrt;
class ExperienceOrb extends Entity{ class ExperienceOrb extends Entity{
public const NETWORK_ID = self::XP_ORB; public const NETWORK_ID = self::XP_ORB;
@ -190,15 +191,15 @@ class ExperienceOrb extends Entity{
$this->setTargetPlayer($currentTarget); $this->setTargetPlayer($currentTarget);
if($currentTarget !== null){ if($currentTarget !== null){
$vector = $currentTarget->subtract($this)->add(0, $currentTarget->getEyeHeight() / 2, 0)->divide(self::MAX_TARGET_DISTANCE); $vector = $currentTarget->add(0, $currentTarget->getEyeHeight() / 2, 0)->subtract($this)->divide(self::MAX_TARGET_DISTANCE);
$distance = $vector->length(); $distance = $vector->lengthSquared();
$oneMinusDistance = (1 - $distance) ** 2; if($distance < 1){
$diff = $vector->normalize()->multiply(0.2 * (1 - sqrt($distance)) ** 2);
if($oneMinusDistance > 0){ $this->motion->x += $diff->x;
$this->motion->x += $vector->x / $distance * $oneMinusDistance * 0.2; $this->motion->y += $diff->y;
$this->motion->y += $vector->y / $distance * $oneMinusDistance * 0.2; $this->motion->z += $diff->z;
$this->motion->z += $vector->z / $distance * $oneMinusDistance * 0.2;
} }
if($currentTarget->canPickupXp() and $this->boundingBox->intersectsWith($currentTarget->getBoundingBox())){ if($currentTarget->canPickupXp() and $this->boundingBox->intersectsWith($currentTarget->getBoundingBox())){