feature/MAPG-235-basic-challenge-mode #48
@ -141,42 +141,54 @@ class GameFlowController
|
||||
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));
|
||||
|
||||
foreach ($allGuessesInChallenge as $guess) {
|
||||
$round = $guess->getPlaceInChallenge()->getRound();
|
||||
|
||||
if ($guess->getUser()->getId() === $userId) {
|
||||
$response['history'][$round]['position'] =
|
||||
$guess->getPlaceInChallenge()->getPlace()->getPosition()->toArray();
|
||||
$response['history'][$round]['result'] = [
|
||||
$currentPlace = $this->placeRepository->getByRoundInChallenge($challenge, $currentRound);
|
||||
|
||||
if (!isset($currentPlace) || $withHistory) {
|
||||
foreach ($this->guessRepository->getAllInChallenge($challenge) as $guess) {
|
||||
$round = $guess->getPlaceInChallenge()->getRound();
|
||||
|
||||
if ($guess->getUser()->getId() === $userId) {
|
||||
$response['history'][$round]['position'] =
|
||||
$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(),
|
||||
'distance' => $guess->getDistance(),
|
||||
'score' => $guess->getScore()
|
||||
];
|
||||
} else {
|
||||
$response['history'][$round]['allResults'][] = [
|
||||
'userName' => $guess->getUser()->getDisplayName(),
|
||||
'guessPosition' => $guess->getPosition()->toArray(),
|
||||
'distance' => $guess->getDistance(),
|
||||
'score' => $guess->getScore()
|
||||
];
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$currentPlace = $this->placeRepository->getByRoundInChallenge($challenge, $currentRound);
|
||||
|
||||
if(!isset($currentPlace)) { // game finished
|
||||
if (!isset($currentPlace)) { // game finished
|
||||
$response['finished'] = true;
|
||||
|
||||
} else { // continue game
|
||||
$response['place'] = [
|
||||
'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;
|
||||
@ -196,7 +208,7 @@ class GameFlowController
|
||||
$challenge = $userInChallenge->getChallenge();
|
||||
$currentRound = $userInChallenge->getCurrentRound();
|
||||
|
||||
$response = $this->prepareChallengeResponse($userId, $challenge, $currentRound);
|
||||
$response = $this->prepareChallengeResponse($userId, $challenge, $currentRound, true);
|
||||
|
||||
return new JsonContent($response);
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ class PersistentDataManager
|
||||
|
||||
next($relations);
|
||||
} else {
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,6 @@ class GuessRepository
|
||||
public function getAllInChallenge(Challenge $challenge): Generator
|
||||
{
|
||||
$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->orderBy('round');
|
||||
|
||||
@ -63,7 +62,6 @@ class GuessRepository
|
||||
public function getAllInChallengeByRound(int $round, Challenge $challenge): Generator
|
||||
{
|
||||
$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('round', '=', $round);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user