feature/MAPG-235-basic-challenge-mode #48

Merged
balazs merged 43 commits from feature/MAPG-235-basic-challenge-mode into develop 2021-05-28 20:41:09 +02:00
3 changed files with 38 additions and 28 deletions
Showing only changes of commit 30f4b7ad19 - Show all commits

View File

@ -141,42 +141,54 @@ class GameFlowController
return new JsonContent(['ok' => true]); return new JsonContent(['ok' => true]);
} }
private function prepareChallengeResponse(int $userId, Challenge $challenge, int $currentRound): array private function prepareChallengeResponse(int $userId, Challenge $challenge, int $currentRound, bool $withHistory = false): array
{ {
$allGuessesInChallenge = iterator_to_array($this->guessRepository->getAllInChallenge($challenge)); $currentPlace = $this->placeRepository->getByRoundInChallenge($challenge, $currentRound);
foreach ($allGuessesInChallenge as $guess) { if (!isset($currentPlace) || $withHistory) {
$round = $guess->getPlaceInChallenge()->getRound(); foreach ($this->guessRepository->getAllInChallenge($challenge) as $guess) {
$round = $guess->getPlaceInChallenge()->getRound();
if ($guess->getUser()->getId() === $userId) {
$response['history'][$round]['position'] = if ($guess->getUser()->getId() === $userId) {
$guess->getPlaceInChallenge()->getPlace()->getPosition()->toArray(); $response['history'][$round]['position'] =
$response['history'][$round]['result'] = [ $guess->getPlaceInChallenge()->getPlace()->getPosition()->toArray();
$response['history'][$round]['result'] = [
'guessPosition' => $guess->getPosition()->toArray(),
'distance' => $guess->getDistance(),
'score' => $guess->getScore()
];
} else {
$response['history'][$round]['allResults'][] = [
'userName' => $guess->getUser()->getDisplayName(),
'guessPosition' => $guess->getPosition()->toArray(), 'guessPosition' => $guess->getPosition()->toArray(),
'distance' => $guess->getDistance(), 'distance' => $guess->getDistance(),
'score' => $guess->getScore() 'score' => $guess->getScore()
]; ];
} else { }
$response['history'][$round]['allResults'][] = [
'userName' => $guess->getUser()->getDisplayName(),
'guessPosition' => $guess->getPosition()->toArray(),
'distance' => $guess->getDistance(),
'score' => $guess->getScore()
];
} }
} }
if (!isset($currentPlace)) { // game finished
$currentPlace = $this->placeRepository->getByRoundInChallenge($challenge, $currentRound);
if(!isset($currentPlace)) { // game finished
$response['finished'] = true; $response['finished'] = true;
} else { // continue game } else { // continue game
$response['place'] = [ $response['place'] = [
'panoId' => $currentPlace->getPanoIdCached(), 'panoId' => $currentPlace->getPanoIdCached(),
'pov' => [$currentPlace->getPov()->toArray()] 'pov' => $currentPlace->getPov()->toArray()
]; ];
$prevRound = $currentRound - 1;
if ($prevRound >= 0) {
foreach ($this->guessRepository->getAllInChallengeByRound($prevRound, $challenge) as $guess) {
if ($guess->getUser()->getId() != $userId) {
$response['allResults'][] = [
'userName' => $guess->getUser()->getDisplayName(),
'guessPosition' => $guess->getPosition()->toArray(),
'distance' => $guess->getDistance(),
'score' => $guess->getScore()
];
}
}
}
} }
return $response; return $response;
@ -196,7 +208,7 @@ class GameFlowController
$challenge = $userInChallenge->getChallenge(); $challenge = $userInChallenge->getChallenge();
$currentRound = $userInChallenge->getCurrentRound(); $currentRound = $userInChallenge->getCurrentRound();
$response = $this->prepareChallengeResponse($userId, $challenge, $currentRound); $response = $this->prepareChallengeResponse($userId, $challenge, $currentRound, true);
return new JsonContent($response); return new JsonContent($response);
} }

View File

@ -84,7 +84,7 @@ class PersistentDataManager
next($relations); next($relations);
} else { } else {
return; break;
} }
} }

View File

@ -53,7 +53,6 @@ class GuessRepository
public function getAllInChallenge(Challenge $challenge): Generator public function getAllInChallenge(Challenge $challenge): Generator
{ {
$select = new Select(\Container::$dbConnection); $select = new Select(\Container::$dbConnection);
// $select->innerJoin('place_in_challenge', ['guesses', 'place_in_challenge_id'], '=', ['place_in_challenge', 'id']);
$select->where('challenge_id', '=', $challenge->getId()); $select->where('challenge_id', '=', $challenge->getId());
$select->orderBy('round'); $select->orderBy('round');
@ -63,7 +62,6 @@ class GuessRepository
public function getAllInChallengeByRound(int $round, Challenge $challenge): Generator public function getAllInChallengeByRound(int $round, Challenge $challenge): Generator
{ {
$select = new Select(\Container::$dbConnection); $select = new Select(\Container::$dbConnection);
// $select->innerJoin('place_in_challenge', ['guesses', 'place_in_challenge_id'], '=', ['place_in_challenge', 'id']);
$select->where('challenge_id', '=', $challenge->getId()); $select->where('challenge_id', '=', $challenge->getId());
$select->where('round', '=', $round); $select->where('round', '=', $round);