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
2 changed files with 28 additions and 55 deletions
Showing only changes of commit 62251b1062 - Show all commits

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
balazs marked this conversation as resolved
Review

This file should be refactored sometime because it is very spaghetti :D

This file should be refactored sometime because it is very spaghetti :D
Review

I know, but I already put a lot of changes into this PR. I think we should refactor it in a separate story.

I know, but I already put a lot of changes into this PR. I think we should refactor it in a separate story.
Review

Yes, I meant later, it will be a bigger task.

Yes, I meant later, it will be a bigger task.
const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); const GameType = Object.freeze({ 'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2 });
(function () { (function () {
var Game = { var Game = {
@ -215,8 +215,8 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
} }
}, },
getGameIdentifier: function() { getGameIdentifier: function () {
switch(Game.type) { switch (Game.type) {
case GameType.SINGLE: case GameType.SINGLE:
return '/game/' + mapId; return '/game/' + mapId;
case GameType.MULTI: case GameType.MULTI:
@ -303,7 +303,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
Game.showSummary(); Game.showSummary();
document.getElementById('continueButton').style.display = 'none'; document.getElementById('continueButton').style.display = 'none';
} else { } else {
Game.panoId = this.response.place.panoId; Game.panoId = this.response.place.panoId;
@ -317,7 +317,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
}); });
}, },
transitToResultMap: function() { transitToResultMap: function () {
// TODO: refactor - it is necessary for mobile // TODO: refactor - it is necessary for mobile
if (window.getComputedStyle(document.getElementById('guess')).visibility === 'hidden') { if (window.getComputedStyle(document.getElementById('guess')).visibility === 'hidden') {
document.getElementById('showGuessButton').click(); document.getElementById('showGuessButton').click();
@ -353,7 +353,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
}, },
loadHistory: function (history) { loadHistory: function (history) {
if(!history) if (!history)
return; return;
Game.history = history; Game.history = history;
@ -385,9 +385,9 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
Game.addGuessPositionToResultMap(round.result.guessPosition, null, true); Game.addGuessPositionToResultMap(round.result.guessPosition, null, true);
balazs marked this conversation as resolved Outdated

I had to create span from javascript, because I didn't know, how else to control the display css attribute from both css (depending on screen size) and javascript (depending on the game type). Javascript overrides the css attribute even for narrow screens. Is there a more elegant solution?

I had to create span from javascript, because I didn't know, how else to control the display css attribute from both css (depending on screen size) and javascript (depending on the game type). Javascript overrides the css attribute even for narrow screens. Is there a more elegant solution?
Outdated
Review

It could be solved with a hidden element, for example with class hidden which can be removed by JavaScript when it should be shown (it still can have class hideOnNarrowScreen). But I think it is also a good solution.

It could be solved with a hidden element, for example with class `hidden` which can be removed by JavaScript when it should be shown (it still can have class `hideOnNarrowScreen`). But I think it is also a good solution.
} }
Game.scoreSum += round.result.score; Game.scoreSum += round.result.score;
if(round.allResults !== undefined) {
if (round.allResults !== undefined) {
for (var j = 0; j < round.allResults.length; ++j) { for (var j = 0; j < round.allResults.length; ++j) {
var result = round.allResults[j]; var result = round.allResults[j];
if (result.guessPosition) { if (result.guessPosition) {
@ -514,7 +514,11 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
break; break;
case 'game_not_found': case 'game_not_found':
MapGuesser.showModalWithContent('Error', 'The game room was not found by this ID. Please check the link.'); MapGuesser.showModalWithContent('Error', 'The game was not found by this ID. Please check the link.');
break;
case 'anonymous_user':
MapGuesser.showModalWithContent('Error', 'You have to login to join a challenge!');
break; break;
default: default:
@ -580,7 +584,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
}, },
showResultMap: function (result, resultBounds) { showResultMap: function (result, resultBounds) {
Game.transitToResultMap(); Game.transitToResultMap();
Game.map.fitBounds(resultBounds); Game.map.fitBounds(resultBounds);
@ -637,48 +641,6 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
Game.pov = this.response.place.pov; Game.pov = this.response.place.pov;
} }
// if(this.response.history) {
// // game finished
// // delete everything but the last round
// for (var i = 0; i < Game.rounds.length -1; ++i) {
// var round = Game.rounds[i];
// if (round.realMarker) {
// round.realMarker.setMap(null);
// }
// for (var j = 0; j < round.guessMarkers.length; ++j) {
// var guessMarker = round.guessMarkers[j];
// guessMarker.marker.setMap(null);
// guessMarker.line.setMap(null);
// if (guessMarker.info) {
// guessMarker.info.close();
// }
// }
// }
// // Game.rounds = [];
// for (var i = 0; i < this.response.history.length; ++i) {
// var round = this.response.history[i];
// Game.rounds[i] = { position: round.position, guessPosition: round.result.guessPosition, realMarker: null, guessMarkers: [] };
// Game.addPositionToResultMap(true);
// if (round.result.guessPosition) {
// Game.addGuessPositionToResultMap(round.result.guessPosition, null, true);
// }
// Game.scoreSum += round.result.score;
// for (var j = 0; j < round.allResults.length; ++j) {
// var result = round.allResults[j];
// if (result.guessPosition) {
// Game.addGuessPositionToResultMap(result.guessPosition, result, true);
// }
// }
// }
// }
}, data); }, data);
}, },
@ -995,9 +957,9 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
document.getElementById("compass").style.transform = "translateY(-50%) rotate(" + heading + "deg)"; document.getElementById("compass").style.transform = "translateY(-50%) rotate(" + heading + "deg)";
}); });
if(roomId !== null) { if (roomId !== null) {
Game.type = GameType.MULTI; Game.type = GameType.MULTI;
} else if(challengeToken !== null) { } else if (challengeToken !== null) {
Game.type = GameType.CHALLENGE; Game.type = GameType.CHALLENGE;
} }

View File

@ -97,7 +97,7 @@ class GameController
} }
public function getChallenge(): IContent public function getChallenge(): IContent
{ {
$challengeToken = $this->request->query('challengeToken'); $challengeToken = $this->request->query('challengeToken');
return new HtmlContent('game', ['challengeToken' => $challengeToken]); return new HtmlContent('game', ['challengeToken' => $challengeToken]);
@ -239,8 +239,19 @@ class GameController
$challengeToken_str = $this->request->query('challengeToken'); $challengeToken_str = $this->request->query('challengeToken');
$session = $this->request->session(); $session = $this->request->session();
$userId = $session->get('userId'); $userId = $session->get('userId');
if (!isset($userId))
{
return new JsonContent(['error' => 'anonymous_user']);
}
$challenge = $this->challengeRepository->getByTokenStr($challengeToken_str); $challenge = $this->challengeRepository->getByTokenStr($challengeToken_str);
if (!isset($challenge))
{
return new JsonContent(['error' => 'game_not_found']);
}
if(!$this->userInChallengeRepository->isUserParticipatingInChallenge($userId, $challenge)) { if(!$this->userInChallengeRepository->isUserParticipatingInChallenge($userId, $challenge)) {
// new player is joining // new player is joining
$userInChallenge = new UserInChallenge(); $userInChallenge = new UserInChallenge();