mirror of https://github.com/espruino/BangleApps
168 lines
3.8 KiB
JavaScript
168 lines
3.8 KiB
JavaScript
|
var counter;
|
||
|
var counterInterval;
|
||
|
|
||
|
var settings;
|
||
|
|
||
|
var work=false; //true if training false if resting
|
||
|
var prep=true; //true if we are in prep phase (at the beginning of the session
|
||
|
var setNum;
|
||
|
|
||
|
var paused;
|
||
|
|
||
|
function endPart() {
|
||
|
g.clear();
|
||
|
if (prep){
|
||
|
prep=false;
|
||
|
work = true;
|
||
|
counter = settings.workseg+settings.workmin*60;
|
||
|
startCounter();
|
||
|
}else if (work){
|
||
|
work = false;
|
||
|
counter = settings.restseg+settings.restmin*60;
|
||
|
startCounter();
|
||
|
}
|
||
|
else{
|
||
|
if (setNum>1)
|
||
|
{
|
||
|
setNum--;
|
||
|
work = true;
|
||
|
counter = settings.workseg+settings.workmin*60;
|
||
|
startCounter();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//End session
|
||
|
setWatch(showMenu, BTN2);
|
||
|
E.showMessage("Press BTN2 for\ngoing back\nto the menu","Well done!");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function printCounter(counter){
|
||
|
g.setFontAlign(0,0); // center font
|
||
|
g.setFont("Vector",80); // vector font, 80px
|
||
|
// draw the current counter value
|
||
|
let minutes = Math.floor(counter/60);
|
||
|
let segs = counter % 60;
|
||
|
let textMinutes = minutes.toString().padStart(2, "0");
|
||
|
let textSegs = segs.toString().padStart(2,"0");
|
||
|
g.clearRect(0,80,239,160);
|
||
|
g.setFont("Vector",30);
|
||
|
if (prep)
|
||
|
g.setColor(125,125,0);
|
||
|
else if (work)
|
||
|
g.setColor(255,0,0);
|
||
|
else
|
||
|
g.setColor(0,255,0);
|
||
|
g.drawString(setNum,120,50);
|
||
|
if (prep)
|
||
|
g.drawString("PREPARATION",120,190);
|
||
|
else if (work)
|
||
|
g.drawString("WORK",120,190);
|
||
|
else
|
||
|
g.drawString("REST",120,190);
|
||
|
g.setFont("Vector",10);
|
||
|
g.drawString("Touch to pause",120,215);
|
||
|
g.setFont("Vector",80);
|
||
|
g.drawString(textMinutes+":"+textSegs,120,120);
|
||
|
}
|
||
|
|
||
|
function signal_to_user(le){
|
||
|
if (settings.buzz)
|
||
|
Bangle.buzz(le);
|
||
|
else
|
||
|
Bangle.beep(le,4000);
|
||
|
}
|
||
|
|
||
|
function countDown() {
|
||
|
counter--;
|
||
|
if (counter<4 && counter>0)
|
||
|
signal_to_user(200);
|
||
|
if (counter==0)
|
||
|
signal_to_user(600);
|
||
|
|
||
|
if (counter<0) {
|
||
|
clearInterval(counterInterval);
|
||
|
counterInterval = undefined;
|
||
|
endPart();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
printCounter(counter);
|
||
|
}
|
||
|
g.flip();
|
||
|
}
|
||
|
|
||
|
function startCounter(){
|
||
|
if (!counterInterval)
|
||
|
counterInterval = setInterval(countDown, 1000);
|
||
|
}
|
||
|
|
||
|
function pause()
|
||
|
{
|
||
|
if (!paused)
|
||
|
{
|
||
|
clearInterval(counterInterval);
|
||
|
counterInterval = undefined;
|
||
|
setWatch(resume,BTN4);
|
||
|
setWatch(resume,BTN5);
|
||
|
paused=true;
|
||
|
g.clear();
|
||
|
g.setFont("Vector",60);
|
||
|
g.drawString("PAUSED",120,120);
|
||
|
g.setFont("Vector",20);
|
||
|
g.drawString("Touch to continue",120,180);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function resume(){
|
||
|
if (paused)
|
||
|
{
|
||
|
g.clear();
|
||
|
counterInterval = setInterval(countDown, 1000);
|
||
|
setWatch(pause,BTN4);
|
||
|
setWatch(pause,BTN5);
|
||
|
paused=false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function startSession() {
|
||
|
E.showMenu();
|
||
|
paused=false;
|
||
|
setWatch(pause,BTN4);
|
||
|
setWatch(pause,BTN5);
|
||
|
require('Storage').write('intervals.settings.json',settings);
|
||
|
setNum = settings.sets;
|
||
|
counter = 5;//prep time
|
||
|
prep=true;
|
||
|
work=false;
|
||
|
startCounter();
|
||
|
}
|
||
|
|
||
|
function showMenu()
|
||
|
{
|
||
|
settings = require('Storage').readJSON('intervals.settings.json',1)||
|
||
|
{ sets:1,workseg:10,workmin:0,restseg:5,restmin:0,buzz:true};
|
||
|
|
||
|
var mainmenu = {
|
||
|
"" : { "title" : "-- Main Menu --" },
|
||
|
"START" : function() { startSession(); },
|
||
|
"Sets" : { value : settings.sets,min:0,max:20,step:1,onchange : v => { settings.sets=v; } },
|
||
|
"Work minutes" : { value : settings.workmin,min:0,max:59,step:1,onchange : v => { settings.workmin=v; } },
|
||
|
"Work seconds" : { value : settings.workseg,min:0,max:59,step:5,onchange : v => { settings.workseg=v; } },
|
||
|
"Rest minutes" : { value : settings.restmin,min:0,max:59,step:1,onchange : v => { settings.restmin=v; } },
|
||
|
"Rest seconds" : { value : settings.restseg,min:0,max:59,step:5,onchange : v => { settings.restseg=v; } },
|
||
|
"Signal type" : { value : settings.buzz,format : v => v?"Buzz":"Beep",onchange : v => { settings.buzz=v; }}
|
||
|
};
|
||
|
|
||
|
E.showMenu(mainmenu);
|
||
|
}
|
||
|
|
||
|
showMenu();
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|