2020-04-15 10:54:29 +00:00
|
|
|
var tTotal = Date.now();
|
2019-11-06 22:12:54 +00:00
|
|
|
var tStart = Date.now();
|
|
|
|
var tCurrent = Date.now();
|
|
|
|
var started = false;
|
2020-04-15 10:54:29 +00:00
|
|
|
var timeY = 45;
|
2019-11-06 22:12:54 +00:00
|
|
|
var hsXPos = 0;
|
2020-04-15 10:54:29 +00:00
|
|
|
var TtimeY = 75;
|
|
|
|
var ThsXPos = 0;
|
2019-11-06 22:12:54 +00:00
|
|
|
var lapTimes = [];
|
|
|
|
var displayInterval;
|
|
|
|
|
|
|
|
function timeToText(t) {
|
|
|
|
var secs = Math.floor(t/1000)%60;
|
|
|
|
var mins = Math.floor(t/60000);
|
|
|
|
var hs = Math.floor(t/10)%100;
|
|
|
|
return mins+":"+("0"+secs).substr(-2)+"."+("0"+hs).substr(-2);
|
|
|
|
}
|
2020-04-15 10:54:29 +00:00
|
|
|
|
2019-11-06 22:12:54 +00:00
|
|
|
function updateLabels() {
|
2020-04-03 14:24:09 +00:00
|
|
|
g.reset(1);
|
|
|
|
g.clearRect(0,23,g.getWidth()-1,g.getHeight()-24);
|
2019-11-06 22:12:54 +00:00
|
|
|
g.setFont("6x8",2);
|
|
|
|
g.setFontAlign(0,0,3);
|
|
|
|
g.drawString(started?"STOP":"GO",230,120);
|
2020-04-03 14:24:09 +00:00
|
|
|
if (!started) g.drawString("RESET",230,180);
|
2020-03-28 04:12:22 +00:00
|
|
|
g.drawString(started?"LAP":"SAVE",230,50);
|
2019-11-06 22:12:54 +00:00
|
|
|
g.setFont("6x8",1);
|
|
|
|
g.setFontAlign(-1,-1);
|
|
|
|
for (var i in lapTimes) {
|
2020-04-16 09:25:13 +00:00
|
|
|
if (i<15)
|
2020-04-15 10:54:29 +00:00
|
|
|
{g.drawString(lapTimes.length-i+": "+timeToText(lapTimes[i]),35,timeY + 40 + i*8);}
|
2020-04-16 09:25:13 +00:00
|
|
|
else if (i<30)
|
|
|
|
{g.drawString(lapTimes.length-i+": "+timeToText(lapTimes[i]),125,timeY + 40 + (i-15)*8);}
|
2019-11-06 22:12:54 +00:00
|
|
|
}
|
|
|
|
drawsecs();
|
|
|
|
}
|
2020-04-15 10:54:29 +00:00
|
|
|
|
2019-11-06 22:12:54 +00:00
|
|
|
function drawsecs() {
|
|
|
|
var t = tCurrent-tStart;
|
2020-04-15 10:54:29 +00:00
|
|
|
var Tt = tCurrent-tTotal;
|
2019-11-06 22:12:54 +00:00
|
|
|
var secs = Math.floor(t/1000)%60;
|
|
|
|
var mins = Math.floor(t/60000);
|
|
|
|
var txt = mins+":"+("0"+secs).substr(-2);
|
2020-04-15 10:54:29 +00:00
|
|
|
var Tsecs = Math.floor(Tt/1000)%60;
|
|
|
|
var Tmins = Math.floor(Tt/60000);
|
|
|
|
var Ttxt = Tmins+":"+("0"+Tsecs).substr(-2);
|
2019-11-06 22:12:54 +00:00
|
|
|
var x = 100;
|
2020-04-15 10:54:29 +00:00
|
|
|
var Tx = 125;
|
|
|
|
g.reset(1);
|
|
|
|
g.setFont("Vector",38);
|
|
|
|
g.setFontAlign(0,0);
|
|
|
|
g.clearRect(0,timeY-21,200,timeY+21);
|
|
|
|
g.drawString(Ttxt,x,timeY);
|
2019-11-06 22:12:54 +00:00
|
|
|
hsXPos = 5+x+g.stringWidth(txt)/2;
|
2020-04-15 10:54:29 +00:00
|
|
|
g.setFont("6x8",2);
|
|
|
|
g.clearRect(0,TtimeY-7,200,TtimeY+7);
|
|
|
|
g.drawString(txt,Tx,TtimeY);
|
|
|
|
ThsXPos = 5+Tx+g.stringWidth(Ttxt)/2;
|
2019-11-06 22:12:54 +00:00
|
|
|
drawms();
|
|
|
|
}
|
2020-04-15 10:54:29 +00:00
|
|
|
|
2019-11-06 22:12:54 +00:00
|
|
|
function drawms() {
|
|
|
|
var t = tCurrent-tStart;
|
|
|
|
var hs = Math.floor(t/10)%100;
|
2020-04-15 10:54:29 +00:00
|
|
|
var Tt = tCurrent-tTotal;
|
|
|
|
var Ths = Math.floor(Tt/10)%100;
|
2019-11-06 22:12:54 +00:00
|
|
|
g.setFontAlign(-1,0);
|
|
|
|
g.setFont("6x8",2);
|
|
|
|
g.clearRect(hsXPos,timeY,220,timeY+20);
|
2020-04-15 10:54:29 +00:00
|
|
|
g.drawString("."+("0"+Ths).substr(-2),hsXPos-5,timeY+14);
|
|
|
|
g.setFont("6x8",1);
|
|
|
|
g.clearRect(ThsXPos,TtimeY,220,TtimeY+5);
|
|
|
|
g.drawString("."+("0"+hs).substr(-2),ThsXPos-5,TtimeY+3);
|
2019-11-06 22:12:54 +00:00
|
|
|
}
|
2020-04-15 10:54:29 +00:00
|
|
|
|
2020-04-03 14:15:06 +00:00
|
|
|
function getLapTimesArray() {
|
2020-04-15 10:54:29 +00:00
|
|
|
lapTimes.push(tCurrent-tTotal);
|
2020-04-03 14:15:06 +00:00
|
|
|
return lapTimes.map(timeToText).reverse();
|
2020-03-28 03:07:14 +00:00
|
|
|
}
|
2019-11-06 22:12:54 +00:00
|
|
|
|
|
|
|
setWatch(function() { // Start/stop
|
|
|
|
started = !started;
|
2019-11-07 20:36:46 +00:00
|
|
|
Bangle.beep();
|
|
|
|
if (started)
|
2019-11-06 22:12:54 +00:00
|
|
|
tStart = Date.now()+tStart-tCurrent;
|
2020-05-23 21:32:33 +00:00
|
|
|
tTotal = Date.now()+tTotal-tCurrent;
|
|
|
|
tCurrent = Date.now();
|
2019-11-06 22:12:54 +00:00
|
|
|
if (displayInterval) {
|
|
|
|
clearInterval(displayInterval);
|
|
|
|
displayInterval = undefined;
|
|
|
|
}
|
|
|
|
updateLabels();
|
2019-11-07 20:36:46 +00:00
|
|
|
if (started)
|
2019-11-06 22:12:54 +00:00
|
|
|
displayInterval = setInterval(function() {
|
2020-04-16 09:25:13 +00:00
|
|
|
var last = tCurrent;
|
|
|
|
if (started) tCurrent = Date.now();
|
2020-04-23 09:53:09 +00:00
|
|
|
if (Math.floor((last-tStart)/1000)!=Math.floor((tCurrent-tStart)/1000) ||
|
|
|
|
Math.floor((last-tTotal)/1000)!=Math.floor((tCurrent-tTotal)/1000))
|
2020-04-16 09:25:13 +00:00
|
|
|
drawsecs();
|
|
|
|
else
|
|
|
|
drawms();
|
2019-11-06 22:12:54 +00:00
|
|
|
}, 20);
|
|
|
|
}, BTN2, {repeat:true});
|
2020-04-15 10:54:29 +00:00
|
|
|
|
2019-11-06 22:12:54 +00:00
|
|
|
setWatch(function() { // Lap
|
2019-11-07 20:36:46 +00:00
|
|
|
Bangle.beep();
|
2020-04-03 14:15:06 +00:00
|
|
|
if (started) {
|
|
|
|
tCurrent = Date.now();
|
|
|
|
lapTimes.unshift(tCurrent-tStart);
|
|
|
|
}
|
|
|
|
if (!started) { // save
|
|
|
|
var filename = "swatch-"+(new Date()).toISOString().substr(0,16).replace("T","_")+".json";
|
2020-04-16 09:25:13 +00:00
|
|
|
if (tCurrent!=tStart)
|
|
|
|
lapTimes.unshift(tCurrent-tStart);
|
2020-04-03 14:15:06 +00:00
|
|
|
// this maxes out the 28 char maximum
|
|
|
|
require("Storage").writeJSON(filename, getLapTimesArray());
|
2020-04-15 10:54:29 +00:00
|
|
|
tStart = tCurrent = tTotal = Date.now();
|
|
|
|
lapTimes = [];
|
2020-04-03 14:15:06 +00:00
|
|
|
E.showMessage("Laps Saved","Stopwatch");
|
|
|
|
setTimeout(updateLabels, 1000);
|
|
|
|
} else {
|
2020-04-15 10:54:29 +00:00
|
|
|
tStart = tCurrent;
|
2020-04-03 14:15:06 +00:00
|
|
|
updateLabels();
|
2020-03-28 03:07:14 +00:00
|
|
|
}
|
2020-03-28 04:12:22 +00:00
|
|
|
}, BTN1, {repeat:true});
|
|
|
|
setWatch(function() { // Reset
|
|
|
|
if (!started) {
|
2020-04-15 10:54:29 +00:00
|
|
|
Bangle.beep();
|
|
|
|
tStart = tCurrent = tTotal = Date.now();
|
|
|
|
lapTimes = [];
|
2020-03-28 04:14:40 +00:00
|
|
|
}
|
2020-03-28 04:12:22 +00:00
|
|
|
updateLabels();
|
2019-11-06 22:12:54 +00:00
|
|
|
}, BTN3, {repeat:true});
|
|
|
|
|
|
|
|
updateLabels();
|
2020-04-03 14:24:09 +00:00
|
|
|
Bangle.loadWidgets();
|
|
|
|
Bangle.drawWidgets();
|