本文整理汇总了PHP中pocketmine\entity\Human::onUpdate方法的典型用法代码示例。如果您正苦于以下问题:PHP Human::onUpdate方法的具体用法?PHP Human::onUpdate怎么用?PHP Human::onUpdate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pocketmine\entity\Human
的用法示例。
在下文中一共展示了Human::onUpdate方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: onUpdate
public function onUpdate($currentTick)
{
if ($this->knockback) {
if (time() < $this->knockback) {
return parent::onUpdate($currentTick);
}
$this->knockback = 0;
}
// check has target and target still valid else despawn/close
if (is_null($this->targetPlayer)) {
Server::getInstance()->getLogger()->info(Main::PREFIX . "Herobrine entity has no target - despawning");
$this->poofAway();
return true;
}
if (!$this->targetPlayer->isConnected()) {
$this->poofAway();
return true;
}
if ($this->targetPlayer->getLevel()->getName() != $this->getLevel()->getName()) {
$this->poofAway();
return true;
}
// get target distance for comparison
$targetdist = $this->distance($this->targetPlayer);
// despawn if any player <5 block distance OR change target if another player is closer
foreach ($this->getLevel()->getPlayers() as $player) {
$playerdist = $this->distance($player);
if ($playerdist < 15) {
Server::getInstance()->getLogger()->info(Main::PREFIX . "Herobrine " . $player->getName() . " got close - despawning");
// $newundeadplayer = new UndeadPlayer(new dummyChunk, new Compound, $player, $this, $this->plugin);
$this->poofAway();
return true;
}
if ($playerdist < $targetdist) {
if ($this->lastNearestPlayer != $player->getName()) {
$this->lastNearestPlayer = $player->getName();
Server::getInstance()->getLogger()->info(Main::PREFIX . "Herobrine turn to look @" . $this->lastNearestPlayer . " who is closer than " . $this->targetPlayer->getName());
}
$this->targetPlayer = $player;
$targetdist = $playerdist;
}
}
// despawn if target too far away
if ($targetdist > 30) {
Server::getInstance()->getLogger()->info(Main::PREFIX . "Herobrine target too far away - despawning");
$this->poofAway();
return true;
}
// turn to look at target
$target = $this->targetPlayer;
if ($targetdist == 0) {
$targetdist = 0.1;
}
$this->targetDist = $targetdist;
$dir = $target->subtract($this);
$dir = $dir->divide($targetdist);
$this->yaw = rad2deg(atan2(-$dir->getX(), $dir->getZ()));
$this->pitch = rad2deg(atan(-$dir->getY()));
$this->updateMovement();
$this->level->addEntityMovement($this->chunk->getX(), $this->chunk->getZ(), $this->id, $this->x, $this->y + $this->getEyeHeight(), $this->z, $this->yaw, $this->pitch, $this->yaw);
// bored timer
if (time() - $this->timespawned > 120) {
Server::getInstance()->getLogger()->info(Main::PREFIX . "Herobrine got bored (120s no activity)");
$this->poofAway();
return true;
}
return true;
}
示例2: onUpdate
public function onUpdate($currentTick)
{
if ($this->knockback) {
if (time() < $this->knockback) {
return parent::onUpdate($currentTick);
}
$this->knockback = 0;
}
// check has target and target still valid else despawn/close
if (is_null($this->targetPlayer)) {
$this->poofAway();
return true;
}
if (!$this->targetPlayer->isConnected()) {
Server::getInstance()->getLogger()->info(Main::PREFIX . $this->thisname . "'s target disconnected");
$this->poofAway();
return true;
}
if ($this->targetPlayer->getLevel()->getName() != $this->getLevel()->getName()) {
Server::getInstance()->getLogger()->info(Main::PREFIX . $this->thisname . "'s target left world");
$this->poofAway();
return true;
}
// get target distance for comparison
$targetdist = $this->distance($this->targetPlayer);
// change target if another player is closer
foreach ($this->getLevel()->getPlayers() as $player) {
$playerdist = $this->distance($player);
if ($playerdist < $targetdist) {
if ($this->lastNearestPlayer != $player->getName()) {
$this->lastNearestPlayer = $player->getName();
}
Server::getInstance()->getLogger()->info(Main::PREFIX . $this->thisname . "'s changed target from " . $this->targetPlayer->getName() . " to " . $player->getName());
$this->targetPlayer = $player;
$targetdist = $playerdist;
}
}
// despawn if target too far away
if ($targetdist > 30) {
Server::getInstance()->getLogger()->info(Main::PREFIX . $this->thisname . "'s target got too far away");
$this->poofAway();
return true;
}
// turn to look at target
$target = $this->targetPlayer;
if ($targetdist == 0) {
$targetdist = 0.1;
}
$this->targetDist = $targetdist;
$dir = $target->subtract($this);
$dir = $dir->divide($targetdist);
$this->yaw = rad2deg(atan2(-$dir->getX(), $dir->getZ()));
$this->pitch = rad2deg(atan(-$dir->getY()));
$this->updateMovement();
$this->level->addEntityMovement($this->chunk->getX(), $this->chunk->getZ(), $this->id, $this->x, $this->y + $this->getEyeHeight(), $this->z, $this->yaw, $this->pitch, $this->yaw);
// move towards target if distance > attack distance
$bb = clone $this->getBoundingBox();
$tickDiff = max(1, $currentTick - $this->lastUpdate);
$onGround = true;
if ($onGround && $targetdist > self::$attack) {
$x = $dir->getX() * self::$speed;
//$y = $dir->getY() * self::$speed;
$y = $this->targetPlayer->getY() - $this->getY();
$z = $dir->getZ() * self::$speed;
/*
$isJump = count($this->level->getCollisionBlocks($bb->offset($x, 1.2, $z))) <= 0;
if(count($this->level->getCollisionBlocks($bb->offset(0, 0.1, $z))) > 0) {
if ($isJump) {
$y = self::$jump;
$this->motionZ = $z;
}
$z = 0;
}
if(count($this->level->getCollisionBlocks($bb->offset($x, 0.1, 0))) > 0) {
if ($isJump) {
$y = self::$jump;
$this->motionX = $x;
}
$x = 0;
}
*/
// $motion = new Vector3($x, $y, $z);
$this->move($x, $y, $z);
}
// atttack target if in range
if ($onGround && $targetdist <= self::$attack) {
/*
Server::getInstance()->getLogger()->info(Main::PREFIX . "undead attacking player");
$attack_power = mt_rand(0,5);
if ($attack_power > 2) {
$source = new EntityDamageByEntityEvent($this,$this->targetPlayer,EntityDamageEvent::CAUSE_ENTITY_ATTACK,$attack_power,0.3);
// $this->targetPlayer->attack($source->getFinalDamage(),$source);
$this->targetPlayer->attack(0 ,$source);
}
*/
$attacker_effect = Effect::getEffect(Effect::CONFUSION);
$attacker_effect->setDuration(150);
$this->targetPlayer->addEffect($attacker_effect);
}
return true;
//.........这里部分代码省略.........