示例#1
0
 /**
  * @return boolean
  */
 public function start()
 {
     $settings = new Settings();
     $settings->setBoardSize((int) $this->board_size);
     $settings->setMoveTime((int) $this->move_time);
     $settings->setRaceChange((bool) $this->race_change);
     $settings->setRaceMultipleTimes((bool) $this->race_multiple_times);
     $player = new Player();
     $player->setId(Yii::$app->user->id);
     $player->setName(Yii::$app->user->identity->username);
     $imperium = new Imperium();
     $imperium->setCreator(Yii::$app->user->id);
     $imperium->setSettings($settings);
     $imperium->setStage(Imperium::STAGE_START);
     $imperium->addPlayer($player);
     $imperium->setStage(Imperium::STAGE_RACE);
     $imperium->setCurrentPlayer($player);
     return (new Game())->save($imperium);
 }
示例#2
0
 /**
  * Checks if player is in proper stage to play.
  * @param Player $player
  * @return boolean
  */
 public function isAvailableToPlay($player)
 {
     switch ($this->getStage()) {
         case self::STAGE_PLAY:
             if (!$player->hasPassed()) {
                 return true;
             }
             break;
         case self::STAGE_RACE:
             if (in_array($player->getStage(), [Player::STAGE_SEATED, Player::STAGE_RACE_PASSED])) {
                 return true;
             }
             break;
         case self::STAGE_BOARD:
             if (in_array($player->getStage(), [Player::STAGE_HEX_GIVEN, Player::STAGE_HEX_SET_EMPTY, Player::STAGE_HEX_SET_SYSTEM])) {
                 return true;
             }
             break;
     }
     return false;
 }