/** * @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); }
/** * 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; }