forked from FOSS/BangleApps
score: fix code style (indent by 2 spaces)
parent
1983c37a81
commit
506918e772
|
@ -21,93 +21,93 @@ let w = g.getWidth();
|
||||||
let h = g.getHeight();
|
let h = g.getHeight();
|
||||||
|
|
||||||
function setupInputWatchers() {
|
function setupInputWatchers() {
|
||||||
if (global.BTN4) {
|
if (global.BTN4) {
|
||||||
setWatch(() => handleInput(2), BTN2, { repeat: true });
|
setWatch(() => handleInput(2), BTN2, { repeat: true });
|
||||||
setWatch(() => handleInput(3), BTN1, { repeat: true });
|
setWatch(() => handleInput(3), BTN1, { repeat: true });
|
||||||
setWatch(() => handleInput(4), BTN3, { repeat: true });
|
setWatch(() => handleInput(4), BTN3, { repeat: true });
|
||||||
|
} else {
|
||||||
|
setWatch(() => handleInput(2), BTN, { repeat: true });
|
||||||
|
}
|
||||||
|
Bangle.on('touch', (b, e) => {
|
||||||
|
if (b) {
|
||||||
|
if (b === 1) {
|
||||||
|
handleInput(0);
|
||||||
|
} else {
|
||||||
|
handleInput(1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setWatch(() => handleInput(2), BTN, { repeat: true });
|
if (e.x < w/2) {
|
||||||
|
handleInput(0);
|
||||||
|
} else {
|
||||||
|
handleInput(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Bangle.on('touch', (b, e) => {
|
});
|
||||||
if (b) {
|
|
||||||
if (b === 1) {
|
|
||||||
handleInput(0);
|
|
||||||
} else {
|
|
||||||
handleInput(1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (e.x < w/2) {
|
|
||||||
handleInput(0);
|
|
||||||
} else {
|
|
||||||
handleInput(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function setupMatch() {
|
function setupMatch() {
|
||||||
scores = [];
|
scores = [];
|
||||||
for (let s = 0; s < sets(); s++) {
|
for (let s = 0; s < sets(); s++) {
|
||||||
scores.push([0,0,null,0,0]);
|
|
||||||
}
|
|
||||||
scores.push([0,0,null,0,0]);
|
scores.push([0,0,null,0,0]);
|
||||||
|
}
|
||||||
|
scores.push([0,0,null,0,0]);
|
||||||
|
|
||||||
if (settings.enableTennisScoring) {
|
if (settings.enableTennisScoring) {
|
||||||
tScores = [0,0];
|
tScores = [0,0];
|
||||||
} else {
|
} else {
|
||||||
tScores = null;
|
tScores = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
scores[0][2] = getTime();
|
scores[0][2] = getTime();
|
||||||
|
|
||||||
cSet = 0;
|
cSet = 0;
|
||||||
firstShownSet = 0 - Math.floor(setsPerPage() / 2);
|
firstShownSet = 0 - Math.floor(setsPerPage() / 2);
|
||||||
|
|
||||||
correctionMode = false;
|
correctionMode = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function showSettingsMenu() {
|
function showSettingsMenu() {
|
||||||
settingsMenuOpened = getTime();
|
settingsMenuOpened = getTime();
|
||||||
settingsMenu(function (s, reset) {
|
settingsMenu(function (s, reset) {
|
||||||
E.showMenu();
|
E.showMenu();
|
||||||
|
|
||||||
settings = s;
|
settings = s;
|
||||||
|
|
||||||
if (reset) {
|
if (reset) {
|
||||||
setupMatch();
|
setupMatch();
|
||||||
} else if (getTime() - settingsMenuOpened < 0.5 || correctionMode) {
|
} else if (getTime() - settingsMenuOpened < 0.5 || correctionMode) {
|
||||||
correctionMode = !correctionMode;
|
correctionMode = !correctionMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
settingsMenuOpened = null;
|
settingsMenuOpened = null;
|
||||||
|
|
||||||
draw();
|
draw();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function maxScore() {
|
function maxScore() {
|
||||||
return Math.max(settings.maxScore, settings.winScore);
|
return Math.max(settings.maxScore, settings.winScore);
|
||||||
}
|
}
|
||||||
|
|
||||||
function tiebreakMaxScore() {
|
function tiebreakMaxScore() {
|
||||||
return Math.max(settings.maxScoreTiebreakMaxScore, settings.maxScoreTiebreakWinScore);
|
return Math.max(settings.maxScoreTiebreakMaxScore, settings.maxScoreTiebreakWinScore);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setsPerPage() {
|
function setsPerPage() {
|
||||||
return Math.min(settings.setsPerPage, sets());
|
return Math.min(settings.setsPerPage, sets());
|
||||||
}
|
}
|
||||||
|
|
||||||
function sets() {
|
function sets() {
|
||||||
return settings.winSets * 2 - 1;
|
return settings.winSets * 2 - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
function currentSet() {
|
function currentSet() {
|
||||||
return matchEnded() ? cSet - 1 : cSet;
|
return matchEnded() ? cSet - 1 : cSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
function shouldTiebreak() {
|
function shouldTiebreak() {
|
||||||
return settings.enableMaxScoreTiebreak &&
|
return settings.enableMaxScoreTiebreak &&
|
||||||
scores[cSet][0] + scores[cSet][1] === (maxScore() - 1) * 2;
|
scores[cSet][0] + scores[cSet][1] === (maxScore() - 1) * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatNumber(num, length) {
|
function formatNumber(num, length) {
|
||||||
|
@ -115,285 +115,285 @@ function formatNumber(num, length) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatDuration(duration) {
|
function formatDuration(duration) {
|
||||||
let durS = Math.floor(duration);
|
let durS = Math.floor(duration);
|
||||||
let durM = Math.floor(durS / 60);
|
let durM = Math.floor(durS / 60);
|
||||||
let durH = Math.floor(durM / 60);
|
let durH = Math.floor(durM / 60);
|
||||||
durS = durS - durM * 60;
|
durS = durS - durM * 60;
|
||||||
durM = durM - durH * 60;
|
durM = durM - durH * 60;
|
||||||
|
|
||||||
durS = formatNumber(durS);
|
durS = formatNumber(durS);
|
||||||
durM = formatNumber(durM);
|
durM = formatNumber(durM);
|
||||||
durH = formatNumber(durH);
|
durH = formatNumber(durH);
|
||||||
|
|
||||||
let dur = null;
|
let dur = null;
|
||||||
if (durH > 0) {
|
if (durH > 0) {
|
||||||
dur = durH + ':' + durM;
|
dur = durH + ':' + durM;
|
||||||
} else {
|
} else {
|
||||||
dur = durM + ':' + durS;
|
dur = durM + ':' + durS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dur;
|
return dur;
|
||||||
}
|
}
|
||||||
|
|
||||||
function tiebreakWon(set, player) {
|
function tiebreakWon(set, player) {
|
||||||
let pScore = scores[set][3+player];
|
let pScore = scores[set][3+player];
|
||||||
let p2Score = scores[set][3+~~!player];
|
let p2Score = scores[set][3+~~!player];
|
||||||
|
|
||||||
let winScoreReached = pScore >= settings.maxScoreTiebreakWinScore;
|
let winScoreReached = pScore >= settings.maxScoreTiebreakWinScore;
|
||||||
let isTwoAhead = !settings.maxScoreTiebreakEnableTwoAhead || pScore - p2Score >= 2;
|
let isTwoAhead = !settings.maxScoreTiebreakEnableTwoAhead || pScore - p2Score >= 2;
|
||||||
let reachedMaxScore = settings.maxScoreTiebreakEnableMaxScore && pScore >= tiebreakMaxScore();
|
let reachedMaxScore = settings.maxScoreTiebreakEnableMaxScore && pScore >= tiebreakMaxScore();
|
||||||
|
|
||||||
return reachedMaxScore || (winScoreReached && isTwoAhead);
|
return reachedMaxScore || (winScoreReached && isTwoAhead);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setWon(set, player) {
|
function setWon(set, player) {
|
||||||
let pScore = scores[set][player];
|
let pScore = scores[set][player];
|
||||||
let p2Score = scores[set][~~!player];
|
let p2Score = scores[set][~~!player];
|
||||||
|
|
||||||
let winScoreReached = pScore >= settings.winScore;
|
let winScoreReached = pScore >= settings.winScore;
|
||||||
let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2;
|
let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2;
|
||||||
let tiebreakW = tiebreakWon(set, player);
|
let tiebreakW = tiebreakWon(set, player);
|
||||||
let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore();
|
let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
(settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) ||
|
(settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) ||
|
||||||
(winScoreReached && isTwoAhead)
|
(winScoreReached && isTwoAhead)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setEnded(set) {
|
function setEnded(set) {
|
||||||
return setWon(set, 0) || setWon(set, 1);
|
return setWon(set, 0) || setWon(set, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setsWon(player) {
|
function setsWon(player) {
|
||||||
return Array(sets()).fill(0).map((_, s) => ~~setWon(s, player)).reduce((a,v) => a+v, 0);
|
return Array(sets()).fill(0).map((_, s) => ~~setWon(s, player)).reduce((a,v) => a+v, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function matchWon(player) {
|
function matchWon(player) {
|
||||||
return setsWon(player) >= settings.winSets;
|
return setsWon(player) >= settings.winSets;
|
||||||
}
|
}
|
||||||
|
|
||||||
function matchEnded() {
|
function matchEnded() {
|
||||||
return matchWon(0) || matchWon(1);
|
return matchWon(0) || matchWon(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function matchScore(player) {
|
function matchScore(player) {
|
||||||
return scores.reduce((acc, val) => acc += val[player], 0);
|
return scores.reduce((acc, val) => acc += val[player], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function score(player) {
|
function score(player) {
|
||||||
let setFirstShownSet = function () {
|
let setFirstShownSet = function () {
|
||||||
firstShownSet = currentSet() - Math.floor(setsPerPage() / 2);
|
firstShownSet = currentSet() - Math.floor(setsPerPage() / 2);
|
||||||
};
|
};
|
||||||
let updateCurrentSet = function (val) {
|
let updateCurrentSet = function (val) {
|
||||||
cSet += val;
|
cSet += val;
|
||||||
setFirstShownSet();
|
setFirstShownSet();
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!matchEnded() || correctionMode) {
|
if (!matchEnded() || correctionMode) {
|
||||||
setFirstShownSet();
|
setFirstShownSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (correctionMode) {
|
||||||
|
if (
|
||||||
|
scores[cSet][0] === 0 && scores[cSet][1] === 0 &&
|
||||||
|
scores[cSet][3] === 0 && scores[cSet][4] === 0 &&
|
||||||
|
cSet > 0
|
||||||
|
) {
|
||||||
|
updateCurrentSet(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (correctionMode) {
|
if (scores[cSet][3] > 0 || scores[cSet][4] > 0) {
|
||||||
if (
|
if (scores[cSet][3+player] > 0) {
|
||||||
scores[cSet][0] === 0 && scores[cSet][1] === 0 &&
|
scores[cSet][3+player]--;
|
||||||
scores[cSet][3] === 0 && scores[cSet][4] === 0 &&
|
}
|
||||||
cSet > 0
|
} else if (scores[cSet][player] > 0) {
|
||||||
) {
|
if (tScores[player] === 0 && tScores[~~!player] === 0) {
|
||||||
updateCurrentSet(-1);
|
scores[cSet][player]--;
|
||||||
}
|
} else {
|
||||||
|
tScores[player] = 0;
|
||||||
|
tScores[~~!player] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (matchEnded()) return;
|
||||||
|
|
||||||
if (scores[cSet][3] > 0 || scores[cSet][4] > 0) {
|
if (shouldTiebreak()) {
|
||||||
if (scores[cSet][3+player] > 0) {
|
scores[cSet][3+player]++;
|
||||||
scores[cSet][3+player]--;
|
} else if (settings.enableTennisScoring) {
|
||||||
}
|
if (tScores[player] === 4 && tScores[~~!player] === 5) { // DC : AD
|
||||||
} else if (scores[cSet][player] > 0) {
|
tScores[~~!player]--;
|
||||||
if (tScores[player] === 0 && tScores[~~!player] === 0) {
|
} else if (tScores[player] === 2 && tScores[~~!player] === 3) { // 30 : 40
|
||||||
scores[cSet][player]--;
|
tScores[0] = 4;
|
||||||
} else {
|
tScores[1] = 4;
|
||||||
tScores[player] = 0;
|
} else if (tScores[player] === 3 || tScores[player] === 5) { // 40 / AD
|
||||||
tScores[~~!player] = 0;
|
tScores[0] = 0;
|
||||||
}
|
tScores[1] = 0;
|
||||||
}
|
scores[cSet][player]++;
|
||||||
|
} else {
|
||||||
|
tScores[player]++;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (matchEnded()) return;
|
scores[cSet][player]++;
|
||||||
|
|
||||||
if (shouldTiebreak()) {
|
|
||||||
scores[cSet][3+player]++;
|
|
||||||
} else if (settings.enableTennisScoring) {
|
|
||||||
if (tScores[player] === 4 && tScores[~~!player] === 5) { // DC : AD
|
|
||||||
tScores[~~!player]--;
|
|
||||||
} else if (tScores[player] === 2 && tScores[~~!player] === 3) { // 30 : 40
|
|
||||||
tScores[0] = 4;
|
|
||||||
tScores[1] = 4;
|
|
||||||
} else if (tScores[player] === 3 || tScores[player] === 5) { // 40 / AD
|
|
||||||
tScores[0] = 0;
|
|
||||||
tScores[1] = 0;
|
|
||||||
scores[cSet][player]++;
|
|
||||||
} else {
|
|
||||||
tScores[player]++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
scores[cSet][player]++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setEnded(cSet) && cSet < sets()) {
|
|
||||||
if (shouldTiebreak()) {
|
|
||||||
scores[cSet][player]++;
|
|
||||||
}
|
|
||||||
updateCurrentSet(1);
|
|
||||||
scores[cSet][2] = getTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (matchEnded()) {
|
|
||||||
firstShownSet = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (setEnded(cSet) && cSet < sets()) {
|
||||||
|
if (shouldTiebreak()) {
|
||||||
|
scores[cSet][player]++;
|
||||||
|
}
|
||||||
|
updateCurrentSet(1);
|
||||||
|
scores[cSet][2] = getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matchEnded()) {
|
||||||
|
firstShownSet = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleInput(button) {
|
function handleInput(button) {
|
||||||
if (settingsMenuOpened) {
|
if (settingsMenuOpened) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (button) {
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
score(button);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
showSettingsMenu();
|
||||||
return;
|
return;
|
||||||
}
|
case 3:
|
||||||
|
case 4:
|
||||||
|
let hLimit = currentSet();
|
||||||
|
let lLimit = 1 - setsPerPage();
|
||||||
|
let val = (button * 2 - 7);
|
||||||
|
firstShownSet += val;
|
||||||
|
if (firstShownSet > hLimit) firstShownSet = hLimit;
|
||||||
|
if (firstShownSet < lLimit) firstShownSet = lLimit;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch (button) {
|
draw();
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
score(button);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
showSettingsMenu();
|
|
||||||
return;
|
|
||||||
case 3:
|
|
||||||
case 4:
|
|
||||||
let hLimit = currentSet();
|
|
||||||
let lLimit = 1 - setsPerPage();
|
|
||||||
let val = (button * 2 - 7);
|
|
||||||
firstShownSet += val;
|
|
||||||
if (firstShownSet > hLimit) firstShownSet = hLimit;
|
|
||||||
if (firstShownSet < lLimit) firstShownSet = lLimit;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
draw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function draw() {
|
function draw() {
|
||||||
g.setFontAlign(0,0);
|
g.setFontAlign(0,0);
|
||||||
g.clear();
|
g.clear();
|
||||||
|
|
||||||
|
for (let p = 0; p < 2; p++) {
|
||||||
|
if (matchWon(p)) {
|
||||||
|
g.setFontAlign(0,0);
|
||||||
|
g.setFont('Teletext10x18Ascii',1);
|
||||||
|
g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15);
|
||||||
|
} else if (matchEnded()) {
|
||||||
|
g.setFontAlign(0,-1);
|
||||||
|
|
||||||
|
let dur1 = formatDuration(scores[cSet][2] - scores[0][2]);
|
||||||
|
g.setFont('5x9Numeric7Seg',1);
|
||||||
|
g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10);
|
||||||
|
|
||||||
|
g.setFont('Teletext5x9Ascii',1);
|
||||||
|
g.drawString((currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
g.setFontAlign(p === 0 ? -1 : 1,1);
|
||||||
|
g.setFont('7x11Numeric7Seg',2);
|
||||||
|
g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5);
|
||||||
|
|
||||||
|
if (!settings.enableTennisScoring) {
|
||||||
|
g.setFontAlign(p === 0 ? 1 : -1,1);
|
||||||
|
g.setFont('7x11Numeric7Seg',2);
|
||||||
|
g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g.setFontAlign(0,0);
|
||||||
|
|
||||||
|
if (correctionMode) {
|
||||||
|
g.setFont('Teletext10x18Ascii',1);
|
||||||
|
g.drawString("R", w/2, h-10);
|
||||||
|
}
|
||||||
|
|
||||||
|
let lastShownSet = Math.min(
|
||||||
|
sets(),
|
||||||
|
currentSet() + 1,
|
||||||
|
firstShownSet+setsPerPage()
|
||||||
|
);
|
||||||
|
let setsOnCurrentPage = Math.min(
|
||||||
|
sets(),
|
||||||
|
setsPerPage()
|
||||||
|
);
|
||||||
|
for (let set = firstShownSet; set < lastShownSet; set++) {
|
||||||
|
if (set < 0) continue;
|
||||||
|
|
||||||
|
let y = (h-15)/(setsOnCurrentPage+1)*(set-firstShownSet+1)+5;
|
||||||
|
|
||||||
|
g.setFontAlign(1,0);
|
||||||
|
g.setFont('7x11Numeric7Seg',1);
|
||||||
|
g.drawString(set+1, 40, y-10);
|
||||||
|
if (scores[set+1][2] != null) {
|
||||||
|
let dur2 = formatDuration(scores[set+1][2] - scores[set][2]);
|
||||||
|
g.drawString(dur2, 40, y+10);
|
||||||
|
}
|
||||||
|
|
||||||
for (let p = 0; p < 2; p++) {
|
for (let p = 0; p < 2; p++) {
|
||||||
if (matchWon(p)) {
|
if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) {
|
||||||
g.setFontAlign(0,0);
|
let bigNumX = p === 0 ? (w-20)/4+18 : (w-20)/4*3+4;
|
||||||
g.setFont('Teletext10x18Ascii',1);
|
let smallNumX = p === 0 ? w/2-2 : w/2+3;
|
||||||
g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15);
|
|
||||||
} else if (matchEnded()) {
|
|
||||||
g.setFontAlign(0,-1);
|
|
||||||
|
|
||||||
let dur1 = formatDuration(scores[cSet][2] - scores[0][2]);
|
|
||||||
g.setFont('5x9Numeric7Seg',1);
|
|
||||||
g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10);
|
|
||||||
|
|
||||||
g.setFont('Teletext5x9Ascii',1);
|
|
||||||
g.drawString((currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12);
|
|
||||||
|
|
||||||
|
if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) {
|
||||||
|
g.setFontAlign(0,0);
|
||||||
|
g.setFont('7x11Numeric7Seg',3);
|
||||||
|
g.drawString(
|
||||||
|
formatNumber(tennisScores[tScores[p]]),
|
||||||
|
bigNumX,
|
||||||
|
y
|
||||||
|
);
|
||||||
|
} else if (shouldTiebreak() && set === cSet) {
|
||||||
|
g.setFontAlign(0,0);
|
||||||
|
g.setFont('7x11Numeric7Seg',3);
|
||||||
|
g.drawString(
|
||||||
|
formatNumber(scores[set][3+p], 3),
|
||||||
|
bigNumX,
|
||||||
|
y
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
g.setFontAlign(0,0);
|
||||||
|
g.setFont('7x11Numeric7Seg',3);
|
||||||
|
g.drawString(
|
||||||
|
formatNumber(scores[set][p]),
|
||||||
|
bigNumX,
|
||||||
|
y
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
g.setFontAlign(p === 0 ? -1 : 1,1);
|
if ((shouldTiebreak() || settings.enableTennisScoring) && set === cSet) {
|
||||||
g.setFont('7x11Numeric7Seg',2);
|
g.setFontAlign(p === 0 ? 1 : -1,0);
|
||||||
g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5);
|
g.setFont('7x11Numeric7Seg',1);
|
||||||
|
g.drawString(
|
||||||
if (!settings.enableTennisScoring) {
|
formatNumber(scores[set][p]),
|
||||||
g.setFontAlign(p === 0 ? 1 : -1,1);
|
smallNumX,
|
||||||
g.setFont('7x11Numeric7Seg',2);
|
y
|
||||||
g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5);
|
);
|
||||||
|
} else if ((scores[set][3] !== 0 || scores[set][4] !== 0) && set !== cSet) {
|
||||||
|
g.setFontAlign(p === 0 ? 1 : -1,0);
|
||||||
|
g.setFont('7x11Numeric7Seg',1);
|
||||||
|
g.drawString(
|
||||||
|
formatNumber(scores[set][3+p], 3),
|
||||||
|
smallNumX,
|
||||||
|
y
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
g.setFontAlign(0,0);
|
}
|
||||||
|
|
||||||
if (correctionMode) {
|
// draw separator
|
||||||
g.setFont('Teletext10x18Ascii',1);
|
g.drawLine(w/2,20,w/2,h-25);
|
||||||
g.drawString("R", w/2, h-10);
|
|
||||||
}
|
|
||||||
|
|
||||||
let lastShownSet = Math.min(
|
g.flip();
|
||||||
sets(),
|
|
||||||
currentSet() + 1,
|
|
||||||
firstShownSet+setsPerPage()
|
|
||||||
);
|
|
||||||
let setsOnCurrentPage = Math.min(
|
|
||||||
sets(),
|
|
||||||
setsPerPage()
|
|
||||||
);
|
|
||||||
for (let set = firstShownSet; set < lastShownSet; set++) {
|
|
||||||
if (set < 0) continue;
|
|
||||||
|
|
||||||
let y = (h-15)/(setsOnCurrentPage+1)*(set-firstShownSet+1)+5;
|
|
||||||
|
|
||||||
g.setFontAlign(1,0);
|
|
||||||
g.setFont('7x11Numeric7Seg',1);
|
|
||||||
g.drawString(set+1, 40, y-10);
|
|
||||||
if (scores[set+1][2] != null) {
|
|
||||||
let dur2 = formatDuration(scores[set+1][2] - scores[set][2]);
|
|
||||||
g.drawString(dur2, 40, y+10);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let p = 0; p < 2; p++) {
|
|
||||||
if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) {
|
|
||||||
let bigNumX = p === 0 ? (w-20)/4+18 : (w-20)/4*3+4;
|
|
||||||
let smallNumX = p === 0 ? w/2-2 : w/2+3;
|
|
||||||
|
|
||||||
if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) {
|
|
||||||
g.setFontAlign(0,0);
|
|
||||||
g.setFont('7x11Numeric7Seg',3);
|
|
||||||
g.drawString(
|
|
||||||
formatNumber(tennisScores[tScores[p]]),
|
|
||||||
bigNumX,
|
|
||||||
y
|
|
||||||
);
|
|
||||||
} else if (shouldTiebreak() && set === cSet) {
|
|
||||||
g.setFontAlign(0,0);
|
|
||||||
g.setFont('7x11Numeric7Seg',3);
|
|
||||||
g.drawString(
|
|
||||||
formatNumber(scores[set][3+p], 3),
|
|
||||||
bigNumX,
|
|
||||||
y
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
g.setFontAlign(0,0);
|
|
||||||
g.setFont('7x11Numeric7Seg',3);
|
|
||||||
g.drawString(
|
|
||||||
formatNumber(scores[set][p]),
|
|
||||||
bigNumX,
|
|
||||||
y
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((shouldTiebreak() || settings.enableTennisScoring) && set === cSet) {
|
|
||||||
g.setFontAlign(p === 0 ? 1 : -1,0);
|
|
||||||
g.setFont('7x11Numeric7Seg',1);
|
|
||||||
g.drawString(
|
|
||||||
formatNumber(scores[set][p]),
|
|
||||||
smallNumX,
|
|
||||||
y
|
|
||||||
);
|
|
||||||
} else if ((scores[set][3] !== 0 || scores[set][4] !== 0) && set !== cSet) {
|
|
||||||
g.setFontAlign(p === 0 ? 1 : -1,0);
|
|
||||||
g.setFont('7x11Numeric7Seg',1);
|
|
||||||
g.drawString(
|
|
||||||
formatNumber(scores[set][3+p], 3),
|
|
||||||
smallNumX,
|
|
||||||
y
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw separator
|
|
||||||
g.drawLine(w/2,20,w/2,h-25);
|
|
||||||
|
|
||||||
g.flip();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setupInputWatchers();
|
setupInputWatchers();
|
||||||
|
|
|
@ -1,128 +1,128 @@
|
||||||
(function (back, ret) {
|
(function (back, ret) {
|
||||||
|
|
||||||
const fileName = 'score.json'
|
const fileName = 'score.json'
|
||||||
let settings = require('Storage').readJSON(fileName, 1) || {};
|
let settings = require('Storage').readJSON(fileName, 1) || {};
|
||||||
const offon = ['No', 'Yes'];
|
const offon = ['No', 'Yes'];
|
||||||
|
|
||||||
let changed = false;
|
let changed = false;
|
||||||
|
|
||||||
function save(key, value) {
|
function save(key, value) {
|
||||||
changed = true;
|
changed = true;
|
||||||
settings[key] = value;
|
settings[key] = value;
|
||||||
if (key === 'winScore' && settings.maxScore < value) {
|
if (key === 'winScore' && settings.maxScore < value) {
|
||||||
settings.maxScore = value;
|
settings.maxScore = value;
|
||||||
}
|
|
||||||
require('Storage').writeJSON(fileName, settings);
|
|
||||||
}
|
}
|
||||||
|
require('Storage').writeJSON(fileName, settings);
|
||||||
|
}
|
||||||
|
|
||||||
if (settings.winSets == null) {
|
if (settings.winSets == null) {
|
||||||
settings.winSets = 1;
|
settings.winSets = 1;
|
||||||
}
|
}
|
||||||
if (settings.setsPerPage == null) {
|
if (settings.setsPerPage == null) {
|
||||||
settings.setsPerPage = 5;
|
settings.setsPerPage = 5;
|
||||||
}
|
}
|
||||||
if (settings.winScore == null) {
|
if (settings.winScore == null) {
|
||||||
settings.winScore = 21;
|
settings.winScore = 21;
|
||||||
}
|
}
|
||||||
if (settings.enableTwoAhead == null) {
|
if (settings.enableTwoAhead == null) {
|
||||||
settings.enableTwoAhead = true;
|
settings.enableTwoAhead = true;
|
||||||
}
|
}
|
||||||
if (settings.enableMaxScore == null) {
|
if (settings.enableMaxScore == null) {
|
||||||
settings.enableMaxScore = true;
|
settings.enableMaxScore = true;
|
||||||
}
|
}
|
||||||
if (settings.maxScore == null) {
|
if (settings.maxScore == null) {
|
||||||
settings.maxScore = 30;
|
settings.maxScore = 30;
|
||||||
}
|
}
|
||||||
if (settings.enableTennisScoring == null) {
|
if (settings.enableTennisScoring == null) {
|
||||||
settings.enableTennisScoring = false;
|
settings.enableTennisScoring = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.enableMaxScoreTiebreak == null) {
|
if (settings.enableMaxScoreTiebreak == null) {
|
||||||
settings.enableMaxScoreTiebreak = false;
|
settings.enableMaxScoreTiebreak = false;
|
||||||
}
|
}
|
||||||
if (settings.maxScoreTiebreakWinScore == null) {
|
if (settings.maxScoreTiebreakWinScore == null) {
|
||||||
settings.maxScoreTiebreakWinScore = 6;
|
settings.maxScoreTiebreakWinScore = 6;
|
||||||
}
|
}
|
||||||
if (settings.maxScoreTiebreakEnableTwoAhead == null) {
|
if (settings.maxScoreTiebreakEnableTwoAhead == null) {
|
||||||
settings.maxScoreTiebreakEnableTwoAhead = true;
|
settings.maxScoreTiebreakEnableTwoAhead = true;
|
||||||
}
|
}
|
||||||
if (settings.maxScoreTiebreakEnableMaxScore == null) {
|
if (settings.maxScoreTiebreakEnableMaxScore == null) {
|
||||||
settings.maxScoreTiebreakEnableMaxScore = false;
|
settings.maxScoreTiebreakEnableMaxScore = false;
|
||||||
}
|
}
|
||||||
if (settings.maxScoreTiebreakMaxScore == null) {
|
if (settings.maxScoreTiebreakMaxScore == null) {
|
||||||
settings.maxScoreTiebreakMaxScore = 15;
|
settings.maxScoreTiebreakMaxScore = 15;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
const appMenu = {};
|
const appMenu = {};
|
||||||
appMenu[''] = {'title': 'Score Settings'},
|
appMenu[''] = {'title': 'Score Settings'},
|
||||||
appMenu['< Back'] = function () { back(settings, changed); };
|
appMenu['< Back'] = function () { back(settings, changed); };
|
||||||
if (reset) {
|
if (reset) {
|
||||||
appMenu['Reset match'] = function () { back(settings, true); };
|
appMenu['Reset match'] = function () { back(settings, true); };
|
||||||
}
|
}
|
||||||
appMenu['Sets to win'] = {
|
appMenu['Sets to win'] = {
|
||||||
value: settings.winSets,
|
value: settings.winSets,
|
||||||
min:1,
|
min:1,
|
||||||
onchange: m => save('winSets', m)
|
onchange: m => save('winSets', m)
|
||||||
};
|
};
|
||||||
appMenu['Sets per page'] = {
|
appMenu['Sets per page'] = {
|
||||||
value: settings.setsPerPage,
|
value: settings.setsPerPage,
|
||||||
min:1,
|
min:1,
|
||||||
max:5,
|
max:5,
|
||||||
onchange: m => save('setsPerPage', m)
|
onchange: m => save('setsPerPage', m)
|
||||||
};
|
};
|
||||||
appMenu['Score to win'] = {
|
appMenu['Score to win'] = {
|
||||||
value: settings.winScore,
|
value: settings.winScore,
|
||||||
min:1,
|
min:1,
|
||||||
onchange: m => save('winScore', m)
|
onchange: m => save('winScore', m)
|
||||||
};
|
};
|
||||||
appMenu['2-point lead'] = {
|
appMenu['2-point lead'] = {
|
||||||
value: settings.enableTwoAhead,
|
value: settings.enableTwoAhead,
|
||||||
format: m => offon[~~m],
|
format: m => offon[~~m],
|
||||||
onchange: m => save('enableTwoAhead', m)
|
onchange: m => save('enableTwoAhead', m)
|
||||||
};
|
};
|
||||||
appMenu['Maximum score?'] = {
|
appMenu['Maximum score?'] = {
|
||||||
value: settings.enableMaxScore,
|
value: settings.enableMaxScore,
|
||||||
format: m => offon[~~m],
|
format: m => offon[~~m],
|
||||||
onchange: m => save('enableMaxScore', m)
|
onchange: m => save('enableMaxScore', m)
|
||||||
};
|
};
|
||||||
appMenu['Maximum score'] = {
|
appMenu['Maximum score'] = {
|
||||||
value: settings.maxScore,
|
value: settings.maxScore,
|
||||||
min: 1,
|
min: 1,
|
||||||
onchange: m => save('maxScore', m)
|
onchange: m => save('maxScore', m)
|
||||||
};
|
};
|
||||||
appMenu['Tennis scoring'] = {
|
appMenu['Tennis scoring'] = {
|
||||||
value: settings.enableTennisScoring,
|
value: settings.enableTennisScoring,
|
||||||
format: m => offon[~~m],
|
format: m => offon[~~m],
|
||||||
onchange: m => save('enableTennisScoring', m)
|
onchange: m => save('enableTennisScoring', m)
|
||||||
};
|
};
|
||||||
appMenu['TB sets?'] = {
|
appMenu['TB sets?'] = {
|
||||||
value: settings.enableMaxScoreTiebreak,
|
value: settings.enableMaxScoreTiebreak,
|
||||||
format: m => offon[~~m],
|
format: m => offon[~~m],
|
||||||
onchange: m => save('enableMaxScoreTiebreak', m)
|
onchange: m => save('enableMaxScoreTiebreak', m)
|
||||||
}
|
}
|
||||||
appMenu['TB Score to win'] = {
|
appMenu['TB Score to win'] = {
|
||||||
value: settings.maxScoreTiebreakWinScore,
|
value: settings.maxScoreTiebreakWinScore,
|
||||||
onchange: m => save('maxScoreTiebreakWinScore', m)
|
onchange: m => save('maxScoreTiebreakWinScore', m)
|
||||||
}
|
}
|
||||||
appMenu['TB 2-point lead'] = {
|
appMenu['TB 2-point lead'] = {
|
||||||
value: settings.maxScoreTiebreakEnableTwoAhead,
|
value: settings.maxScoreTiebreakEnableTwoAhead,
|
||||||
format: m => offon[~~m],
|
format: m => offon[~~m],
|
||||||
onchange: m => save('maxScoreTiebreakEnableTwoAhead', m)
|
onchange: m => save('maxScoreTiebreakEnableTwoAhead', m)
|
||||||
}
|
}
|
||||||
appMenu['TB max score?'] = {
|
appMenu['TB max score?'] = {
|
||||||
value: settings.maxScoreTiebreakEnableMaxScore,
|
value: settings.maxScoreTiebreakEnableMaxScore,
|
||||||
format: m => offon[~~m],
|
format: m => offon[~~m],
|
||||||
onchange: m => save('maxScoreTiebreakEnableMaxScore', m)
|
onchange: m => save('maxScoreTiebreakEnableMaxScore', m)
|
||||||
}
|
}
|
||||||
appMenu['TB max score'] = {
|
appMenu['TB max score'] = {
|
||||||
value: settings.maxScoreTiebreakMaxScore,
|
value: settings.maxScoreTiebreakMaxScore,
|
||||||
onchange: m => save('maxScoreTiebreakMaxScore', m)
|
onchange: m => save('maxScoreTiebreakMaxScore', m)
|
||||||
}
|
}
|
||||||
|
|
||||||
E.showMenu(appMenu)
|
E.showMenu(appMenu)
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue