Block: rework addVelocityToEntity() to avoid vector3 mutation

This commit is contained in:
Dylan K. Taylor 2020-06-27 21:38:24 +01:00
parent ff00595a48
commit f1048aeaa3
4 changed files with 14 additions and 13 deletions

8
composer.lock generated
View File

@ -552,12 +552,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/pmmp/Math.git", "url": "https://github.com/pmmp/Math.git",
"reference": "d46310a42ab5535296ded0b9368e5642af723f47" "reference": "a0118ce3026929e11cc05cdf776bb18cdcd1b822"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/pmmp/Math/zipball/d46310a42ab5535296ded0b9368e5642af723f47", "url": "https://api.github.com/repos/pmmp/Math/zipball/a0118ce3026929e11cc05cdf776bb18cdcd1b822",
"reference": "d46310a42ab5535296ded0b9368e5642af723f47", "reference": "a0118ce3026929e11cc05cdf776bb18cdcd1b822",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -579,7 +579,7 @@
"LGPL-3.0" "LGPL-3.0"
], ],
"description": "PHP library containing math related code used in PocketMine-MP", "description": "PHP library containing math related code used in PocketMine-MP",
"time": "2020-06-19T10:25:24+00:00" "time": "2020-06-27T19:45:51+00:00"
}, },
{ {
"name": "pocketmine/nbt", "name": "pocketmine/nbt",

View File

@ -338,8 +338,8 @@ class Block{
return false; return false;
} }
public function addVelocityToEntity(Entity $entity, Vector3 $vector) : void{ public function addVelocityToEntity(Entity $entity) : ?Vector3{
return null;
} }
final public function getPos() : Position{ final public function getPos() : Position{

View File

@ -234,13 +234,11 @@ abstract class Liquid extends Transparent{
return $this->flowVector = $vector->normalize(); return $this->flowVector = $vector->normalize();
} }
public function addVelocityToEntity(Entity $entity, Vector3 $vector) : void{ public function addVelocityToEntity(Entity $entity) : ?Vector3{
if($entity->canBeMovedByCurrents()){ if($entity->canBeMovedByCurrents()){
$flow = $this->getFlowVector(); return $this->getFlowVector();
$vector->x += $flow->x;
$vector->y += $flow->y;
$vector->z += $flow->z;
} }
return null;
} }
abstract public function tickRate() : int; abstract public function tickRate() : int;

View File

@ -1262,13 +1262,16 @@ abstract class Entity{
} }
protected function checkBlockCollision() : void{ protected function checkBlockCollision() : void{
$vector = new Vector3(0, 0, 0); $vectors = [];
foreach($this->getBlocksAround() as $block){ foreach($this->getBlocksAround() as $block){
$block->onEntityInside($this); $block->onEntityInside($this);
$block->addVelocityToEntity($this, $vector); if(($v = $block->addVelocityToEntity($this)) !== null){
$vectors[] = $v;
}
} }
$vector = Vector3::sum(...$vectors);
if($vector->lengthSquared() > 0){ if($vector->lengthSquared() > 0){
$d = 0.014; $d = 0.014;
$this->motion = $this->motion->addVector($vector->normalize()->multiply($d)); $this->motion = $this->motion->addVector($vector->normalize()->multiply($d));