score: add additional in-app menu, allow ending current set

pull/828/head
Mika Dede 2021-09-28 14:03:23 +02:00
parent ecc4e59a01
commit 7074340f44
No known key found for this signature in database
GPG Key ID: 546586DC38D45BBD
2 changed files with 58 additions and 25 deletions

View File

@ -4,7 +4,7 @@ require('FontTeletext5x9Ascii').add(Graphics);
require('FontTeletext10x18Ascii').add(Graphics);
let settingsMenu = eval(require('Storage').read('score.settings.js'));
let settings = settingsMenu(null, true);
let settings = settingsMenu(null, null, true);
let tennisScores = ['00','15','30','40','DC','AD'];
@ -61,7 +61,7 @@ function setupMatch() {
scores[0][2] = getTime();
cSet = 0;
firstShownSet = 0 - Math.floor(setsPerPage() / 2);
setFirstShownSet();
correctionMode = false;
}
@ -82,6 +82,12 @@ function showSettingsMenu() {
settingsMenuOpened = null;
draw();
}, function (msg) {
switch (msg) {
case 'end_set':
updateCurrentSet(1);
break;
}
});
}
@ -154,10 +160,12 @@ function setWon(set, player) {
let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2;
let tiebreakW = tiebreakWon(set, player);
let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore();
let manuallyEndedWon = cSet > set ? pScore > p2Score : false
return (
(settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) ||
(winScoreReached && isTwoAhead)
(winScoreReached && isTwoAhead) ||
manuallyEndedWon
);
}
@ -181,15 +189,30 @@ function matchScore(player) {
return scores.reduce((acc, val) => acc += val[player], 0);
}
function score(player) {
let setFirstShownSet = function () {
firstShownSet = currentSet() - Math.floor(setsPerPage() / 2);
};
let updateCurrentSet = function (val) {
cSet += val;
setFirstShownSet();
};
function setFirstShownSet() {
firstShownSet = Math.max(0, currentSet() - setsPerPage() + 1);
}
function updateCurrentSet(val) {
if (val > 0) {
cSet++
} else if (val < 0) {
cSet--
} else {
return;
}
setFirstShownSet();
if (matchEnded()) {
firstShownSet = 0;
}
if (val > 0) {
scores[cSet][2] = getTime();
}
}
function score(player) {
if (!matchEnded() || correctionMode) {
setFirstShownSet();
}
@ -242,11 +265,6 @@ function score(player) {
scores[cSet][player]++;
}
updateCurrentSet(1);
scores[cSet][2] = getTime();
}
if (matchEnded()) {
firstShownSet = 0;
}
}
}

View File

@ -40,7 +40,7 @@ function fillSettingsWithDefaults(settings) {
return settings;
}
(function (back, ret) {
(function (back, inApp, ret) {
const fileName = 'score.json';
let settings = require('Storage').readJSON(fileName, 1) || {};
@ -71,8 +71,8 @@ function fillSettingsWithDefaults(settings) {
return settings;
}
const presetMenu = function () {
let ret = function (changed) { E.showMenu(appMenu(changed ? 3 : null)); };
const presetMenu = function (appMenuBack) {
let ret = function (changed) { E.showMenu(appMenu(appMenuBack, changed ? 2 : null)); };
let m = {
'': {'title': 'Score Presets'},
'< Back': ret,
@ -91,7 +91,7 @@ function fillSettingsWithDefaults(settings) {
return m;
};
const appMenu = function (selected) {
const appMenu = function (back, selected) {
let m = {};
m[''] = {'title': 'Score Settings'};
@ -99,10 +99,7 @@ function fillSettingsWithDefaults(settings) {
m[''].selected = selected;
}
m['< Back'] = function () { back(settings, changed); };
if (reset) {
m['Reset match'] = function () { back(settings, true); };
}
m['Presets'] = function () { E.showMenu(presetMenu()); };
m['Presets'] = function () { E.showMenu(presetMenu(back)); };
m['Sets to win'] = {
value: settings.winSets,
min:1,
@ -166,6 +163,24 @@ function fillSettingsWithDefaults(settings) {
return m;
};
E.showMenu(appMenu());
const inAppMenu = function () {
let m = {
'': {'title': 'Score Menu'},
'< Back': function () { back(settings, changed); },
'Reset match': function () { back(settings, true); },
'End current set': function () { inApp('end_set'); back(settings, changed); },
'Configuration': function () { E.showMenu(appMenu(function () {
E.showMenu(inAppMenu());
})); },
};
return m;
};
if (inApp != null) {
E.showMenu(inAppMenu());
} else {
E.showMenu(appMenu(back));
}
});