mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-20 16:00:20 +00:00
Eliminate weak comparisons in entity package
Weak comparisons were used in cases when we were worried about comparing int and float. In some cases (particularly involving Vector3) we do need to be wary of this, so floatval() is used to avoid incorrect type comparisons. In other cases, we were already exclusively comparing float-float, so weak compare wasn't needed anyway.
This commit is contained in:
parent
8ee70b209e
commit
90f0b85d2e
@ -76,7 +76,7 @@ class Attribute{
|
||||
throw new \InvalidArgumentException("Minimum $minValue is greater than the maximum $max");
|
||||
}
|
||||
|
||||
if($this->minValue != $minValue){
|
||||
if($this->minValue !== $minValue){
|
||||
$this->desynchronized = true;
|
||||
$this->minValue = $minValue;
|
||||
}
|
||||
@ -95,7 +95,7 @@ class Attribute{
|
||||
throw new \InvalidArgumentException("Maximum $maxValue is less than the minimum $min");
|
||||
}
|
||||
|
||||
if($this->maxValue != $maxValue){
|
||||
if($this->maxValue !== $maxValue){
|
||||
$this->desynchronized = true;
|
||||
$this->maxValue = $maxValue;
|
||||
}
|
||||
@ -140,7 +140,7 @@ class Attribute{
|
||||
$value = min(max($value, $this->getMinValue()), $this->getMaxValue());
|
||||
}
|
||||
|
||||
if($this->currentValue != $value){
|
||||
if($this->currentValue !== $value){
|
||||
$this->desynchronized = true;
|
||||
$this->currentValue = $value;
|
||||
}elseif($forceSend){
|
||||
|
@ -72,6 +72,7 @@ use function assert;
|
||||
use function cos;
|
||||
use function count;
|
||||
use function deg2rad;
|
||||
use function floatval;
|
||||
use function floor;
|
||||
use function fmod;
|
||||
use function get_class;
|
||||
@ -591,7 +592,7 @@ abstract class Entity{
|
||||
* Sets the health of the Entity. This won't send any update to the players
|
||||
*/
|
||||
public function setHealth(float $amount) : void{
|
||||
if($amount == $this->health){
|
||||
if($amount === $this->health){
|
||||
return;
|
||||
}
|
||||
|
||||
@ -760,8 +761,8 @@ abstract class Entity{
|
||||
|
||||
$diffMotion = $this->motion->subtractVector($this->lastMotion)->lengthSquared();
|
||||
|
||||
$still = $this->motion->lengthSquared() == 0.0;
|
||||
$wasStill = $this->lastMotion->lengthSquared() == 0.0;
|
||||
$still = $this->motion->lengthSquared() === 0.0;
|
||||
$wasStill = $this->lastMotion->lengthSquared() === 0.0;
|
||||
if($wasStill !== $still){
|
||||
//TODO: hack for client-side AI interference: prevent client sided movement when motion is 0
|
||||
$this->setNoClientPredictions($still);
|
||||
@ -1004,7 +1005,7 @@ abstract class Entity{
|
||||
abs($this->motion->z) <= self::MOTION_THRESHOLD ? 0 : null
|
||||
);
|
||||
|
||||
if($this->motion->x != 0 || $this->motion->y != 0 || $this->motion->z != 0){
|
||||
if(floatval($this->motion->x) !== 0.0 || floatval($this->motion->y) !== 0.0 || floatval($this->motion->z) !== 0.0){
|
||||
$this->move($this->motion->x, $this->motion->y, $this->motion->z);
|
||||
}
|
||||
|
||||
@ -1058,9 +1059,9 @@ abstract class Entity{
|
||||
public function hasMovementUpdate() : bool{
|
||||
return (
|
||||
$this->forceMovementUpdate ||
|
||||
$this->motion->x != 0 ||
|
||||
$this->motion->y != 0 ||
|
||||
$this->motion->z != 0 ||
|
||||
floatval($this->motion->x) !== 0.0 ||
|
||||
floatval($this->motion->y) !== 0.0 ||
|
||||
floatval($this->motion->z) !== 0.0 ||
|
||||
!$this->onGround
|
||||
);
|
||||
}
|
||||
@ -1163,7 +1164,7 @@ abstract class Entity{
|
||||
|
||||
$moveBB->offset(0, $dy, 0);
|
||||
|
||||
$fallingFlag = ($this->onGround || ($dy != $wantedY && $wantedY < 0));
|
||||
$fallingFlag = ($this->onGround || ($dy !== $wantedY && $wantedY < 0));
|
||||
|
||||
foreach($list as $bb){
|
||||
$dx = $bb->calculateXOffset($moveBB, $dx);
|
||||
@ -1177,7 +1178,7 @@ abstract class Entity{
|
||||
|
||||
$moveBB->offset(0, 0, $dz);
|
||||
|
||||
if($this->stepHeight > 0 && $fallingFlag && ($wantedX != $dx || $wantedZ != $dz)){
|
||||
if($this->stepHeight > 0 && $fallingFlag && ($wantedX !== $dx || $wantedZ !== $dz)){
|
||||
$cx = $dx;
|
||||
$cy = $dy;
|
||||
$cz = $dz;
|
||||
@ -1242,9 +1243,9 @@ abstract class Entity{
|
||||
$postFallVerticalVelocity = $this->updateFallState($dy, $this->onGround);
|
||||
|
||||
$this->motion = $this->motion->withComponents(
|
||||
$wantedX != $dx ? 0 : null,
|
||||
$postFallVerticalVelocity ?? ($wantedY != $dy ? 0 : null),
|
||||
$wantedZ != $dz ? 0 : null
|
||||
$wantedX !== $dx ? 0 : null,
|
||||
$postFallVerticalVelocity ?? ($wantedY !== $dy ? 0 : null),
|
||||
$wantedZ !== $dz ? 0 : null
|
||||
);
|
||||
|
||||
//TODO: vehicle collision events (first we need to spawn them!)
|
||||
@ -1253,10 +1254,10 @@ abstract class Entity{
|
||||
}
|
||||
|
||||
protected function checkGroundState(float $wantedX, float $wantedY, float $wantedZ, float $dx, float $dy, float $dz) : void{
|
||||
$this->isCollidedVertically = $wantedY != $dy;
|
||||
$this->isCollidedHorizontally = ($wantedX != $dx || $wantedZ != $dz);
|
||||
$this->isCollidedVertically = $wantedY !== $dy;
|
||||
$this->isCollidedHorizontally = ($wantedX !== $dx || $wantedZ !== $dz);
|
||||
$this->isCollided = ($this->isCollidedHorizontally || $this->isCollidedVertically);
|
||||
$this->onGround = ($wantedY != $dy && $wantedY < 0);
|
||||
$this->onGround = ($wantedY !== $dy && $wantedY < 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -66,7 +66,7 @@ class Location extends Position{
|
||||
|
||||
public function equals(Vector3 $v) : bool{
|
||||
if($v instanceof Location){
|
||||
return parent::equals($v) && $v->yaw == $this->yaw && $v->pitch == $this->pitch;
|
||||
return parent::equals($v) && $v->yaw === $this->yaw && $v->pitch === $this->pitch;
|
||||
}
|
||||
return parent::equals($v);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user