feature/MAPG-235-basic-challenge-mode #48
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
balazs marked this conversation as resolved
|
|||||||
|
|
||||||
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
balazs
commented
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?
bence
commented
It could be solved with a hidden element, for example with class 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user
This file should be refactored sometime because it is very spaghetti :D
I know, but I already put a lot of changes into this PR. I think we should refactor it in a separate story.
Yes, I meant later, it will be a bigger task.