From 7074340f444c25100434ee3101a30424ba626fba Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 14:03:23 +0200 Subject: [PATCH] score: add additional in-app menu, allow ending current set --- apps/score/score.app.js | 50 ++++++++++++++++++++++++------------ apps/score/score.settings.js | 33 +++++++++++++++++------- 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 7f0b04a59..4b72f911c 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -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; } } } diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 83a98d93f..4a4b5e56a 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -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)); + } });