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));
 | 
			
		||||
        $currentPlace = $this->placeRepository->getByRoundInChallenge($challenge, $currentRound);
 | 
			
		||||
        
 | 
			
		||||
        foreach ($allGuessesInChallenge as $guess) {
 | 
			
		||||
            $round = $guess->getPlaceInChallenge()->getRound();
 | 
			
		||||
        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'] = [
 | 
			
		||||
                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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user