Compare commits

..

3 Commits

Author SHA1 Message Date
7d2588f7cd
Merge pull request 'feature/MAPG-219-disable-continue-if-timeout-is-not-reached' (#16) from feature/MAPG-219-disable-continue-if-timeout-is-not-reached into develop
All checks were successful
default-pipeline default-pipeline #88
Reviewed-on: https://gitea.e5tv.hu/esoko/mapguesser/pulls/16
2021-04-04 19:23:08 +02:00
be40acdb2d
MAPG-219 disable continue button until round is over
All checks were successful
default-pipeline default-pipeline #84
2021-04-04 18:48:31 +02:00
a2f2080959
MAPG-219 send 'end_round' when all members are finished
All checks were successful
default-pipeline default-pipeline #83
2021-04-04 17:43:37 +02:00
2 changed files with 60 additions and 32 deletions

View File

@ -97,28 +97,15 @@ class MultiGame {
room.updated = new Date(); room.updated = new Date();
var round = room.rounds[room.currentRound]; var round = room.rounds[room.currentRound];
clearTimeout(round.timeoutHandler);
round.timeout = round.timeout - (new Date() - round.timeoutStarted);
if (round.timeout > MultiGame.ROUND_TIMEOUT_DIVIDER * MultiGame.ROUND_TIMEOUT_MINIMUM) {
round.timeout = round.timeout / MultiGame.ROUND_TIMEOUT_DIVIDER;
} else if (round.timeout > MultiGame.ROUND_TIMEOUT_MINIMUM) {
round.timeout = MultiGame.ROUND_TIMEOUT_MINIMUM;
}
round.timeoutStarted = new Date();
var self = this;
round.timeoutHandler = setTimeout(function () {
self._endRoundTimeout(room, round);
}, round.timeout + MultiGame.ROUND_TIMEOUT_OFFSET);
var member = room.members.get(token); var member = room.members.get(token);
var allResults = this._collectResultsInRound(room, round); var allResults = this._collectResultsInRound(room, round);
this._broadcastTimeout(room, round);
this._broadcastGuess(room, member.userName, guessPosition, distance, score); this._broadcastGuess(room, member.userName, guessPosition, distance, score);
round.results.set(token, { guessPosition: guessPosition, distance: distance, score: score }); round.results.set(token, { guessPosition: guessPosition, distance: distance, score: score });
this._setNewTimeout(room, round);
return allResults; return allResults;
} }
@ -139,7 +126,7 @@ class MultiGame {
round.timeoutStarted = new Date(); round.timeoutStarted = new Date();
var self = this; var self = this;
round.timeoutHandler = setTimeout(function () { round.timeoutHandler = setTimeout(function () {
self._endRoundTimeout(room, round); self._endRound(room, round);
}, round.timeout + MultiGame.ROUND_TIMEOUT_OFFSET); }, round.timeout + MultiGame.ROUND_TIMEOUT_OFFSET);
var data = {}; var data = {};
@ -152,16 +139,35 @@ class MultiGame {
}); });
} }
_endRoundTimeout(room, round) { _setNewTimeout(room, round) {
clearTimeout(round.timeoutHandler); clearTimeout(round.timeoutHandler);
var data = { position: round.place.position, allResults: this._collectResultsInRound(room, round) }; if (room.members.size === round.results.size) {
round.timeout = 0;
round.timeoutStarted = new Date();
this._endRound(room, round);
} else {
round.timeout = round.timeout - (new Date() - round.timeoutStarted);
if (round.timeout > MultiGame.ROUND_TIMEOUT_DIVIDER * MultiGame.ROUND_TIMEOUT_MINIMUM) {
round.timeout = round.timeout / MultiGame.ROUND_TIMEOUT_DIVIDER;
} else if (round.timeout > MultiGame.ROUND_TIMEOUT_MINIMUM) {
round.timeout = MultiGame.ROUND_TIMEOUT_MINIMUM;
}
round.timeoutStarted = new Date();
var self = this; var self = this;
room.members.forEach(function (member, token) { round.timeoutHandler = setTimeout(function () {
if (round.results.has(token)) { self._endRound(room, round);
return; }, round.timeout + MultiGame.ROUND_TIMEOUT_OFFSET);
this._broadcastTimeout(room, round);
}
} }
_endRound(room, round) {
var data = { position: round.place.position, allResults: this._collectResultsInRound(room, round) };
var self = this;
room.members.forEach(function (member) {
self._sendToMember(member, 'end_round', data); self._sendToMember(member, 'end_round', data);
}); });
} }

View File

@ -17,6 +17,7 @@
adaptGuess: false, adaptGuess: false,
googleLink: null, googleLink: null,
readyToContinue: false,
timeoutEnd: null, timeoutEnd: null,
countdownHandler: null, countdownHandler: null,
@ -121,6 +122,7 @@
} }
if (data.place) { if (data.place) {
Game.readyToContinue = false;
Game.panoId = data.place.panoId; Game.panoId = data.place.panoId;
Game.pov = data.place.pov; Game.pov = data.place.pov;
@ -156,6 +158,7 @@
Game.reset(); Game.reset();
} }
Game.readyToContinue = false;
Game.panoId = data.place.panoId; Game.panoId = data.place.panoId;
Game.pov = data.place.pov; Game.pov = data.place.pov;
@ -180,6 +183,18 @@
}, },
endRound: function (data) { endRound: function (data) {
Game.readyToContinue = true;
Game.startCountdown(0);
if (Game.rounds[Game.rounds.length - 1].guessPosition || Game.rounds[Game.rounds.length - 1].position) {
if (Game.multi.owner) {
document.getElementById('continueButton').disabled = false;
document.getElementById('startNewGameButton').disabled = false;
}
return;
}
// 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();
@ -189,10 +204,6 @@
document.getElementById('panoCover').style.visibility = 'visible'; document.getElementById('panoCover').style.visibility = 'visible';
Game.showResults(data.position, null, { distance: NaN, score: 0 }, data.allResults); Game.showResults(data.position, null, { distance: NaN, score: 0 }, data.allResults);
if (!Game.multi.owner) {
document.getElementById('continueButton').style.display = 'none';
}
} }
}, },
@ -463,6 +474,14 @@
if (Game.rounds.length === Game.NUMBER_OF_ROUNDS) { if (Game.rounds.length === Game.NUMBER_OF_ROUNDS) {
document.getElementById('continueButton').style.display = 'none'; document.getElementById('continueButton').style.display = 'none';
document.getElementById('showSummaryButton').style.display = 'block'; document.getElementById('showSummaryButton').style.display = 'block';
} else if (roomId) {
if (Game.multi.owner) {
if (!Game.readyToContinue) {
document.getElementById('continueButton').disabled = true;
}
} else {
document.getElementById('continueButton').style.display = 'none';
}
} }
}, },
@ -496,10 +515,6 @@
if (this.response.place) { if (this.response.place) {
Game.panoId = this.response.place.panoId; Game.panoId = this.response.place.panoId;
Game.pov = this.response.place.pov; Game.pov = this.response.place.pov;
} else {
if (!Game.multi.owner) {
document.getElementById('continueButton').style.display = 'none';
}
} }
}, data); }, data);
}, },
@ -625,6 +640,9 @@
if (!roomId || Game.multi.owner) { if (!roomId || Game.multi.owner) {
document.getElementById('startNewGameButton').style.display = 'block'; document.getElementById('startNewGameButton').style.display = 'block';
if (!Game.readyToContinue) {
document.getElementById('startNewGameButton').disabled = true;
}
} }
var resultBounds = new google.maps.LatLngBounds(); var resultBounds = new google.maps.LatLngBounds();
@ -694,6 +712,10 @@
clearInterval(Game.countdownHandler); clearInterval(Game.countdownHandler);
} }
if (timeout <= 0) {
return;
}
Game.timeoutEnd = new Date(new Date().getTime() + timeout); Game.timeoutEnd = new Date(new Date().getTime() + timeout);
Game.countdownElement = document.getElementById('countdown'); Game.countdownElement = document.getElementById('countdown');
Game.countdownTimeElement = document.getElementById('countdownTime'); Game.countdownTimeElement = document.getElementById('countdownTime');
@ -758,7 +780,7 @@
}); });
Game.map.addListener('click', function (e) { Game.map.addListener('click', function (e) {
if (Game.rounds[Game.rounds.length - 1].guessPosition) { if (Game.rounds[Game.rounds.length - 1].guessPosition || Game.rounds[Game.rounds.length - 1].position) {
return; return;
} }
@ -826,7 +848,7 @@
document.getElementById('continueButton').onclick = function () { document.getElementById('continueButton').onclick = function () {
if (roomId) { if (roomId) {
if (!Game.multi.owner) { if (!Game.multi.owner || !Game.readyToContinue) {
return; return;
} }