Version 1

Refactoring menus and debounce
master
Andy Smy 2025-04-20 11:04:54 +01:00 committed by GitHub
parent ea56481904
commit ab53f0eb10
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 43 additions and 41 deletions

View File

@ -1,10 +1,9 @@
var processing = true; //debounce to inhibit twist events
var wickets = 0
var counter = 0;
var over = 0;
var ballTimes = [];
var overTimes = [];
var gameState = "Ready...";
var countdownDebounce = false;
function addLog(timeSig, over, ball, matchEvent, metaData) {
// The fields we want to put in out CSV file
@ -26,8 +25,7 @@ function formatTimeOfDay(timeSig) { return timeSig.getHours() + ":" + timeSig.ge
function countDown(dir) {
if(countdownDebounce!=true) {
countdownDebounce = true;
processing = true;
counter += dir;
if(counter<0) counter=0;
@ -65,16 +63,13 @@ function countDown(dir) {
// Over
if (counter>=6) {
//Bangle.on('twist', function() { });
overTimes.push(timeSig.getTime());
var firstOverTime = overTimes[0];
var matchDuration = new Date(timeSig.getTime() - firstOverTime);
var matchMinutesString = formatDuration(matchDuration);
var firstBallTime = ballTimes[0];
var overDuration = new Date(timeSig.getTime() - firstBallTime);
var overMinutesString = formatDuration(overDuration) + "";
addLog(timeSig, over, counter, "Over Duration", overMinutesString);
@ -82,8 +77,6 @@ function countDown(dir) {
//console.log(overTimes);
//E.showMessage(overMinutesString + "\n" + matchMinutesString, "END OF OVER");
g.clear(1); // clear screen and reset graphics state
g.setFontAlign(0,0); // center font
g.setFont("Vector",48);
@ -108,7 +101,7 @@ function countDown(dir) {
startOver();
}
});
countdownDebounce = false;
processing = false;
return;
}
}
@ -124,47 +117,53 @@ function countDown(dir) {
g.setFont("Vector",18);
g.drawString("..." + formatDuration(deadDuration), g.getWidth()/1.89, 166);
}
countdownDebounce = false;
}
processing = false;
}
function startOver(resume) {
processing = true;
Bangle.setUI({
mode : "custom",
swipe : (directionLR, directionUD)=>{
if (!directionUD) {
processing = true;
Bangle.setUI();
countdownDebounce = true;
scrollMenu = E.showScroller(scroller);
menu = showMainMenu();
} else {
processing = true;
countDown(-directionUD);
}
},
btn : ()=>{
processing = true;
countDown(1);
}
});
var timeSig = new Date();
if(resume!=true) {
if(over==0) {
if(over==0) { // set an inital time for camparison
overTimes.push(timeSig.getTime());
// set up twist refresh once only
Bangle.on('twist', function() {
console.log("twist");
countDown(0);
if(!processing) {
processing = true;
console.log("Twist");
countDown(0);
}
});
}
// start new over
over += 1;
counter = 0;
counter = 0;
ballTimes = [];
addLog(timeSig, over, counter, "New Over", "");
addLog(timeSig, over, counter, "New Over", "");
}
// whether resuming or new over, refresh UI
countDown(0);
}
function resumeGame() {
Bangle.buzz();
countdownDebounce = false;
if(over==0) {
startOver();
} else {
@ -173,6 +172,7 @@ function resumeGame() {
}
function incrementWickets(inc) {
processing = true;
E.showPrompt("Amend wickets by " + inc + "?").then(function(confirmed) {
if (confirmed) {
E.showPrompt();
@ -184,24 +184,13 @@ function incrementWickets(inc) {
} else {
E.showPrompt();
Bangle.buzz();
console.log("Load scroller");
scrollMenu = E.showScroller(scroller);
menu = showMainMenu();
}
});
}
// Create the file in append mode
var file = require("Storage").open("matchlog.csv","a");
var timeSig = new Date();
addLog(timeSig, "103", "a", "App Started", timeSig);
countdownDebounce = true;
var scrollMenuItems = [
"Toss", "Play", "Wicket", "Revoke"
];
function performToss() {
function showTossMenu() {
processing = true;
var tossMenuItems = [
"Home Won=>Bat",
"Home Won=>Bowl",
@ -209,7 +198,7 @@ function performToss() {
"Away Won=>Bowl",
"Cancel"
];
scrollMenu = E.showScroller({
return E.showScroller({
h : 40, c : tossMenuItems.length,
draw : (idx, r) => {
g.setBgColor((idx&1)?"#000":"#112").clearRect(r.x,r.y,r.x+r.w-1,r.y+r.h-1);
@ -218,17 +207,23 @@ function performToss() {
select : (idx) => {
console.log(tossMenuItems[idx]);
if(tossMenuItems[idx]=="Cancel") {
scrollMenu = E.showScroller(scroller);
menu = showMainMenu();
} else {
Bangle.buzz();
var timeSig = new Date();
addLog(timeSig, "-", "-", "Toss", tossMenuItems[idx]);
scrollMenu = E.showScroller(scroller);
menu = showMainMenu();
};
}
});
}
var scroller = {
function showMainMenu() {
processing = true;
var scrollMenuItems = [
"Play", "Wicket", "Revoke", "Toss"
];
return E.showScroller({
h : 60, c : scrollMenuItems.length,
draw : (idx, r) => {
g.setBgColor((idx&1)?"#000":"#121").clearRect(r.x,r.y,r.x+r.w-1,r.y+r.h-1);
@ -236,11 +231,18 @@ var scroller = {
},
select : (idx) => {
console.log(scrollMenuItems[idx]);
if(scrollMenuItems[idx]=="Toss") performToss();
if(scrollMenuItems[idx]=="Toss") menu = showTossMenu();;
if(scrollMenuItems[idx]=="Play") resumeGame();
if(scrollMenuItems[idx]=="Wicket") incrementWickets(1);
if(scrollMenuItems[idx]=="Revoke") incrementWickets(-1);
}
});
}
var scrollMenu = E.showScroller(scroller);
// Start the app
var file = require("Storage").open("matchlog.csv","a");
var timeSig = new Date();
addLog(timeSig, "103", "a", "App Started", timeSig);
var menu = showMainMenu();