Example #1
0
 protected function acceptRematch(Player $player)
 {
     $game = $player->getGame();
     $opponent = $player->getOpponent();
     // if the rematch is already accepted
     // can happen if the guy clicks frenetically
     // on the rematch accept button
     if ($nextGame = $game->getNext()) {
         $nextOpponent = $nextGame->getPlayer($player->getColor());
         $nextPlayer = $nextOpponent->getOpponent();
     } else {
         $nextOpponent = $this->gameGenerator->createReturnGame($opponent);
         $nextPlayer = $nextOpponent->getOpponent();
         $nextGame = $nextOpponent->getGame();
         $this->logger->notice($player, 'Player:rematch accept');
         $this->messenger->addSystemMessage($game, 'Rematch offer accepted');
         $nextGame->start();
         $this->memory->setAlive($nextPlayer);
         // the opponent still pings the old game,
         // so we set it as active on the new game
         if ($this->memory->getActivity($opponent)) {
             $this->memory->setAlive($nextOpponent);
         }
     }
     // tell spectators to reload the table
     $game->addEventToStacks(array('type' => 'reload_table'));
     // tell players to move to next game
     foreach (array(array($player, $nextPlayer), array($opponent, $nextOpponent)) as $pair) {
         $pair[0]->addEventToStack(array('type' => 'redirect', 'url' => $this->urlGenerator->generate('lichess_player', array('id' => $pair[1]->getFullId()))));
     }
     $this->objectManager->persist($nextGame);
 }
Example #2
0
 protected function acceptRematch(Player $player)
 {
     $game = $player->getGame();
     $opponent = $player->getOpponent();
     // if the rematch is already accepted
     // can happen if the guy clicks frenetically
     // on the rematch accept button
     if ($nextGame = $game->getNext()) {
         $nextOpponent = $nextGame->getPlayer($player->getColor());
         $nextPlayer = $nextOpponent->getOpponent();
         $messages = array();
     } else {
         $nextOpponent = $this->gameGenerator->createReturnGame($opponent);
         $nextPlayer = $nextOpponent->getOpponent();
         $nextGame = $nextOpponent->getGame();
         $messages = $this->starter->start($nextGame);
         $this->objectManager->persist($nextGame);
     }
     return array($nextGame, $messages);
 }
Example #3
0
 public function expandPlayer(Player $player)
 {
     return sprintf('player(%s,%s,%s,%s) %s', $player->getColor(), $player->getIsAi() ? 'AI' : $player->getUsernameWithElo(), $player->getGame()->hasClock() ? $player->getGame()->getClock()->getRemainingTime($player->getColor()) . 's.' : '-', $this->generator->generate('lichess_player', array('id' => $player->getFullId()), true), $this->expandGame($player->getGame()));
 }
Example #4
0
 public function setCreator(Player $player)
 {
     $this->setCreatorColor($player->getColor());
 }
Example #5
0
 public function renderGameWatchData(Player $player, $possibleMoves)
 {
     $game = $player->getGame();
     $gameId = $game->getId();
     $color = $player->getColor();
     $opponent = $player->getOpponent();
     $generator = $this->getRouterGenerator();
     $translator = $this->getTranslator();
     $locale = $this->container->get('session')->getLocale();
     $data = array('game' => array('id' => $game->getId(), 'started' => $game->getIsStarted(), 'finished' => $game->getIsFinishedOrAborted(), 'clock' => $game->hasClock(), 'player' => $game->getTurnPlayer()->getColor(), 'turns' => $game->getTurns(), 'last_move' => $game->getLastMove()), 'player' => array('color' => $player->getColor(), 'version' => $player->getStack()->getVersion(), 'spectator' => true, 'unique_id' => uniqid()), 'opponent' => array('color' => $opponent->getColor(), 'ai' => $opponent->getIsAi(), 'active' => true), 'url' => array('sync' => $this->getXhrUrlPrefix() . $generator->generate('lichess_sync', array('l' => $locale, 'id' => $gameId, 'color' => $color, 'version' => 9999999, 'playerFullId' => '')) . '/', 'table' => $generator->generate('lichess_table', array('id' => $gameId, 'color' => $color, 'playerFullId' => '')) . '/', 'opponent' => $generator->generate('lichess_opponent', array('id' => $gameId, 'color' => $color, 'playerFullId' => '')) . '/'), 'i18n' => array('Game Over' => $translator->trans('Game Over'), 'Waiting for opponent' => $translator->trans('Waiting for opponent'), 'Your turn' => $translator->trans('Your turn')), 'possible_moves' => $possibleMoves, 'sync_latency' => $this->container->getParameter('lichess.sync.latency') * 1000, 'animation_delay' => $this->container->getParameter('lichess.animation.delay') * 1000, 'locale' => $this->container->get('session')->getLocale());
     return sprintf('<script type="text/javascript">var lichess_data = %s;</script>', json_encode($data));
 }
Example #6
0
 public function getPlayerKey(Player $player)
 {
     return $player->getGame()->getId() . '.' . $player->getColor() . '.alive';
 }
Example #7
0
 public function addPlayerMessage(Player $player, $message)
 {
     return $this->addMessage($player->getGame(), $player->getColor(), $message);
 }
Example #8
0
 private function gameColorUrl(Player $player)
 {
     return $player->getGame()->getId() . '/' . $player->getColor();
 }
Example #9
0
 public function renderGameWatchData(Player $player, $version, $possibleMoves)
 {
     $game = $player->getGame();
     $gameId = $game->getId();
     $color = $player->getColor();
     $opponent = $player->getOpponent();
     $generator = $this->getUrlGenerator();
     $translator = $this->getTranslator();
     $data = array('game' => array('id' => $game->getId(), 'started' => $game->getIsStarted(), 'finished' => $game->getIsFinishedOrAborted(), 'clock' => $game->hasClock(), 'player' => $game->getTurnPlayer()->getColor(), 'turns' => $game->getTurns(), 'last_move' => $game->getLastMove()), 'player' => array('color' => $player->getColor(), 'version' => $version, 'spectator' => true, 'unique_id' => uniqid()), 'opponent' => array('color' => $opponent->getColor(), 'ai' => $opponent->getIsAi(), 'active' => true), 'url' => array('table' => $generator->generate('lichess_table', array('id' => $gameId, 'color' => $color, 'playerFullId' => '')), 'players' => $generator->generate('lichess_game_players', array('id' => $gameId))), 'possible_moves' => $possibleMoves, 'animation_delay' => round($this->container->getParameter('lichess.animation.delay') * 1000 * self::animationDelayFactor($game->estimateTotalTime())));
     return sprintf('<script type="text/javascript">var lichess_data = %s;</script>', json_encode($data));
 }
Example #10
0
 protected function calculateBlurFactor(Player $player)
 {
     $blurs = $player->getGame()->getBlurs();
     return round(100 * max(0, min(1, $blurs[$player->getColor()] / $player->getGame()->getFullmoveNumber())));
 }