当前位置: 首页>>代码示例>>PHP>>正文


PHP Human::onUpdate方法代码示例

本文整理汇总了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;
 }
开发者ID:mwvent,项目名称:WattzMCPE,代码行数:68,代码来源:Herobrine.php

示例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;
//.........这里部分代码省略.........
开发者ID:mwvent,项目名称:WattzMCPE,代码行数:101,代码来源:UndeadPlayer.php


注:本文中的pocketmine\entity\Human::onUpdate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。