From 80403150795bb04cc76d739e880083100dae2e2e Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Thu, 21 May 2020 15:25:01 -0400 Subject: [PATCH 01/40] Create app.js --- apps/g26/app.js | 345 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 345 insertions(+) create mode 100644 apps/g26/app.js diff --git a/apps/g26/app.js b/apps/g26/app.js new file mode 100644 index 000000000..6e2bdf037 --- /dev/null +++ b/apps/g26/app.js @@ -0,0 +1,345 @@ +g.clear(); + +require("FontHaxorNarrow7x17").add(Graphics); +g.setFont("HaxorNarrow7x17", 1); // bitmap font, 8x magnified + +g.setFontAlign(0,0); // center font + +let interval = null; +let stepCounter = 0; + +let fgColor = "#FFFFFF"; +let bgColor = "#000000"; + +let fillDigits = true; +let myHeartRate = 123; +let hrmPower = false; + +const startX = [ 24, 90, 24, 90 ]; +const startY = [ 14, 14, 120, 120 ]; + +const hht = 60; +const vht = 40; +const w = 60; +const h = 90; + +let lastHour = 99; +let lastMinute = 99; + + +function pad0(n) { + return (n > 9) ? n : ("0"+n); +} + +function setFG() { + g.setColor(fgColor); +} + +function setBG() { + g.setColor(bgColor); +} + +function ellipse(x1, y1, x2, y2, fill) { + if (fill) g.fillEllipse(x1, y1, x2, y2); + else g.drawEllipse(x1, y1, x2, y2); +} + +function poly(arr, fill) { + if (fill) g.fillPoly(arr, true); + else g.drawPoly(arr, true); +} + +function rect(x1, y1, x2, y2, fill) { + if (fill) g.fillRect(x1, y1, x2, y2); + else g.drawRect(x1, y1, x2, y2); +} + +setBG(); +rect(0, 0, 240, 240, true); + + +/** DIGITS **/ + +/* zero */ +function draw0(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+w, yOrig+h, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+15, yOrig+15, xOrig+w-15, yOrig+h-15, fillDigits); +} + +/* one */ +function draw1(xOrig, yOrig) { + setFG(); + poly([xOrig+w/2-6, yOrig, + xOrig+w/2-12, yOrig, + xOrig+w/2-20, yOrig+12, + xOrig+w/2-6, yOrig+12 + ], fillDigits); + rect(xOrig+w/2-6, yOrig, xOrig+w/2+6, yOrig+h-3, fillDigits); + +} + +/* two */ +function draw2(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); + + setBG(); + rect(xOrig, yOrig+27, xOrig+40, yOrig+61, true); + + setFG(); + poly([xOrig, yOrig+88, + xOrig+56, yOrig+88, + xOrig+56, yOrig+75, + xOrig+25, yOrig+75, + xOrig+46, yOrig+50, + xOrig+42, yOrig+36 + ], fillDigits); +} + +/* three */ +function draw8(xOrig, yOrig) { + setFG(); + ellipse(xOrig+3, yOrig, xOrig+53, yOrig+48, fillDigits); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+17, yOrig+13, xOrig+40, yOrig+35, fillDigits); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); +} + +function draw3(xOrig, yOrig) { + draw8(xOrig, yOrig); + setBG(); + rect(xOrig, yOrig+24, xOrig+24, yOrig+61, true); +} + +/* four */ +function draw4(xOrig, yOrig) { + setFG(); + rect(xOrig+8, yOrig+54, xOrig+w-4, yOrig+67, fillDigits); + rect(xOrig+36, yOrig+12, xOrig+49, yOrig+88, fillDigits); + poly([xOrig, yOrig+67, + xOrig+12, yOrig+67, + xOrig+49, yOrig+12, + xOrig+49, yOrig+1, + xOrig+42, yOrig+1 + ], fillDigits); +} + +function draw5(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); + + setBG(); + rect(xOrig, yOrig+24, xOrig+20, yOrig+61, true); + + setFG(); + poly([xOrig+20, yOrig+1, + xOrig+7, yOrig+47, + xOrig+19, yOrig+47, + xOrig+32, yOrig+1 + ], fillDigits); + rect(xOrig+20, yOrig+1, xOrig+53, yOrig+13, fillDigits); +} + +/* six */ +function draw6(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + poly([xOrig+2, yOrig+48, + xOrig+34, yOrig, + xOrig+46, yOrig+7, + xOrig+14, yOrig+56 + ], fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); +} + +/* seven */ +function draw7(xOrig, yOrig) { + setFG(); + poly([xOrig+4, yOrig+1, + xOrig+w-1, yOrig+1, + xOrig+w-7, yOrig+13, + xOrig+4, yOrig+13 + ], fillDigits); + poly([xOrig+w-1, yOrig+1, + xOrig+15, yOrig+88, + xOrig+5, yOrig+81, + xOrig+w-19, yOrig+9 + ], fillDigits); +} + +function draw9(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); + poly([xOrig+54, yOrig+41, + xOrig+22, yOrig+89, + xOrig+10, yOrig+82, + xOrig+42, yOrig+33 + ], fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); +} + +/** END DIGITS **/ +function getRandomColor() { + const digits = "0123456789ABCDEF"; + let r1 = digits[Math.floor(Math.random() * 16)]; + let r2 = digits[Math.floor(Math.random() * 16)]; + let g1 = digits[Math.floor(Math.random() * 16)]; + let g2 = digits[Math.floor(Math.random() * 16)]; + let b1 = digits[Math.floor(Math.random() * 16)]; + let b2 = digits[Math.floor(Math.random() * 16)]; + let str = "#"+r1+r2+g1+g2+b1+b2; + /* console.log(str); */ + return str; +} + +function drawDigit(pos, dig) { + let x = startX[pos]; + let y = startY[pos]; + + setBG(); + rect(x, y, x+w, y+h, true); + switch(dig) { + case 0: + draw0(x, y); + break; + case 1: + draw1(x, y); + break; + case 2: + draw2(x, y); + break; + case 3: + draw3(x, y); + break; + case 4: + draw4(x, y); + break; + case 5: + draw5(x, y); + break; + case 6: + draw6(x, y); + break; + case 7: + draw7(x, y); + break; + case 8: + draw8(x, y); + break; + case 9: + draw9(x, y); + break; + } +} + + +function drawTime() { + let d = new Date(); + let hour = d.getHours(); + let minute = d.getMinutes(); + let month = d.getMonth(); + let date = d.getDate(); + + if(hour == lastHour && minute == lastMinute) { + return; + } + + fgColor = "#FFFFFF"; + if(hour != lastHour) { + drawDigit(0, Math.floor(hour / 10)); + drawDigit(1, hour % 10); + } + + fgColor = "#00FFFF"; + if(minute != lastMinute) { + drawDigit(2, Math.floor(minute / 10)); + drawDigit(3, minute % 10); + } + lastHour = hour; + lastMinute = minute; + + setBG(); + rect(0, 226, 240, 240, true); + for(let c = 0; c <= 240; c++) { + g.setColor(0, 0, 1-c/240); + g.fillRect(180, c, 240, c); + } + g.setColor("#C0C0C0"); + + g.setFontAlign(-1,-1); + g.drawString("DT", 184, 10); + g.drawString("STP", 184, 70); + g.drawString("BPM", 184, 140); + g.drawString("BTY", 184, 210); + + g.setFontAlign(1,-1); + g.drawString(month + "/" + date, 236, 10); + g.drawString(stepCounter, 236, 70); + g.drawString(myHeartRate, 236, 140); + g.drawString(E.getBattery(), 236, 210); + +} + +function stop () { + if (interval) { + clearInterval(interval); + } +} + +function start () { + if (interval) { + clearInterval(interval); + } + // first time init + interval = setInterval(drawTime, 10000); + drawTime(); +} + +start(); + +// Bangle.loadWidgets(); +// Bangle.drawWidgets(); + +Bangle.on('lcdPower', function (on) { + if (on) { + start(); + } else { + stop(); + } +}); + +function btn1Func() { + fillDigits = !fillDigits; + g.clear(); + lastHour = 99; + lastMinute = 99; + drawTime(); +} + +// Show launcher when middle button pressed +setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); + +setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); + +Bangle.on('step', function(cnt) { + stepCounter = cnt; +}); + +Bangle.on('swipe', function(dir) { + Bangle.buzz(); + hrmPower = ! hrmPower; + Bangle.setHRMPower(hrmPower); +}); + +Bangle.on('HRM', function(hrm) { + myHeartRate = hrm.bpm; +}); From 2bb279c5a360695d4febba10a535a820b356476f Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Thu, 21 May 2020 15:26:51 -0400 Subject: [PATCH 02/40] Create g26.js --- apps/g26/g26.js | 345 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 345 insertions(+) create mode 100644 apps/g26/g26.js diff --git a/apps/g26/g26.js b/apps/g26/g26.js new file mode 100644 index 000000000..6e2bdf037 --- /dev/null +++ b/apps/g26/g26.js @@ -0,0 +1,345 @@ +g.clear(); + +require("FontHaxorNarrow7x17").add(Graphics); +g.setFont("HaxorNarrow7x17", 1); // bitmap font, 8x magnified + +g.setFontAlign(0,0); // center font + +let interval = null; +let stepCounter = 0; + +let fgColor = "#FFFFFF"; +let bgColor = "#000000"; + +let fillDigits = true; +let myHeartRate = 123; +let hrmPower = false; + +const startX = [ 24, 90, 24, 90 ]; +const startY = [ 14, 14, 120, 120 ]; + +const hht = 60; +const vht = 40; +const w = 60; +const h = 90; + +let lastHour = 99; +let lastMinute = 99; + + +function pad0(n) { + return (n > 9) ? n : ("0"+n); +} + +function setFG() { + g.setColor(fgColor); +} + +function setBG() { + g.setColor(bgColor); +} + +function ellipse(x1, y1, x2, y2, fill) { + if (fill) g.fillEllipse(x1, y1, x2, y2); + else g.drawEllipse(x1, y1, x2, y2); +} + +function poly(arr, fill) { + if (fill) g.fillPoly(arr, true); + else g.drawPoly(arr, true); +} + +function rect(x1, y1, x2, y2, fill) { + if (fill) g.fillRect(x1, y1, x2, y2); + else g.drawRect(x1, y1, x2, y2); +} + +setBG(); +rect(0, 0, 240, 240, true); + + +/** DIGITS **/ + +/* zero */ +function draw0(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+w, yOrig+h, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+15, yOrig+15, xOrig+w-15, yOrig+h-15, fillDigits); +} + +/* one */ +function draw1(xOrig, yOrig) { + setFG(); + poly([xOrig+w/2-6, yOrig, + xOrig+w/2-12, yOrig, + xOrig+w/2-20, yOrig+12, + xOrig+w/2-6, yOrig+12 + ], fillDigits); + rect(xOrig+w/2-6, yOrig, xOrig+w/2+6, yOrig+h-3, fillDigits); + +} + +/* two */ +function draw2(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); + + setBG(); + rect(xOrig, yOrig+27, xOrig+40, yOrig+61, true); + + setFG(); + poly([xOrig, yOrig+88, + xOrig+56, yOrig+88, + xOrig+56, yOrig+75, + xOrig+25, yOrig+75, + xOrig+46, yOrig+50, + xOrig+42, yOrig+36 + ], fillDigits); +} + +/* three */ +function draw8(xOrig, yOrig) { + setFG(); + ellipse(xOrig+3, yOrig, xOrig+53, yOrig+48, fillDigits); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+17, yOrig+13, xOrig+40, yOrig+35, fillDigits); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); +} + +function draw3(xOrig, yOrig) { + draw8(xOrig, yOrig); + setBG(); + rect(xOrig, yOrig+24, xOrig+24, yOrig+61, true); +} + +/* four */ +function draw4(xOrig, yOrig) { + setFG(); + rect(xOrig+8, yOrig+54, xOrig+w-4, yOrig+67, fillDigits); + rect(xOrig+36, yOrig+12, xOrig+49, yOrig+88, fillDigits); + poly([xOrig, yOrig+67, + xOrig+12, yOrig+67, + xOrig+49, yOrig+12, + xOrig+49, yOrig+1, + xOrig+42, yOrig+1 + ], fillDigits); +} + +function draw5(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); + + setBG(); + rect(xOrig, yOrig+24, xOrig+20, yOrig+61, true); + + setFG(); + poly([xOrig+20, yOrig+1, + xOrig+7, yOrig+47, + xOrig+19, yOrig+47, + xOrig+32, yOrig+1 + ], fillDigits); + rect(xOrig+20, yOrig+1, xOrig+53, yOrig+13, fillDigits); +} + +/* six */ +function draw6(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + poly([xOrig+2, yOrig+48, + xOrig+34, yOrig, + xOrig+46, yOrig+7, + xOrig+14, yOrig+56 + ], fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); +} + +/* seven */ +function draw7(xOrig, yOrig) { + setFG(); + poly([xOrig+4, yOrig+1, + xOrig+w-1, yOrig+1, + xOrig+w-7, yOrig+13, + xOrig+4, yOrig+13 + ], fillDigits); + poly([xOrig+w-1, yOrig+1, + xOrig+15, yOrig+88, + xOrig+5, yOrig+81, + xOrig+w-19, yOrig+9 + ], fillDigits); +} + +function draw9(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); + poly([xOrig+54, yOrig+41, + xOrig+22, yOrig+89, + xOrig+10, yOrig+82, + xOrig+42, yOrig+33 + ], fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); +} + +/** END DIGITS **/ +function getRandomColor() { + const digits = "0123456789ABCDEF"; + let r1 = digits[Math.floor(Math.random() * 16)]; + let r2 = digits[Math.floor(Math.random() * 16)]; + let g1 = digits[Math.floor(Math.random() * 16)]; + let g2 = digits[Math.floor(Math.random() * 16)]; + let b1 = digits[Math.floor(Math.random() * 16)]; + let b2 = digits[Math.floor(Math.random() * 16)]; + let str = "#"+r1+r2+g1+g2+b1+b2; + /* console.log(str); */ + return str; +} + +function drawDigit(pos, dig) { + let x = startX[pos]; + let y = startY[pos]; + + setBG(); + rect(x, y, x+w, y+h, true); + switch(dig) { + case 0: + draw0(x, y); + break; + case 1: + draw1(x, y); + break; + case 2: + draw2(x, y); + break; + case 3: + draw3(x, y); + break; + case 4: + draw4(x, y); + break; + case 5: + draw5(x, y); + break; + case 6: + draw6(x, y); + break; + case 7: + draw7(x, y); + break; + case 8: + draw8(x, y); + break; + case 9: + draw9(x, y); + break; + } +} + + +function drawTime() { + let d = new Date(); + let hour = d.getHours(); + let minute = d.getMinutes(); + let month = d.getMonth(); + let date = d.getDate(); + + if(hour == lastHour && minute == lastMinute) { + return; + } + + fgColor = "#FFFFFF"; + if(hour != lastHour) { + drawDigit(0, Math.floor(hour / 10)); + drawDigit(1, hour % 10); + } + + fgColor = "#00FFFF"; + if(minute != lastMinute) { + drawDigit(2, Math.floor(minute / 10)); + drawDigit(3, minute % 10); + } + lastHour = hour; + lastMinute = minute; + + setBG(); + rect(0, 226, 240, 240, true); + for(let c = 0; c <= 240; c++) { + g.setColor(0, 0, 1-c/240); + g.fillRect(180, c, 240, c); + } + g.setColor("#C0C0C0"); + + g.setFontAlign(-1,-1); + g.drawString("DT", 184, 10); + g.drawString("STP", 184, 70); + g.drawString("BPM", 184, 140); + g.drawString("BTY", 184, 210); + + g.setFontAlign(1,-1); + g.drawString(month + "/" + date, 236, 10); + g.drawString(stepCounter, 236, 70); + g.drawString(myHeartRate, 236, 140); + g.drawString(E.getBattery(), 236, 210); + +} + +function stop () { + if (interval) { + clearInterval(interval); + } +} + +function start () { + if (interval) { + clearInterval(interval); + } + // first time init + interval = setInterval(drawTime, 10000); + drawTime(); +} + +start(); + +// Bangle.loadWidgets(); +// Bangle.drawWidgets(); + +Bangle.on('lcdPower', function (on) { + if (on) { + start(); + } else { + stop(); + } +}); + +function btn1Func() { + fillDigits = !fillDigits; + g.clear(); + lastHour = 99; + lastMinute = 99; + drawTime(); +} + +// Show launcher when middle button pressed +setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); + +setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); + +Bangle.on('step', function(cnt) { + stepCounter = cnt; +}); + +Bangle.on('swipe', function(dir) { + Bangle.buzz(); + hrmPower = ! hrmPower; + Bangle.setHRMPower(hrmPower); +}); + +Bangle.on('HRM', function(hrm) { + myHeartRate = hrm.bpm; +}); From cbdde8b5cfa79e0e2468b15a472413174de124e2 Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Thu, 21 May 2020 15:27:44 -0400 Subject: [PATCH 03/40] Delete app.js --- apps/g26/app.js | 345 ------------------------------------------------ 1 file changed, 345 deletions(-) delete mode 100644 apps/g26/app.js diff --git a/apps/g26/app.js b/apps/g26/app.js deleted file mode 100644 index 6e2bdf037..000000000 --- a/apps/g26/app.js +++ /dev/null @@ -1,345 +0,0 @@ -g.clear(); - -require("FontHaxorNarrow7x17").add(Graphics); -g.setFont("HaxorNarrow7x17", 1); // bitmap font, 8x magnified - -g.setFontAlign(0,0); // center font - -let interval = null; -let stepCounter = 0; - -let fgColor = "#FFFFFF"; -let bgColor = "#000000"; - -let fillDigits = true; -let myHeartRate = 123; -let hrmPower = false; - -const startX = [ 24, 90, 24, 90 ]; -const startY = [ 14, 14, 120, 120 ]; - -const hht = 60; -const vht = 40; -const w = 60; -const h = 90; - -let lastHour = 99; -let lastMinute = 99; - - -function pad0(n) { - return (n > 9) ? n : ("0"+n); -} - -function setFG() { - g.setColor(fgColor); -} - -function setBG() { - g.setColor(bgColor); -} - -function ellipse(x1, y1, x2, y2, fill) { - if (fill) g.fillEllipse(x1, y1, x2, y2); - else g.drawEllipse(x1, y1, x2, y2); -} - -function poly(arr, fill) { - if (fill) g.fillPoly(arr, true); - else g.drawPoly(arr, true); -} - -function rect(x1, y1, x2, y2, fill) { - if (fill) g.fillRect(x1, y1, x2, y2); - else g.drawRect(x1, y1, x2, y2); -} - -setBG(); -rect(0, 0, 240, 240, true); - - -/** DIGITS **/ - -/* zero */ -function draw0(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+w, yOrig+h, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+15, yOrig+15, xOrig+w-15, yOrig+h-15, fillDigits); -} - -/* one */ -function draw1(xOrig, yOrig) { - setFG(); - poly([xOrig+w/2-6, yOrig, - xOrig+w/2-12, yOrig, - xOrig+w/2-20, yOrig+12, - xOrig+w/2-6, yOrig+12 - ], fillDigits); - rect(xOrig+w/2-6, yOrig, xOrig+w/2+6, yOrig+h-3, fillDigits); - -} - -/* two */ -function draw2(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); - - setBG(); - rect(xOrig, yOrig+27, xOrig+40, yOrig+61, true); - - setFG(); - poly([xOrig, yOrig+88, - xOrig+56, yOrig+88, - xOrig+56, yOrig+75, - xOrig+25, yOrig+75, - xOrig+46, yOrig+50, - xOrig+42, yOrig+36 - ], fillDigits); -} - -/* three */ -function draw8(xOrig, yOrig) { - setFG(); - ellipse(xOrig+3, yOrig, xOrig+53, yOrig+48, fillDigits); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+17, yOrig+13, xOrig+40, yOrig+35, fillDigits); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); -} - -function draw3(xOrig, yOrig) { - draw8(xOrig, yOrig); - setBG(); - rect(xOrig, yOrig+24, xOrig+24, yOrig+61, true); -} - -/* four */ -function draw4(xOrig, yOrig) { - setFG(); - rect(xOrig+8, yOrig+54, xOrig+w-4, yOrig+67, fillDigits); - rect(xOrig+36, yOrig+12, xOrig+49, yOrig+88, fillDigits); - poly([xOrig, yOrig+67, - xOrig+12, yOrig+67, - xOrig+49, yOrig+12, - xOrig+49, yOrig+1, - xOrig+42, yOrig+1 - ], fillDigits); -} - -function draw5(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); - - setBG(); - rect(xOrig, yOrig+24, xOrig+20, yOrig+61, true); - - setFG(); - poly([xOrig+20, yOrig+1, - xOrig+7, yOrig+47, - xOrig+19, yOrig+47, - xOrig+32, yOrig+1 - ], fillDigits); - rect(xOrig+20, yOrig+1, xOrig+53, yOrig+13, fillDigits); -} - -/* six */ -function draw6(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - poly([xOrig+2, yOrig+48, - xOrig+34, yOrig, - xOrig+46, yOrig+7, - xOrig+14, yOrig+56 - ], fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); -} - -/* seven */ -function draw7(xOrig, yOrig) { - setFG(); - poly([xOrig+4, yOrig+1, - xOrig+w-1, yOrig+1, - xOrig+w-7, yOrig+13, - xOrig+4, yOrig+13 - ], fillDigits); - poly([xOrig+w-1, yOrig+1, - xOrig+15, yOrig+88, - xOrig+5, yOrig+81, - xOrig+w-19, yOrig+9 - ], fillDigits); -} - -function draw9(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); - poly([xOrig+54, yOrig+41, - xOrig+22, yOrig+89, - xOrig+10, yOrig+82, - xOrig+42, yOrig+33 - ], fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); -} - -/** END DIGITS **/ -function getRandomColor() { - const digits = "0123456789ABCDEF"; - let r1 = digits[Math.floor(Math.random() * 16)]; - let r2 = digits[Math.floor(Math.random() * 16)]; - let g1 = digits[Math.floor(Math.random() * 16)]; - let g2 = digits[Math.floor(Math.random() * 16)]; - let b1 = digits[Math.floor(Math.random() * 16)]; - let b2 = digits[Math.floor(Math.random() * 16)]; - let str = "#"+r1+r2+g1+g2+b1+b2; - /* console.log(str); */ - return str; -} - -function drawDigit(pos, dig) { - let x = startX[pos]; - let y = startY[pos]; - - setBG(); - rect(x, y, x+w, y+h, true); - switch(dig) { - case 0: - draw0(x, y); - break; - case 1: - draw1(x, y); - break; - case 2: - draw2(x, y); - break; - case 3: - draw3(x, y); - break; - case 4: - draw4(x, y); - break; - case 5: - draw5(x, y); - break; - case 6: - draw6(x, y); - break; - case 7: - draw7(x, y); - break; - case 8: - draw8(x, y); - break; - case 9: - draw9(x, y); - break; - } -} - - -function drawTime() { - let d = new Date(); - let hour = d.getHours(); - let minute = d.getMinutes(); - let month = d.getMonth(); - let date = d.getDate(); - - if(hour == lastHour && minute == lastMinute) { - return; - } - - fgColor = "#FFFFFF"; - if(hour != lastHour) { - drawDigit(0, Math.floor(hour / 10)); - drawDigit(1, hour % 10); - } - - fgColor = "#00FFFF"; - if(minute != lastMinute) { - drawDigit(2, Math.floor(minute / 10)); - drawDigit(3, minute % 10); - } - lastHour = hour; - lastMinute = minute; - - setBG(); - rect(0, 226, 240, 240, true); - for(let c = 0; c <= 240; c++) { - g.setColor(0, 0, 1-c/240); - g.fillRect(180, c, 240, c); - } - g.setColor("#C0C0C0"); - - g.setFontAlign(-1,-1); - g.drawString("DT", 184, 10); - g.drawString("STP", 184, 70); - g.drawString("BPM", 184, 140); - g.drawString("BTY", 184, 210); - - g.setFontAlign(1,-1); - g.drawString(month + "/" + date, 236, 10); - g.drawString(stepCounter, 236, 70); - g.drawString(myHeartRate, 236, 140); - g.drawString(E.getBattery(), 236, 210); - -} - -function stop () { - if (interval) { - clearInterval(interval); - } -} - -function start () { - if (interval) { - clearInterval(interval); - } - // first time init - interval = setInterval(drawTime, 10000); - drawTime(); -} - -start(); - -// Bangle.loadWidgets(); -// Bangle.drawWidgets(); - -Bangle.on('lcdPower', function (on) { - if (on) { - start(); - } else { - stop(); - } -}); - -function btn1Func() { - fillDigits = !fillDigits; - g.clear(); - lastHour = 99; - lastMinute = 99; - drawTime(); -} - -// Show launcher when middle button pressed -setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); - -setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); - -Bangle.on('step', function(cnt) { - stepCounter = cnt; -}); - -Bangle.on('swipe', function(dir) { - Bangle.buzz(); - hrmPower = ! hrmPower; - Bangle.setHRMPower(hrmPower); -}); - -Bangle.on('HRM', function(hrm) { - myHeartRate = hrm.bpm; -}); From 0da1a4d7251a4d35cf26c4db4ae60ee1808a62e9 Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Thu, 21 May 2020 15:37:25 -0400 Subject: [PATCH 04/40] Create g26.json --- apps/g26/g26.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 apps/g26/g26.json diff --git a/apps/g26/g26.json b/apps/g26/g26.json new file mode 100644 index 000000000..e037c8f17 --- /dev/null +++ b/apps/g26/g26.json @@ -0,0 +1,13 @@ +}, +{ "id": "g26", + "name": "G26 Watch", + "shortName":"G26 Watch", + "type": "clock", + "version":"0.01", + "description": "This is a watchface loosely based on a $5 step tracker", + "tags": "", + "storage": [ + {"name":"g26.app.js","url":"g26.js"} + ] +} +] From e9a20f90f3628140228d27a7a8b7d3621f06cf43 Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Thu, 21 May 2020 15:51:35 -0400 Subject: [PATCH 05/40] Create apps.json --- apps/g26/apps.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 apps/g26/apps.json diff --git a/apps/g26/apps.json b/apps/g26/apps.json new file mode 100644 index 000000000..e037c8f17 --- /dev/null +++ b/apps/g26/apps.json @@ -0,0 +1,13 @@ +}, +{ "id": "g26", + "name": "G26 Watch", + "shortName":"G26 Watch", + "type": "clock", + "version":"0.01", + "description": "This is a watchface loosely based on a $5 step tracker", + "tags": "", + "storage": [ + {"name":"g26.app.js","url":"g26.js"} + ] +} +] From 17e920d7e569d341dc32044f74c47183e3978f8b Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Thu, 21 May 2020 15:55:33 -0400 Subject: [PATCH 06/40] Create app.js --- apps/g26/app.js | 336 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 336 insertions(+) create mode 100644 apps/g26/app.js diff --git a/apps/g26/app.js b/apps/g26/app.js new file mode 100644 index 000000000..b96422f4c --- /dev/null +++ b/apps/g26/app.js @@ -0,0 +1,336 @@ +g.clear(); + +require("FontHaxorNarrow7x17").add(Graphics); +g.setFont("HaxorNarrow7x17", 1); // bitmap font, 8x magnified + +g.setFontAlign(0,0); // center font + +let interval = null; +let stepCounter = 0; + +let fgColor = "#FFFFFF"; +let bgColor = "#000000"; + +let fillDigits = true; +let myHeartRate = 123; +let hrmPower = false; + +const startX = [ 24, 90, 24, 90 ]; +const startY = [ 14, 14, 120, 120 ]; + +const hht = 60; +const vht = 40; +const w = 60; +const h = 90; + +let lastHour = 99; +let lastMinute = 99; + + +function pad0(n) { + return (n > 9) ? n : ("0"+n); +} + +function setFG() { + g.setColor(fgColor); +} + +function setBG() { + g.setColor(bgColor); +} + +function ellipse(x1, y1, x2, y2, fill) { + if (fill) g.fillEllipse(x1, y1, x2, y2); + else g.drawEllipse(x1, y1, x2, y2); +} + +function poly(arr, fill) { + if (fill) g.fillPoly(arr, true); + else g.drawPoly(arr, true); +} + +function rect(x1, y1, x2, y2, fill) { + if (fill) g.fillRect(x1, y1, x2, y2); + else g.drawRect(x1, y1, x2, y2); +} + +setBG(); +rect(0, 0, 240, 240, true); + + +/** DIGITS **/ + +/* zero */ +function draw0(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+w, yOrig+h, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+15, yOrig+15, xOrig+w-15, yOrig+h-15, fillDigits); +} + +/* one */ +function draw1(xOrig, yOrig) { + setFG(); + poly([xOrig+w/2-6, yOrig, + xOrig+w/2-12, yOrig, + xOrig+w/2-20, yOrig+12, + xOrig+w/2-6, yOrig+12 + ], fillDigits); + rect(xOrig+w/2-6, yOrig, xOrig+w/2+6, yOrig+h-3, fillDigits); + +} + +/* two */ +function draw2(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); + + setBG(); + rect(xOrig, yOrig+27, xOrig+40, yOrig+61, true); + + setFG(); + poly([xOrig, yOrig+88, + xOrig+56, yOrig+88, + xOrig+56, yOrig+75, + xOrig+25, yOrig+75, + xOrig+46, yOrig+50, + xOrig+42, yOrig+36 + ], fillDigits); +} + +/* three */ +function draw8(xOrig, yOrig) { + setFG(); + ellipse(xOrig+3, yOrig, xOrig+53, yOrig+48, fillDigits); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+17, yOrig+13, xOrig+40, yOrig+35, fillDigits); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); +} + +function draw3(xOrig, yOrig) { + draw8(xOrig, yOrig); + setBG(); + rect(xOrig, yOrig+24, xOrig+24, yOrig+61, true); +} + +/* four */ +function draw4(xOrig, yOrig) { + setFG(); + rect(xOrig+8, yOrig+54, xOrig+w-4, yOrig+67, fillDigits); + rect(xOrig+36, yOrig+12, xOrig+49, yOrig+88, fillDigits); + poly([xOrig, yOrig+67, + xOrig+12, yOrig+67, + xOrig+49, yOrig+12, + xOrig+49, yOrig+1, + xOrig+42, yOrig+1 + ], fillDigits); +} + +function draw5(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); + + setBG(); + rect(xOrig, yOrig+24, xOrig+20, yOrig+61, true); + + setFG(); + poly([xOrig+20, yOrig+1, + xOrig+7, yOrig+47, + xOrig+19, yOrig+47, + xOrig+32, yOrig+1 + ], fillDigits); + rect(xOrig+20, yOrig+1, xOrig+53, yOrig+13, fillDigits); +} + +/* six */ +function draw6(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); + poly([xOrig+2, yOrig+48, + xOrig+34, yOrig, + xOrig+46, yOrig+7, + xOrig+14, yOrig+56 + ], fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); +} + +/* seven */ +function draw7(xOrig, yOrig) { + setFG(); + poly([xOrig+4, yOrig+1, + xOrig+w-1, yOrig+1, + xOrig+w-7, yOrig+13, + xOrig+4, yOrig+13 + ], fillDigits); + poly([xOrig+w-1, yOrig+1, + xOrig+15, yOrig+88, + xOrig+5, yOrig+81, + xOrig+w-19, yOrig+9 + ], fillDigits); +} + +function draw9(xOrig, yOrig) { + setFG(); + ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); + poly([xOrig+54, yOrig+41, + xOrig+22, yOrig+89, + xOrig+10, yOrig+82, + xOrig+42, yOrig+33 + ], fillDigits); + if(fillDigits) setBG(); + ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); +} + +/** END DIGITS **/ +function getRandomColor() { + const digits = "0123456789ABCDEF"; + let r1 = digits[Math.floor(Math.random() * 16)]; + let r2 = digits[Math.floor(Math.random() * 16)]; + let g1 = digits[Math.floor(Math.random() * 16)]; + let g2 = digits[Math.floor(Math.random() * 16)]; + let b1 = digits[Math.floor(Math.random() * 16)]; + let b2 = digits[Math.floor(Math.random() * 16)]; + let str = "#"+r1+r2+g1+g2+b1+b2; + /* console.log(str); */ + return str; +} + +function drawDigit(pos, dig) { + let x = startX[pos]; + let y = startY[pos]; + + setBG(); + rect(x, y, x+w, y+h, true); + switch(dig) { + case 0: + draw0(x, y); + break; + case 1: + draw1(x, y); + break; + case 2: + draw2(x, y); + break; + case 3: + draw3(x, y); + break; + case 4: + draw4(x, y); + break; + case 5: + draw5(x, y); + break; + case 6: + draw6(x, y); + break; + case 7: + draw7(x, y); + break; + case 8: + draw8(x, y); + break; + case 9: + draw9(x, y); + break; + } +} + + +function drawTime() { + let d = new Date(); + let hour = d.getHours(); + let minute = d.getMinutes(); + let month = d.getMonth(); + let date = d.getDate(); + + if(hour == lastHour && minute == lastMinute) { + return; + } + + fgColor = "#FFFFFF"; + if(hour != lastHour) { + drawDigit(0, Math.floor(hour / 10)); + drawDigit(1, hour % 10); + } + + fgColor = "#00FFFF"; + if(minute != lastMinute) { + drawDigit(2, Math.floor(minute / 10)); + drawDigit(3, minute % 10); + } + lastHour = hour; + lastMinute = minute; + + setBG(); + rect(0, 226, 240, 240, true); + for(let c = 0; c <= 240; c++) { + g.setColor(0, 0, 1-c/240); + g.fillRect(180, c, 240, c); + } + g.setColor("#C0C0C0"); + + g.setFontAlign(-1,-1); + g.drawString("DT", 184, 10); + g.drawString("STP", 184, 70); + g.drawString("BPM", 184, 140); + g.drawString("BTY", 184, 210); + + g.setFontAlign(1,-1); + g.drawString(month + "/" + date, 236, 10); + g.drawString(stepCounter, 236, 70); + g.drawString(myHeartRate, 236, 140); + g.drawString(E.getBattery(), 236, 210); + +} + +function stop () { + if (interval) { + clearInterval(interval); + } +} + +function start () { + if (interval) { + clearInterval(interval); + } + // first time init + interval = setInterval(drawTime, 10000); + drawTime(); +} + +start(); + +// Bangle.loadWidgets(); +// Bangle.drawWidgets(); + +Bangle.on('lcdPower', function (on) { + if (on) { + start(); + } else { + stop(); + } +}); + +function btn1Func() { + fillDigits = !fillDigits; + g.clear(); + lastHour = 99; + lastMinute = 99; + drawTime(); +} + +// Show launcher when middle button pressed +setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); + +setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); + +Bangle.on('step', function(cnt) { + stepCounter = cnt; +}); + From 5ad73b28fa58a213c2833d6de334791c5f2960d5 Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Thu, 21 May 2020 15:55:50 -0400 Subject: [PATCH 07/40] Delete g26.js --- apps/g26/g26.js | 345 ------------------------------------------------ 1 file changed, 345 deletions(-) delete mode 100644 apps/g26/g26.js diff --git a/apps/g26/g26.js b/apps/g26/g26.js deleted file mode 100644 index 6e2bdf037..000000000 --- a/apps/g26/g26.js +++ /dev/null @@ -1,345 +0,0 @@ -g.clear(); - -require("FontHaxorNarrow7x17").add(Graphics); -g.setFont("HaxorNarrow7x17", 1); // bitmap font, 8x magnified - -g.setFontAlign(0,0); // center font - -let interval = null; -let stepCounter = 0; - -let fgColor = "#FFFFFF"; -let bgColor = "#000000"; - -let fillDigits = true; -let myHeartRate = 123; -let hrmPower = false; - -const startX = [ 24, 90, 24, 90 ]; -const startY = [ 14, 14, 120, 120 ]; - -const hht = 60; -const vht = 40; -const w = 60; -const h = 90; - -let lastHour = 99; -let lastMinute = 99; - - -function pad0(n) { - return (n > 9) ? n : ("0"+n); -} - -function setFG() { - g.setColor(fgColor); -} - -function setBG() { - g.setColor(bgColor); -} - -function ellipse(x1, y1, x2, y2, fill) { - if (fill) g.fillEllipse(x1, y1, x2, y2); - else g.drawEllipse(x1, y1, x2, y2); -} - -function poly(arr, fill) { - if (fill) g.fillPoly(arr, true); - else g.drawPoly(arr, true); -} - -function rect(x1, y1, x2, y2, fill) { - if (fill) g.fillRect(x1, y1, x2, y2); - else g.drawRect(x1, y1, x2, y2); -} - -setBG(); -rect(0, 0, 240, 240, true); - - -/** DIGITS **/ - -/* zero */ -function draw0(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+w, yOrig+h, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+15, yOrig+15, xOrig+w-15, yOrig+h-15, fillDigits); -} - -/* one */ -function draw1(xOrig, yOrig) { - setFG(); - poly([xOrig+w/2-6, yOrig, - xOrig+w/2-12, yOrig, - xOrig+w/2-20, yOrig+12, - xOrig+w/2-6, yOrig+12 - ], fillDigits); - rect(xOrig+w/2-6, yOrig, xOrig+w/2+6, yOrig+h-3, fillDigits); - -} - -/* two */ -function draw2(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); - - setBG(); - rect(xOrig, yOrig+27, xOrig+40, yOrig+61, true); - - setFG(); - poly([xOrig, yOrig+88, - xOrig+56, yOrig+88, - xOrig+56, yOrig+75, - xOrig+25, yOrig+75, - xOrig+46, yOrig+50, - xOrig+42, yOrig+36 - ], fillDigits); -} - -/* three */ -function draw8(xOrig, yOrig) { - setFG(); - ellipse(xOrig+3, yOrig, xOrig+53, yOrig+48, fillDigits); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+17, yOrig+13, xOrig+40, yOrig+35, fillDigits); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); -} - -function draw3(xOrig, yOrig) { - draw8(xOrig, yOrig); - setBG(); - rect(xOrig, yOrig+24, xOrig+24, yOrig+61, true); -} - -/* four */ -function draw4(xOrig, yOrig) { - setFG(); - rect(xOrig+8, yOrig+54, xOrig+w-4, yOrig+67, fillDigits); - rect(xOrig+36, yOrig+12, xOrig+49, yOrig+88, fillDigits); - poly([xOrig, yOrig+67, - xOrig+12, yOrig+67, - xOrig+49, yOrig+12, - xOrig+49, yOrig+1, - xOrig+42, yOrig+1 - ], fillDigits); -} - -function draw5(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); - - setBG(); - rect(xOrig, yOrig+24, xOrig+20, yOrig+61, true); - - setFG(); - poly([xOrig+20, yOrig+1, - xOrig+7, yOrig+47, - xOrig+19, yOrig+47, - xOrig+32, yOrig+1 - ], fillDigits); - rect(xOrig+20, yOrig+1, xOrig+53, yOrig+13, fillDigits); -} - -/* six */ -function draw6(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - poly([xOrig+2, yOrig+48, - xOrig+34, yOrig, - xOrig+46, yOrig+7, - xOrig+14, yOrig+56 - ], fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); -} - -/* seven */ -function draw7(xOrig, yOrig) { - setFG(); - poly([xOrig+4, yOrig+1, - xOrig+w-1, yOrig+1, - xOrig+w-7, yOrig+13, - xOrig+4, yOrig+13 - ], fillDigits); - poly([xOrig+w-1, yOrig+1, - xOrig+15, yOrig+88, - xOrig+5, yOrig+81, - xOrig+w-19, yOrig+9 - ], fillDigits); -} - -function draw9(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); - poly([xOrig+54, yOrig+41, - xOrig+22, yOrig+89, - xOrig+10, yOrig+82, - xOrig+42, yOrig+33 - ], fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); -} - -/** END DIGITS **/ -function getRandomColor() { - const digits = "0123456789ABCDEF"; - let r1 = digits[Math.floor(Math.random() * 16)]; - let r2 = digits[Math.floor(Math.random() * 16)]; - let g1 = digits[Math.floor(Math.random() * 16)]; - let g2 = digits[Math.floor(Math.random() * 16)]; - let b1 = digits[Math.floor(Math.random() * 16)]; - let b2 = digits[Math.floor(Math.random() * 16)]; - let str = "#"+r1+r2+g1+g2+b1+b2; - /* console.log(str); */ - return str; -} - -function drawDigit(pos, dig) { - let x = startX[pos]; - let y = startY[pos]; - - setBG(); - rect(x, y, x+w, y+h, true); - switch(dig) { - case 0: - draw0(x, y); - break; - case 1: - draw1(x, y); - break; - case 2: - draw2(x, y); - break; - case 3: - draw3(x, y); - break; - case 4: - draw4(x, y); - break; - case 5: - draw5(x, y); - break; - case 6: - draw6(x, y); - break; - case 7: - draw7(x, y); - break; - case 8: - draw8(x, y); - break; - case 9: - draw9(x, y); - break; - } -} - - -function drawTime() { - let d = new Date(); - let hour = d.getHours(); - let minute = d.getMinutes(); - let month = d.getMonth(); - let date = d.getDate(); - - if(hour == lastHour && minute == lastMinute) { - return; - } - - fgColor = "#FFFFFF"; - if(hour != lastHour) { - drawDigit(0, Math.floor(hour / 10)); - drawDigit(1, hour % 10); - } - - fgColor = "#00FFFF"; - if(minute != lastMinute) { - drawDigit(2, Math.floor(minute / 10)); - drawDigit(3, minute % 10); - } - lastHour = hour; - lastMinute = minute; - - setBG(); - rect(0, 226, 240, 240, true); - for(let c = 0; c <= 240; c++) { - g.setColor(0, 0, 1-c/240); - g.fillRect(180, c, 240, c); - } - g.setColor("#C0C0C0"); - - g.setFontAlign(-1,-1); - g.drawString("DT", 184, 10); - g.drawString("STP", 184, 70); - g.drawString("BPM", 184, 140); - g.drawString("BTY", 184, 210); - - g.setFontAlign(1,-1); - g.drawString(month + "/" + date, 236, 10); - g.drawString(stepCounter, 236, 70); - g.drawString(myHeartRate, 236, 140); - g.drawString(E.getBattery(), 236, 210); - -} - -function stop () { - if (interval) { - clearInterval(interval); - } -} - -function start () { - if (interval) { - clearInterval(interval); - } - // first time init - interval = setInterval(drawTime, 10000); - drawTime(); -} - -start(); - -// Bangle.loadWidgets(); -// Bangle.drawWidgets(); - -Bangle.on('lcdPower', function (on) { - if (on) { - start(); - } else { - stop(); - } -}); - -function btn1Func() { - fillDigits = !fillDigits; - g.clear(); - lastHour = 99; - lastMinute = 99; - drawTime(); -} - -// Show launcher when middle button pressed -setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); - -setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); - -Bangle.on('step', function(cnt) { - stepCounter = cnt; -}); - -Bangle.on('swipe', function(dir) { - Bangle.buzz(); - hrmPower = ! hrmPower; - Bangle.setHRMPower(hrmPower); -}); - -Bangle.on('HRM', function(hrm) { - myHeartRate = hrm.bpm; -}); From f367b1a662dcfa9f1696469ab6427a7b43206195 Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Thu, 21 May 2020 15:56:00 -0400 Subject: [PATCH 08/40] Delete g26.json --- apps/g26/g26.json | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 apps/g26/g26.json diff --git a/apps/g26/g26.json b/apps/g26/g26.json deleted file mode 100644 index e037c8f17..000000000 --- a/apps/g26/g26.json +++ /dev/null @@ -1,13 +0,0 @@ -}, -{ "id": "g26", - "name": "G26 Watch", - "shortName":"G26 Watch", - "type": "clock", - "version":"0.01", - "description": "This is a watchface loosely based on a $5 step tracker", - "tags": "", - "storage": [ - {"name":"g26.app.js","url":"g26.js"} - ] -} -] From 4fa0d1b204e997425887272215615b6f4de0102d Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Fri, 17 Jul 2020 14:37:15 -0400 Subject: [PATCH 09/40] Create readme.md --- apps/nixie/readme.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 apps/nixie/readme.md diff --git a/apps/nixie/readme.md b/apps/nixie/readme.md new file mode 100644 index 000000000..68af873a6 --- /dev/null +++ b/apps/nixie/readme.md @@ -0,0 +1,3 @@ +This watch face emulates nixie tube characters and is a bit fun to watch draw. Also displays date, "steps" (the stepcounter / 10 until I really train the accelerometer) and remaining battery. + +Also supports alarms from a JSON file named "yngv.alarms.json". From a33b203780c5bedccc7711ca46e8c1c191ee7404 Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Fri, 17 Jul 2020 14:38:24 -0400 Subject: [PATCH 10/40] Add files via upload --- apps/nixie/nixie.app.js | 392 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 apps/nixie/nixie.app.js diff --git a/apps/nixie/nixie.app.js b/apps/nixie/nixie.app.js new file mode 100644 index 000000000..c9fa068fe --- /dev/null +++ b/apps/nixie/nixie.app.js @@ -0,0 +1,392 @@ + +g.clear(); + +require("Font8x12").add(Graphics); +g.setFont("8x12", 1); +let interval = null; +let stepCounter = 0; + +let msgs = require("Storage").readJSON('yngv27.msgs.json'); +let alarms = require("Storage").readJSON('yngv27.alarm.json'); + +function showMsg(msg) { + g.setFontAlign(0,-1); + g.setColor(1,1,1); + g.drawString("<< ALARM >>", 120, 180, true); + g.drawString(msg, 120, 200, true); + Bangle.buzz(); + setTimeout(Bangle.buzz, 800); + setTimeout(Bangle.buzz, 1600); + setTimeout(Bangle.buzz, 2400); + setTimeout(Bangle.buzz, 3200); +} + +function checkMsgs() { + for(let idx=0; idx < alarms.length; idx++) { + let tdiff = Date.now() - Date.parse(alarms[idx].time); + // 10 sec margin of error + if(tdiff > 0 && tdiff < 10000) { + showMsg(alarms[idx].msg); + } + } +} + +for(let idx=0; idx < alarms.length; idx++) { + let tdiff = Date.parse(alarms[idx].time) - Date.now(); + let msg = alarms[idx].msg; + if(tdiff > 0) { + /*console.log(`will alarm ${msg} in ${tdiff}`);*/ + setTimeout(checkMsgs, tdiff); + } +} + +let xs = 0.5; +let ys = 0.75; + +let prevH1 = -1; +let prevH2 = -1; +let prevM1 = -1; +let prevM2 = -1; + + +let points0 = [ + 0, 40, + 1, 35, + 7, 20, + 16, 8, + 28, 2, + 40, 0, + + 51, 2, + 63, 10, + 72, 20, + 77, 35, + 78, 40, + + 78, 59, + 77, 64, + 72, 79, + 63, 89, + 51, 97, + + 40, 99, + 28, 97, + 16, 91, + 7, 79, + 1, 64, + 0, 59, + 0, 40 +]; + +let points1 = [ 40, 99, 40, 0]; + +let points2 = [ 0, 25, + 2, 22, + 6, 13, + 17, 5, + 28, 2, + 40, 0, + 52, 2, + 63, 5, + 74, 13, + 79, 23, + 79, 28, + 74, 38, + 63, 46, + 51, 54, + 40, 58, + 29, 62, + 17, 68, + 8, 80, + 0, 99, + 79, 99 + ]; + +let points4 = [ 60, 99, 60, 0, 0, 75, 79, 75 ]; + +let points8 = [ + 40, 40, + 26, 42, + 15, 46, + 4, 56, + 1, 66, + 1, 77, + 6, 87, + 17, 94, + 28, 97, + 38, 99, + 42, 99, + 52, 97, + 63, 94, + 74, 87, + 79, 77, + 79, 66, + 75, 56, + 64, 46, + 54, 42, + 40, 40, + + 52, 39, + 62, 34, + 69, 29, + 72, 23, + 72, 19, + 69, 12, + 62, 6, + 52, 2, + 40, 0, + + 28, 2, + 18, 6, + 11, 12, + 8, 19, + 8, 23, + 11, 29, + 18, 34, + 28, 39, + 40, 40, + ]; + +let points6 = [ + 50, 0, + 4, 56, + 1, 66, + 1, 77, + 6, 87, + 17, 94, + 28, 97, + 40, 99, + 52, 97, + 63, 94, + 74, 87, + 79, 77, + 79, 66, + 75, 56, + 64, 46, + 52, 42, + 40, 40, + 26, 42, + 15, 46, + 4, 56, + ]; + +let points3 = [ + 1, 77, + 6, 87, + 17, 94, + 28, 97, + 40, 99, + 52, 97, + 63, 94, + 74, 87, + 79, 77, + 79, 66, + 75, 56, + 64, 46, + 52, 42, + 39, 40, + 79, 0, + 1, 0 + ]; + +let points7 = [ 0, 0, 79, 0, 30, 99 ]; + +let points9 = []; +let points5 = [ + 1, 77, + 6, 87, + 17, 94, + 28, 97, + 38, 99, + 42, 99, + 52, 97, + 63, 94, + 74, 87, + 79, 77, + 79, 66, + 75, 56, + 64, 46, + 54, 42, + 40, 40, + 26, 42, + 15, 46, + 27, 0, + 79, 0, + ]; + + +function drawPoints(points, x0, y0) { + + let x = points[0]*xs+x0, y = points[1]*ys+y0; + //g.drawEllipse(x-2, y-2, x+2, y+2); + g.moveTo(x, y); + for(let idx=1; idx*2 < points.length; idx ++) { + let x = points[idx*2]*xs+x0; + let y = points[idx*2+1]*ys+y0; + //g.drawEllipse(x-2, y-2, x+2, y+2); + g.lineTo(x, y); + } +} + +/* create 5 from 2 , and 9 from 6 */ +/* nope, we have a better 5; less authentic, but whatev +for (let idx=0; idx*2 < points2.length; idx++) { + points5[idx*2] = points2[idx*2]; + points5[idx*2+1] = 99-points2[idx*2+1]; +} +*/ +for (let idx=0; idx*2 < points6.length; idx++) { + points9[idx*2] = 79-points6[idx*2]; + points9[idx*2+1] = 99-points6[idx*2+1]; +} + +pointsArray = [points0, points1, points2, points3, points4, points5, points6, points7, points8, points9]; + +function eraseDigit(d, x, y) { + // first time draw + if(d < 0) return; + g.setColor("#000000"); + drawPoints(pointsArray[d], x-2, y-2); + drawPoints(pointsArray[d], x+2, y-2); + drawPoints(pointsArray[d], x-2, y+2); + drawPoints(pointsArray[d], x+2, y+2); + drawPoints(pointsArray[d], x-1, y-1); + drawPoints(pointsArray[d], x+1, y-1); + drawPoints(pointsArray[d], x-1, y+1); + drawPoints(pointsArray[d], x+1, y+1); +} + +function drawDigit(d, x, y) { + //g.drawEllipse(20+4*xs, 20, 20+(72 * xs), 20+(40*ys)); + //g.drawEllipse(20, 20+(40*ys), 20+(80 * xs), 20+(99*ys)); + //g.drawEllipse(20, 20, 20+(79 * xs), 20+(99*ys)); + g.setColor("#202020"); + for (let idx = pointsArray.length - 1; idx >= 0 ; idx--) { + if(idx == d) { + + g.setColor("#FF0000"); + drawPoints(pointsArray[d], x-2, y-2); + drawPoints(pointsArray[d], x+2, y-2); + drawPoints(pointsArray[d], x-2, y+2); + drawPoints(pointsArray[d], x+2, y+2); + g.setColor("#FF6000"); + drawPoints(pointsArray[d], x-1, y-1); + drawPoints(pointsArray[d], x+1, y-1); + drawPoints(pointsArray[d], x-1, y+1); + drawPoints(pointsArray[d], x+1, y+1); + + g.setColor("#FFC000"); + drawPoints(pointsArray[d], x, y); + + g.setColor("#202020"); + } else { + drawPoints(pointsArray[idx], x, y); + } + } + +} + +function drawTime() { + const mstr="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"; + + let d = new Date(); + let hour = d.getHours(); + let minute = d.getMinutes(); + let month = d.getMonth(); + let date = d.getDate(); + + let h1 = Math.floor(hour / 10); + let h2 = hour % 10; + let m1 = Math.floor(minute / 10); + let m2 = minute % 10; + + if(h1 == prevH1 && h2 == prevH2 && m1 == prevM1 && m2 == prevM2) { + return; + } + + if(h1 != prevH1) { + eraseDigit(prevH1, 10, 80); + drawDigit(h1, 10, 80); + } + if(h2 != prevH2) { + eraseDigit(prevH2, 65, 80); + drawDigit(h2, 65, 80); + } + if(m1 != prevM1) { + eraseDigit(prevM1, 135, 80); + drawDigit(m1, 135, 80); + } + if(m2 != prevM2) { + eraseDigit(prevM2, 190, 80); + drawDigit(m2, 190, 80); + } + + g.setColor("#000000"); + g.fillRect(0, 10, 240, 24); + g.fillRect(0, 222, 240, 240); + g.setColor("#202020"); + g.drawLine(0, 24, 239, 24); + g.drawLine(0, 226, 239, 226); + g.setColor("#C06000"); + g.setFontAlign(0, -1); + g.drawString(mstr.slice(month*3,month*3+3) + " " + date, 120, 10); + g.setFontAlign(-1,-1); + g.drawString("STEP " + stepCounter, 0, 230); + g.setFontAlign(1,-1); + g.drawString("BTY "+E.getBattery(), 240, 230); + + + prevH1 = h1; + prevH2 = h2; + prevM1 = m1; + prevM2 = m2; + +} + +function stop () { + if (interval) { + clearInterval(interval); + } +} + +function start () { + if (interval) { + clearInterval(interval); + } + // first time init + interval = setInterval(drawTime, 10000); + drawTime(); +} + +start(); + + +Bangle.on('lcdPower', function (on) { + if (on) { + start(); + } else { + stop(); + } +}); + +function btn1Func() { + g.clear(); + prevH1 = -1; + prevH2 = -1; + prevM1 = -1; + prevM2 = -1; + drawTime(); +} + +function btn3Func() { + showMsg("This is a test message"); +} + +// Show launcher when middle button pressed +setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); +// redraw +setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); +setWatch(btn3Func, BTN3, {repeat:true,edge:"falling"}); +Bangle.on('step', function(cnt) { + stepCounter = cnt / 10; +}); From 229fd1c672e1c81d9852d1534e45318ddb980fc2 Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Fri, 17 Jul 2020 14:42:25 -0400 Subject: [PATCH 11/40] Create nixie.info --- apps/nixie/nixie.info | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/nixie/nixie.info diff --git a/apps/nixie/nixie.info b/apps/nixie/nixie.info new file mode 100644 index 000000000..d9ac5129b --- /dev/null +++ b/apps/nixie/nixie.info @@ -0,0 +1 @@ +{"id":"jvNixie","name":"Nixie Clock","type":"clock","src":"nixie.app.js","sortorder":-1,"version":"0.1","files":"nixie.info,nixie.app.js"} From 8babc1ecf4c195ad0b4ca63afed725594a2c93cb Mon Sep 17 00:00:00 2001 From: yngv27 <61598758+yngv27@users.noreply.github.com> Date: Fri, 17 Jul 2020 14:58:08 -0400 Subject: [PATCH 12/40] Add files via upload Added night mode --- apps/nixie/nixie.app.js | 97 +++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 43 deletions(-) diff --git a/apps/nixie/nixie.app.js b/apps/nixie/nixie.app.js index c9fa068fe..f1cd245f1 100644 --- a/apps/nixie/nixie.app.js +++ b/apps/nixie/nixie.app.js @@ -1,4 +1,3 @@ - g.clear(); require("Font8x12").add(Graphics); @@ -9,7 +8,11 @@ let stepCounter = 0; let msgs = require("Storage").readJSON('yngv27.msgs.json'); let alarms = require("Storage").readJSON('yngv27.alarm.json'); +let alarming = false; +let nightMode = false; + function showMsg(msg) { + alarming = true; g.setFontAlign(0,-1); g.setColor(1,1,1); g.drawString("<< ALARM >>", 120, 180, true); @@ -214,9 +217,7 @@ let points5 = [ 79, 0, ]; - function drawPoints(points, x0, y0) { - let x = points[0]*xs+x0, y = points[1]*ys+y0; //g.drawEllipse(x-2, y-2, x+2, y+2); g.moveTo(x, y); @@ -228,13 +229,14 @@ function drawPoints(points, x0, y0) { } } -/* create 5 from 2 , and 9 from 6 */ -/* nope, we have a better 5; less authentic, but whatev +/* create 5 from 2 */ +/* uncomment if you want the 5 to look more authentic (but uglier) for (let idx=0; idx*2 < points2.length; idx++) { points5[idx*2] = points2[idx*2]; points5[idx*2+1] = 99-points2[idx*2+1]; } */ +/* create 9 from 6 */ for (let idx=0; idx*2 < points6.length; idx++) { points9[idx*2] = 79-points6[idx*2]; points9[idx*2+1] = 99-points6[idx*2+1]; @@ -243,10 +245,13 @@ for (let idx=0; idx*2 < points6.length; idx++) { pointsArray = [points0, points1, points2, points3, points4, points5, points6, points7, points8, points9]; function eraseDigit(d, x, y) { - // first time draw if(d < 0) return; g.setColor("#000000"); - drawPoints(pointsArray[d], x-2, y-2); + if(nightMode) { + drawPoints(pointsArray[d], x, y); + return; + } + drawPoints(pointsArray[d], x-2, y-2); drawPoints(pointsArray[d], x+2, y-2); drawPoints(pointsArray[d], x-2, y+2); drawPoints(pointsArray[d], x+2, y+2); @@ -257,13 +262,14 @@ function eraseDigit(d, x, y) { } function drawDigit(d, x, y) { - //g.drawEllipse(20+4*xs, 20, 20+(72 * xs), 20+(40*ys)); - //g.drawEllipse(20, 20+(40*ys), 20+(80 * xs), 20+(99*ys)); - //g.drawEllipse(20, 20, 20+(79 * xs), 20+(99*ys)); + if(nightMode) { + g.setColor("#206040"); + drawPoints(pointsArray[d], x, y); + return; + } g.setColor("#202020"); for (let idx = pointsArray.length - 1; idx >= 0 ; idx--) { if(idx == d) { - g.setColor("#FF0000"); drawPoints(pointsArray[d], x-2, y-2); drawPoints(pointsArray[d], x+2, y-2); @@ -274,7 +280,7 @@ function drawDigit(d, x, y) { drawPoints(pointsArray[d], x+1, y-1); drawPoints(pointsArray[d], x-1, y+1); drawPoints(pointsArray[d], x+1, y+1); - + g.setColor("#FFC000"); drawPoints(pointsArray[d], x, y); @@ -283,12 +289,11 @@ function drawDigit(d, x, y) { drawPoints(pointsArray[idx], x, y); } } - } - + function drawTime() { const mstr="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"; - + let d = new Date(); let hour = d.getHours(); let minute = d.getMinutes(); @@ -303,7 +308,7 @@ function drawTime() { if(h1 == prevH1 && h2 == prevH2 && m1 == prevM1 && m2 == prevM2) { return; } - + if(h1 != prevH1) { eraseDigit(prevH1, 10, 80); drawDigit(h1, 10, 80); @@ -315,32 +320,47 @@ function drawTime() { if(m1 != prevM1) { eraseDigit(prevM1, 135, 80); drawDigit(m1, 135, 80); - } + } if(m2 != prevM2) { eraseDigit(prevM2, 190, 80); drawDigit(m2, 190, 80); - } - - g.setColor("#000000"); - g.fillRect(0, 10, 240, 24); - g.fillRect(0, 222, 240, 240); - g.setColor("#202020"); - g.drawLine(0, 24, 239, 24); - g.drawLine(0, 226, 239, 226); - g.setColor("#C06000"); - g.setFontAlign(0, -1); - g.drawString(mstr.slice(month*3,month*3+3) + " " + date, 120, 10); - g.setFontAlign(-1,-1); - g.drawString("STEP " + stepCounter, 0, 230); - g.setFontAlign(1,-1); - g.drawString("BTY "+E.getBattery(), 240, 230); + } + if(!nightMode) { + g.setColor("#000000"); + g.fillRect(0, 10, 240, 24); + g.fillRect(0, 222, 240, 240); + g.setColor("#202020"); + g.drawLine(0, 24, 239, 24); + g.drawLine(0, 226, 239, 226); + g.setColor("#C06000"); + g.setFontAlign(0, -1); + g.drawString(mstr.slice(month*3,month*3+3) + " " + date, 120, 10); + g.setFontAlign(-1,-1); + g.drawString("STEP " + stepCounter, 0, 230); + g.setFontAlign(1,-1); + g.drawString("BTY "+E.getBattery(), 240, 230); + } - prevH1 = h1; prevH2 = h2; prevM1 = m1; prevM2 = m2; - + +} + +function btn1Func() { + if(alarming) { + alarming = false; + } else { + nightMode = !nightMode; + g.setRotation(nightMode ? 1 : 0, 0); + } + g.clear(); + prevH1 = -1; + prevH2 = -1; + prevM1 = -1; + prevM2 = -1; + drawTime(); } function stop () { @@ -353,7 +373,6 @@ function start () { if (interval) { clearInterval(interval); } - // first time init interval = setInterval(drawTime, 10000); drawTime(); } @@ -369,14 +388,6 @@ Bangle.on('lcdPower', function (on) { } }); -function btn1Func() { - g.clear(); - prevH1 = -1; - prevH2 = -1; - prevM1 = -1; - prevM2 = -1; - drawTime(); -} function btn3Func() { showMsg("This is a test message"); From 4e84c7c6d51a4ca6a325dbd2fd71ba2ce4d66277 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun, 22 Aug 2021 13:45:00 -0700 Subject: [PATCH 13/40] Create app.js --- apps/carcrazy/app.js | 232 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 apps/carcrazy/app.js diff --git a/apps/carcrazy/app.js b/apps/carcrazy/app.js new file mode 100644 index 000000000..82945011f --- /dev/null +++ b/apps/carcrazy/app.js @@ -0,0 +1,232 @@ +Bangle.setLCDPower(1); +Bangle.setLCDTimeout(0); +var numberofHearts = 3; + +Bangle.setLCDMode("doublebuffered"); + + +//var popUp = require("heatshrink").decompress(atob("isFwMBCJoA==")); + +var backgroundImage = require("heatshrink").decompress(atob("isZxH+woAB6YBBBodXAgYLCCIQUJAgoUOFP4p/FP4p/FP4p/FP4pYA==")); + +var heartImage = require("heatshrink").decompress(atob("hUKxH+ABckAAYIDpFstlIudzpARCtmQyGXz2luYVBkgIBBQXCy4JCCYQKCtgpCE4IJCFQIyFBAwKDBAw/CAogA==")); + +var gameOverImage = require("heatshrink").decompress(atob("kcV4MB+Nj/4AJwATBgfwDAV+AYUP4ADBgP4BAU/AYUHERMP+AiBgP+EQU/4AiBg/4EQX/EQUf8EH8ED/kAAIN/wEfEQ9/FwX+A==")); + +var RedCar = +require("heatshrink").decompress(atob("ol7xH+ABWBqwAqwI5LABKAtIf4AClZASq0rp9zudIDYNIABgSBABd5AAtPEoNPAoUrqxDPlcAkmXy9OIYVsABYSBABWdzwAFIYVzAoMkRSJDCNAJDBkhDiuckFQOevMqklPZBo7DZAUkHagAKIoyKCkl5IwIwBwJDLYYRDrWoMAAgJDCqxDZyxDXzoABIcpAXRRRD/If5D/If5D/If5D9uYASId9OBoIAPpxDvBoRD2AAlOADlPAAckIbJ0QABjeNIf4ACkhDUIgNIUQQEBAAtyIaOXvIAFp4lBp4FBIapFCA4wACyxCRzo2BAAlzEoNzA4ZDVQ4ZDGQyRDHQ4RDgHyQAHIf5DhklIHoRDrudzA4RDNIoRDtFYRD/Iac5rsykgABaANyILQACzudIgTGClcrrowBIZ9ktdkRQhCdRQ8rGAxD/If5D/If4ACzpD/Io5D/IbOI2eIIdowBwJDP1nX1hDtGAJD/Ialkx7eCZdgwDIZ1rIdwwEIf5D/If5DZmU5mRDtGAhDNAAhDrAAhD/IaM5rrLmzpCCIYYwEIZtktdkIcpBCIYgwEIf5DZAARD/If8ylcrpFIIcd5uYpBmRDUAAUyA4JECIb9zEoNdFoZDVnJDkp5DZx+z2YHCIbudAAJDFFYOPIanX65DgIAIACIYWBFYJD/IYSHBx5DQ1idCx5DFAAjITIIjLFFYIvBwJDQLINrtc5IZOWIbq1DIaJXBslkmUHg9IAA1yRCV5AAtPg8rnIrBQ6VkbwcyDQMrAoIAEpxCRpwaGmSwBmUAg4wEIZ1rIYYdBg5DZpBDLGAt6II+BwJ8CIY85mQAFp9OACFPDQ1dIZMrHYJCFLghDHAA4lCAB85DpgwEAARD9rpDHq0rp9zAAcrmTQCIZVkroAQGoNr2YABIY4wCHAlPldWBgMky4ADkhTDIZQAV2fXIZA4JlYABQ4pDCg8HIcePAAJDCFYJDCYAoABZoOBdw0HoFAVoQAdIASKFslkIgSMEIAIACIZBBgIonXZwpDHgBDE/1Wq0rIe8rHYJDFIoRD3IJBD6vRD1AASH/AA5DWoFkAARD9IgIADoA+hrooEGQhDQAAk5IcM5FpJDNkgAGnNAaQjTTC4gACmUklQAEkhDPpFsAAoYCR68yDQ1PzwAFvJD/IbNyuVOAA1WnIAQp4aGuedzpDauWXABFIOgwAKpwdJIghDgpxD/AAVzACRDvADpD/If5D/If5D/If5D/If5D/If5D/If5DGthD/AApD/If8kkhFGuVyIMJCDp4ABIZ5FCRIyKgQgmekgzDIf5DRp1zpzOIZ4I+dZAUqldzvLLQueXuaKiIQ2elYrBAgN5IaSHBRAIADIcOdp8klSSBOgRDNHIQiBpzjDRjDIEvMkEYdzBAIPBIbUAIboiEIaWBq1WYYVyy9yZwTQGAAVOp9OABlzAAdPAAlzzuduYeBGoJCJAAcrYYZFBAAReCADUkRgeezomBaYMrIJpD/Z496YoRFEUoIAaYoQgBEIMkp+BwJCQAARkCRQKJDAD2WEoKEBgBBTZw1zIcNyIYbIRAA1WRQQABEQIAbEAQlBY6hDIAARCcpAiEIbWBlYADpAAcEQhCZAAyrCADI+hAAhCbIc+BqwAawIwS")); + +var OrangeCar = require("heatshrink").decompress(atob("ol7xH+ABXGAFfHHJYAJQFpD/Ia1OgEkpwDBAAUqABYSBABd4AAskEgQFBAgOcQiQXBlQdCGhdyGowAFznGAAnHNQVO4/GRSQSCGIJDPIRhDH4xDD0SHCkhAMCAQ7BIAQbBHaYAKIoyEDKII1C45DJLIRDw0XHIYXGIa5BYZwWiIZKHDIeZFCIf5D/If5D/If5D/If4ADBQgAMIeEkBoQAOlRDvISJDnAAkklQAWDAQbGIcB0JABreNIf5DYIgJFEW4xCRJZYeBznGIagABIQYHDAAQ7SGwQAD44mCp3HBARD64xDDA4ZDbYzRDdPghDs45DQgEkHoRDrE4MkIaCKDIdYyEIf5DRzjeDaAZBaAAOcAAI9B0RmBlQqB0QwDIZvP5/ORQhCcRRAqCGAhD1Q4RD/If5D/ABOiIf6KHIf5DZ63X55DtGAhDN6/X6xDtGAPQIf5DT5/WZdwwB5xDQ54SCIdgwDIf5D/If5DZvHGAgRDrGAhDNAApDqAAhD/IaOc494Icui0RCBIYeiGAZDN5/P5xDkQgRDFGAhD/IbIABuRD/AAZD658qkkAlUqIcdyuUkkkqIaoABvAHBIgRDfFoXGFoZD+45DW6HX6+cIb+czmiIYnOFYJDU6wXB4xDfIAIACIYvQIf5DVCgPX63WZYoAEZCZBEIYnHFYLNCIaSKBvBDoFYKJCIafOIYUklQAFZKecAAsqEoOi5xDCQ6BYBCQVO5zjCAApESkgaGpwqBIwQEBFYRDPCQRD54/HDARDHzlOAAdyuTTHABd4CwIACp3HIZMAHYJCEPQpDHAAjYCTQQAPzgWCAAxDIAAJDXIgRDi5pDHpy0BXokAdoZDK56lBAB4UC64ABIY4wCHAkkkl4BgV4AAZTEIZYAUIZY4LI4IACuQUFITxDD6HQA4TpFIY7NB47vHQj4AE6yKG5w1HIAIACBpBDk6DOHIZn+lTdFIekqpxDFAALeFIeXGII5D/IeHP63X6xD/ABBD/IbIAE45Dh44tJIfHGIb9445FCaCzrGvBDXlVOAAodIISI7HknGAAtyIeQzCIZhTCIad4vEqkgAFp2cACAZGDQZDaIQIAIeZIAIlQdJ0RDkkhD/AAbbEABgcKIcwAcIf5D/If5D/If5D/If5D/If5D/If5D/If5DKI1BDVIQxD8AAMkIc+cAAJBCp0qGYRDPRVBBDAAIyEIf5DRlSbDZwtOuQ+eAAIrCNQIECIZofBRgaJfIQyED43HvBDPPYJDKRC6GD0WcAAUkFQILBIaB9EToRIJRqDIEzgiFBAR0DIZsqPgZDp46FBIZ3OGAMkkkqCogACBQIAFKwIATEQl4aIIJBD4RCJAAZ/EN4olEADCMDZAQlDIJpD/Z47pCZwQACYSgAIzg/CvEqeAPH5xCQRRoAdEoKETIdlyIbQABcgZIDADYiE45BXAAPGIcMqEQnPIbPOEAkqADgiEITIAGEogAYH0BD/ABHH4wAa5wwSA")); + +var PurpleCar = require("heatshrink").decompress(atob("ol74UBitg///BIP/7lVqtUDJUVBwIABq2qABOVCCkolQJC0AwDgWolAQD1EqwBCH0EqCCdKxQuEAAkKwGhCH4Q/CGD7ECDINEAAoQIwBACgQQYwQ+EAAcC1EACAeAlQfDAAheBCG2oCBUCCB8qCCiQBdp3+fxW/CH4Q/CH4QxgQQKwAQD1QQK1QQUmQQKxiH/CBGqCB3/5WACA+j/4Qf14Q/KhWqRI0CCAv+x4QBEYcC1Wo/SpFCBtUlQQBBgISBAAUAgYQB1fVr2qCAP//8qB4WoAwIQB1WVCCEoFwIQCAA36GwMo1AQOlQQM+QQCqWq1YPIAAPqKgYQOqwQOiqpBCBi6DCH4QDYoIOH/gKBCAs/CD2AZoISEBwUAgAQYAYIABgWqfIIQGAAISBAAQHCCDIAICH4Q/CH4Q/CAWoB5UKCB8qCCmK0AxJwQQDgQQKwAQE1Q0ICAuAlQQHlQrBCCdy1EK1QABCAmq0EKgoQBqofBIoIAFWYMqB4QQRuQ5BCAxlBxoQDqyHKyoQUZpLJDCBmq1oQFvRTGAAOlCApFBB4xBFCCdUIY3VBgY=")); + +var LightGreenCar = require("heatshrink").decompress(atob("ol74UBocF///BIP1z9VqtUDJUVBwIABq2qABOVCCkolQJC0AwDgWolAQD1EqwBCH0EqCCdKxQuEAAkKwGhCH4Q/CGD7ECDINEAAoQIwBACgQQYwQ+EAAcC1EACAeAlQfDAAheBCG2oCBUCCB8qCCiQBdp3+fxW/CH4Q/CH4QxgQQKwAQD1QQK1QQUmQQKxiH/CBGqCB3/5WACA+j/4Qf14QxKjGqRI0CCAv+x4QBEYcC1Wo/SpFCBtUlQQBBgISBAAQGBCAOo6te1QQB///lQPC1AGBCAOqyoQQlAuBCAXPAQIAD/Q2BlGoCAgAGCAUqCBnyCAVS1WrB5AAB9RUDCB1WCB0VVIIQMXQYQ/CAbFBBw/8BQIQFn4QewDNBCQgOCgEACDADBAAMC1T5BCAwABCQIACA4QQZABAQ/CH4Q/CH4QC1APKhQQPlQQUxWgGJOCCAcCCBWACAmqGhAQFwEqCA8qFYIQTuWohWqAAIQE1WghUFCANVD4JFBAAqzBlQPCCCNyHIIQGMoONCAdWQ5WVCCjNJZIYQM1WtCAt6KYwAB0oQFIoIPGIIoQTqhDG6oMDA")); + +function getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive +} + +function moveEnemyPosition(){ + score += 1; + randomRoadPositionIndicator = getRandomInt(1, 4); + if ((randomRoadPositionIndicator == 1)) { + randomRoadPosition = 85; + }else if((randomRoadPositionIndicator == 2)){ + randomRoadPosition = 120; + }else { + randomRoadPosition = 155; + } +} + +function collision(){ + if(gameStatus == GAMEPLAYING){ + if + ( + (enemyCarFrontY > playerCarFrontY) + && + ( + (enemyCarLeftX > playerCarLeftX && enemyCarLeftX < playerCarRightX) + || + (enemyCarRightX > playerCarLeftX && enemyCarRightX < playerCarRightX) + ) + ){ + // hit + setTimeout(collision, 2500); // wait 2.5 second for the function to actiavte agian. + numberofHearts -= 1; + score -= 1; + Bangle.buzz(); + }else{ + // miss + setTimeout(collision, 1); // try again in 1 milliseconds. + } + } +} + +function storeMyData(data) { + // ensure there are less than 500 elements in the array + while (log.length >= 500) log.shift(); + // append a new item to the array + log.push(data); +} + + +var file = require("Storage").open("CarCrazy.csv","r"); +var currentHighScore = file.readLine(); +if (currentHighScore == undefined) currentHighScore = 0; +var BackgroundStartingPosition = 75; +var carScale = 0.5; +var accel = Bangle.getAccel(); +var playerCarPosition = 120-accel.x*40; +var BackgroundYPosition = BackgroundStartingPosition; +var randomRoadPositionIndicator = getRandomInt(1, 3); +var randomRoadPosition = 120; +var enemyPositonY = 30; +var carWidth = 30; +var carHeight = 60; +var playerCarY = 130; +var enemyCarLeftX; +var enemyCarRightX; +var playerCarLeftX; +var playerCarRightX; +var enemyCarFrontY; +var playerCarFrontY; +var GAMEPLAYING = 1; +var GAMEOVER = 2; +var GAMESTART = 3; +var gameStatus = GAMESTART; +var score = 0; + +moveEnemyPosition(); +collision(); + + +g.setFontAlign(-1,-1); + +function clearHighScore() { + currentHighScore = 0; + file = require("Storage").open("CarCrazy.csv","w"); + file.erase(); +} + +function draw(){ + if(gameStatus == GAMEPLAYING){ + BackgroundYPosition += 10; + accel = Bangle.getAccel(); + playerCarPosition = 120-accel.x*40; + g.flip(); + g.drawImage(backgroundImage,125,BackgroundYPosition, {scale:13,rotate:0}); + g.drawImage(RedCar,playerCarPosition,playerCarY, {scale:carScale,rotate:3.142}); + g.drawImage(OrangeCar,randomRoadPosition,enemyPositonY, {scale:carScale,rotate:0}); + + if(numberofHearts==3){ + g.drawImage(heartImage,10,10, {scale:2,rotate:0}); + g.drawImage(heartImage,10,50, {scale:2,rotate:0}); + g.drawImage(heartImage,10,30, {scale:2,rotate:0}); + }else if(numberofHearts==2){ + g.drawImage(heartImage,10,50, {scale:2,rotate:0}); + g.drawImage(heartImage,10,30, {scale:2,rotate:0}); + }else if(numberofHearts==1){ + g.drawImage(heartImage,10,50, {scale:2,rotate:0}); + }else{ + gameStatus = GAMEOVER; + //clearHighScore(); + if(score >= currentHighScore){ + currentHighScore = score; + file = require("Storage").open("CarCrazy.csv","w"); + file.erase(); + file = require("Storage").open("CarCrazy.csv","w"); + file.write(currentHighScore+"\n"); + } + } + + playerCarFrontY = playerCarY-carHeight/2; + playerCarBackY = playerCarY+carHeight/2; + playerCarLeftX = playerCarPosition-carWidth/2; + playerCarRightX = playerCarPosition+carWidth/2; + + enemyCarFrontY = enemyPositonY+carHeight/2; + enemyCarBackY = enemyPositonY-carHeight/2; + enemyCarLeftX = randomRoadPosition-carWidth/2; + enemyCarRightX = randomRoadPosition+carWidth/2; + + //g.drawRect(playerCarLeftX, playerCarFrontY, playerCarRightX, playerCarBackY); + //g.drawRect(enemyCarLeftX, enemyCarFrontY, enemyCarRightX, enemyCarBackY); + + g.setColor(0,0,0); + g.drawString("Score: "+score,180,5); + g.drawString("High Score: "+currentHighScore,180,15); + + if(BackgroundYPosition > 170){ + BackgroundYPosition = BackgroundStartingPosition; + } + + + }else if(gameStatus == GAMEOVER){ + + BackgroundYPosition += 10; + g.flip(); + g.drawImage(backgroundImage,125,BackgroundYPosition, {scale:13,rotate:0}); + g.drawImage(gameOverImage,125,80, {scale:8,rotate:0}); + if(BackgroundYPosition > 170){ + BackgroundYPosition = BackgroundStartingPosition; + } + g.setColor(255,0,0); + g.setFont("6x8",4); + g.drawString("Game Over",13,17); + g.setFont("6x8",1.5); + g.drawString("Score: "+score,10,75); + g.drawString("High",10,100); + g.drawString("Score: " + currentHighScore,10,110); + g.drawString("Hold Button",10,130); + g.drawString("2 To Play",10,140); + g.drawImage(LightGreenCar,180,115, {scale:0.5,rotate:3}); + g.drawImage(PurpleCar,215,115, {scale:0.5,rotate:3}); + }else if(gameStatus == GAMESTART){ + g.flip(); + g.drawImage(backgroundImage,125,BackgroundYPosition, {scale:13,rotate:0}); + g.setColor(255,0,0); + BackgroundYPosition += 10; + g.setFont("6x8",3); + g.drawImage(gameOverImage,125,80, {scale:8,rotate:0}); + g.drawString("Welcome to",13,11); + g.drawString("Car Crazy",13,31); + g.setFont("6x8",1.8); + g.drawString("High",10,80); + g.drawString("Score: "+currentHighScore,10,90); + g.drawString("Hold Button",10,120); + g.drawString("2 To Start",10,130); + g.drawImage(LightGreenCar,180,115, {scale:0.5,rotate:3}); + g.drawImage(PurpleCar,215,115, {scale:0.5,rotate:3}); + //setTimeout(displayPopup, 3000); + } +} +setInterval(draw ,10); + + +function moveEnemyCar(){ + if(gameStatus == GAMEPLAYING){ + enemyPositonY = enemyPositonY + 10; + if((enemyPositonY > 200)){ + enemyPositonY = 30; + moveEnemyPosition(); + } + } +} +setInterval(moveEnemyCar,10); + +setWatch(() => { + if(gameStatus == GAMESTART){ + gameStatus = GAMEPLAYING; + collision(); + enemyPositonY = 0; + score = 0; + }else if(gameStatus == GAMEOVER){ + gameStatus = GAMEPLAYING; + collision(); + enemyPositonY = 0; + numberofHearts = 3; + score = 0; + } +}, BTN2, {repeat:true}); From 7669df9dcc061482e0d84090917ef685e9b988d8 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun, 22 Aug 2021 13:48:28 -0700 Subject: [PATCH 14/40] Create app-icon.js --- apps/carcrazy/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/carcrazy/app-icon.js diff --git a/apps/carcrazy/app-icon.js b/apps/carcrazy/app-icon.js new file mode 100644 index 000000000..b3f122ea8 --- /dev/null +++ b/apps/carcrazy/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AH4Ay90A8AWT8HuhwXSCQPuAAIXShwWCC6YuDAAQwWGKQWWFwoJDxAAFF5gHChAXODAhHCxGDmYAE3YAC2AwKxAWFC4gABC4YBCIwYXGoNb2tUpYxDRYsIIw0zqoXBqtVDAIXVDAJiEUYYXNqhhDUYgWGC41VSYgXSjYXHAA4XGJAULDQQXQJALFDGBTXFAAuwgQXV3cP+coC6m////nAXYiIAEC5m4FIYXN2gKBpYXFwIXMkIKBiQXSFwQwCC4hIFC42xiMjmURlYXFDAgXImcziMbC4ynKC4uxC5MAAAsBI4cQAoMRC50AKYYdCDYIQHGBASCC6QwCDgwA/AH4AVA==")) From eebb7d65fc84038e205f9076d1361d9d74895691 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun, 22 Aug 2021 13:58:11 -0700 Subject: [PATCH 15/40] Update apps.json --- apps.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps.json b/apps.json index 2b28509cf..23620c6b2 100644 --- a/apps.json +++ b/apps.json @@ -3410,5 +3410,17 @@ {"name":"thermomF.app.js","url":"app.js"}, {"name":"thermomF.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "carcrazy", + "name": "Car Crazy", + "shortName":"Car Crazy", + "icon": "app.png", + "version":"0.01", + "description": "A simple car game where you try to aviod the other cars by tilting your wrist left and right. Hold down button 2 to start.", + "tags": "game", + "storage": [ + {"name":"carcrazy.app.js","url":"app.js"}, + {"name":"carcrazy.img","url":"app-icon.js","evaluate":true} + ] } ] From a1f7913efe60d8bc922e39be5950f7921bcdec50 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun, 22 Aug 2021 14:08:40 -0700 Subject: [PATCH 16/40] Add files via upload --- apps/carcrazy/carcrash.png | Bin 0 -> 1788 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/carcrazy/carcrash.png diff --git a/apps/carcrazy/carcrash.png b/apps/carcrazy/carcrash.png new file mode 100644 index 0000000000000000000000000000000000000000..1678c54c8008bc3fb136aa1c8a6c4469b8ea3b10 GIT binary patch literal 1788 zcmVs(v=njf8tUa)^>SH#6swn3^)jdzC{iyq>P5Ag zw7V5sqH$6mPoaDZ@S^w-@_?TM7UR7-TJDxYQkO*S3`CUxfO;th4g>CaOfRGCl8s!B zHr8B3odAIP_%arMLs&n*F`omcFgS@twQM95OYBi%N&rB8+=p@z7Ch6mA?%d`{t#3mI2y?kc|p9cU1zE1(~;^TE-s}%4f099=GC?J&-;0pl5ZhHa6_)2Q}yyD~R zkehBXWI^8XAW+P%jUPc6`3HHXDt#P&Pj2}a(t-XV*y2@j;M zo;9w>@GxhhHFf8PyTO>Gi%w|#BX-k#kSAA5sega$5oNlZ7 zy_|XF{OtDfhM+$HUE%jAL*}rMmfjvJ&ecUDVT`CxWbJ`I>e{b@U?BRsqN1p1N#$NG zsqE5{%4RLA*apybsQAY>50xa|N{)OlZ0dYXFN&CslqYXA(;FTHVGCuIRg_j8VEAB@ z0&KvNziU~=BjeHJh1ldyN3^7JX&=dSy0N5G&b;#J(}&LoYMSrF_k|)$)_6?Y=>?L4 zp=Y(Y@+bcCocOS%oW0u1$xFBSpy@Vk{@Bhn_o4^J=s&r8(w0FLK5FUZ>xaEjw|Osm zV2r8z9TE7)b^oNgg63nm`#Tog<~>bd<$*?Ara_|9PQ2Y9IAqb%GdRhnGj-FwPvD$0 z$O*TfCUbbVofk5By5Ga*f%r*w;fT@`iO@4J`%8Q)DTg&}4LHJm3yK|c0&lPA;i!A^ zF!&^HkWb(%TLR7I_#9rkbqg++Yoz=r@BH}~08M7}^L)^mOwgG;`4ByY z*uGBd_`Ddgtg*7CA{=i0W9a0R}IDdbdQ`YN&gndd(QiUHPUWm5d;@DMuPaE|M( zZ2%}zf9lAgGJv9;-%x;%!-LPWAQ@f&0000 Date: Sun, 22 Aug 2021 14:09:36 -0700 Subject: [PATCH 17/40] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 23620c6b2..eb78ac3fc 100644 --- a/apps.json +++ b/apps.json @@ -3414,7 +3414,7 @@ { "id": "carcrazy", "name": "Car Crazy", "shortName":"Car Crazy", - "icon": "app.png", + "icon": "carcrash.png", "version":"0.01", "description": "A simple car game where you try to aviod the other cars by tilting your wrist left and right. Hold down button 2 to start.", "tags": "game", From 34b29d50da8f2da98e8d0506f196f6e1ff42c756 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun, 22 Aug 2021 14:10:51 -0700 Subject: [PATCH 18/40] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index eb78ac3fc..66d8ec9e9 100644 --- a/apps.json +++ b/apps.json @@ -3416,7 +3416,7 @@ "shortName":"Car Crazy", "icon": "carcrash.png", "version":"0.01", - "description": "A simple car game where you try to aviod the other cars by tilting your wrist left and right. Hold down button 2 to start.", + "description": "A simple car game where you try to avoid the other cars by tilting your wrist left and right. Hold down button 2 to start.", "tags": "game", "storage": [ {"name":"carcrazy.app.js","url":"app.js"}, From eb83ce4fad33412d97b2badc532d57841accc883 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun, 22 Aug 2021 14:15:59 -0700 Subject: [PATCH 19/40] Add files via upload --- apps/carcrazy/app.png | Bin 0 -> 1788 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/carcrazy/app.png diff --git a/apps/carcrazy/app.png b/apps/carcrazy/app.png new file mode 100644 index 0000000000000000000000000000000000000000..1678c54c8008bc3fb136aa1c8a6c4469b8ea3b10 GIT binary patch literal 1788 zcmVs(v=njf8tUa)^>SH#6swn3^)jdzC{iyq>P5Ag zw7V5sqH$6mPoaDZ@S^w-@_?TM7UR7-TJDxYQkO*S3`CUxfO;th4g>CaOfRGCl8s!B zHr8B3odAIP_%arMLs&n*F`omcFgS@twQM95OYBi%N&rB8+=p@z7Ch6mA?%d`{t#3mI2y?kc|p9cU1zE1(~;^TE-s}%4f099=GC?J&-;0pl5ZhHa6_)2Q}yyD~R zkehBXWI^8XAW+P%jUPc6`3HHXDt#P&Pj2}a(t-XV*y2@j;M zo;9w>@GxhhHFf8PyTO>Gi%w|#BX-k#kSAA5sega$5oNlZ7 zy_|XF{OtDfhM+$HUE%jAL*}rMmfjvJ&ecUDVT`CxWbJ`I>e{b@U?BRsqN1p1N#$NG zsqE5{%4RLA*apybsQAY>50xa|N{)OlZ0dYXFN&CslqYXA(;FTHVGCuIRg_j8VEAB@ z0&KvNziU~=BjeHJh1ldyN3^7JX&=dSy0N5G&b;#J(}&LoYMSrF_k|)$)_6?Y=>?L4 zp=Y(Y@+bcCocOS%oW0u1$xFBSpy@Vk{@Bhn_o4^J=s&r8(w0FLK5FUZ>xaEjw|Osm zV2r8z9TE7)b^oNgg63nm`#Tog<~>bd<$*?Ara_|9PQ2Y9IAqb%GdRhnGj-FwPvD$0 z$O*TfCUbbVofk5By5Ga*f%r*w;fT@`iO@4J`%8Q)DTg&}4LHJm3yK|c0&lPA;i!A^ zF!&^HkWb(%TLR7I_#9rkbqg++Yoz=r@BH}~08M7}^L)^mOwgG;`4ByY z*uGBd_`Ddgtg*7CA{=i0W9a0R}IDdbdQ`YN&gndd(QiUHPUWm5d;@DMuPaE|M( zZ2%}zf9lAgGJv9;-%x;%!-LPWAQ@f&0000 Date: Mon, 23 Aug 2021 09:41:35 -0700 Subject: [PATCH 20/40] Update apps.json --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index 66d8ec9e9..8f5f4141c 100644 --- a/apps.json +++ b/apps.json @@ -3418,6 +3418,7 @@ "version":"0.01", "description": "A simple car game where you try to avoid the other cars by tilting your wrist left and right. Hold down button 2 to start.", "tags": "game", + "readme": "README.md", "storage": [ {"name":"carcrazy.app.js","url":"app.js"}, {"name":"carcrazy.img","url":"app-icon.js","evaluate":true} From b9375375ba381cd80788865c92191296f59717cc Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon, 23 Aug 2021 09:42:38 -0700 Subject: [PATCH 21/40] Delete app.png --- apps/carcrazy/app.png | Bin 1788 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/carcrazy/app.png diff --git a/apps/carcrazy/app.png b/apps/carcrazy/app.png deleted file mode 100644 index 1678c54c8008bc3fb136aa1c8a6c4469b8ea3b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 zcmVs(v=njf8tUa)^>SH#6swn3^)jdzC{iyq>P5Ag zw7V5sqH$6mPoaDZ@S^w-@_?TM7UR7-TJDxYQkO*S3`CUxfO;th4g>CaOfRGCl8s!B zHr8B3odAIP_%arMLs&n*F`omcFgS@twQM95OYBi%N&rB8+=p@z7Ch6mA?%d`{t#3mI2y?kc|p9cU1zE1(~;^TE-s}%4f099=GC?J&-;0pl5ZhHa6_)2Q}yyD~R zkehBXWI^8XAW+P%jUPc6`3HHXDt#P&Pj2}a(t-XV*y2@j;M zo;9w>@GxhhHFf8PyTO>Gi%w|#BX-k#kSAA5sega$5oNlZ7 zy_|XF{OtDfhM+$HUE%jAL*}rMmfjvJ&ecUDVT`CxWbJ`I>e{b@U?BRsqN1p1N#$NG zsqE5{%4RLA*apybsQAY>50xa|N{)OlZ0dYXFN&CslqYXA(;FTHVGCuIRg_j8VEAB@ z0&KvNziU~=BjeHJh1ldyN3^7JX&=dSy0N5G&b;#J(}&LoYMSrF_k|)$)_6?Y=>?L4 zp=Y(Y@+bcCocOS%oW0u1$xFBSpy@Vk{@Bhn_o4^J=s&r8(w0FLK5FUZ>xaEjw|Osm zV2r8z9TE7)b^oNgg63nm`#Tog<~>bd<$*?Ara_|9PQ2Y9IAqb%GdRhnGj-FwPvD$0 z$O*TfCUbbVofk5By5Ga*f%r*w;fT@`iO@4J`%8Q)DTg&}4LHJm3yK|c0&lPA;i!A^ zF!&^HkWb(%TLR7I_#9rkbqg++Yoz=r@BH}~08M7}^L)^mOwgG;`4ByY z*uGBd_`Ddgtg*7CA{=i0W9a0R}IDdbdQ`YN&gndd(QiUHPUWm5d;@DMuPaE|M( zZ2%}zf9lAgGJv9;-%x;%!-LPWAQ@f&0000 Date: Mon, 23 Aug 2021 09:43:24 -0700 Subject: [PATCH 22/40] Create README.md --- apps/carcrazy/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/carcrazy/README.md diff --git a/apps/carcrazy/README.md b/apps/carcrazy/README.md new file mode 100644 index 000000000..1c6e298c1 --- /dev/null +++ b/apps/carcrazy/README.md @@ -0,0 +1 @@ +Test![image (7)](https://user-images.githubusercontent.com/89286474/130485173-03155f4c-cb6e-4b12-9466-16b4310a6476.png) From 2bfce0b08dce7e3846a77417227209daa2b1444d Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon, 23 Aug 2021 09:45:29 -0700 Subject: [PATCH 23/40] Create ChangeLog --- apps/carcrazy/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/carcrazy/ChangeLog diff --git a/apps/carcrazy/ChangeLog b/apps/carcrazy/ChangeLog new file mode 100644 index 000000000..9a50abf42 --- /dev/null +++ b/apps/carcrazy/ChangeLog @@ -0,0 +1 @@ +0.01: Car Crazy is now avialable for testing in beta! From 47893eda83fa19e09cebd298484f2c8a58f18025 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon, 23 Aug 2021 10:02:44 -0700 Subject: [PATCH 24/40] Update app.js --- apps/carcrazy/app.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/carcrazy/app.js b/apps/carcrazy/app.js index 82945011f..c7476d18a 100644 --- a/apps/carcrazy/app.js +++ b/apps/carcrazy/app.js @@ -156,7 +156,8 @@ function draw(){ g.setColor(0,0,0); g.drawString("Score: "+score,180,5); - g.drawString("High Score: "+currentHighScore,180,15); + g.drawString("HighScore:",178,15); + g.drawString(currentHighScore,205,25); if(BackgroundYPosition > 170){ BackgroundYPosition = BackgroundStartingPosition; @@ -230,3 +231,10 @@ setWatch(() => { score = 0; } }, BTN2, {repeat:true}); + + + + + + + From 15d34b9f5d7b306a3b44bb6e129b0611f30ca0b5 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon, 23 Aug 2021 10:27:26 -0700 Subject: [PATCH 25/40] Update README.md --- apps/carcrazy/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/carcrazy/README.md b/apps/carcrazy/README.md index 1c6e298c1..774061c58 100644 --- a/apps/carcrazy/README.md +++ b/apps/carcrazy/README.md @@ -1 +1,3 @@ -Test![image (7)](https://user-images.githubusercontent.com/89286474/130485173-03155f4c-cb6e-4b12-9466-16b4310a6476.png) +![Screenshot 2021-08-23 100720](https://user-images.githubusercontent.com/89286474/130490762-24915bfe-5368-4ef8-b164-38a0fcf3b814.png) + +Form Link: https://forms.office.com/r/HnwYzG9Sk7 From 35b334f8321d59e18c340e131dafe79f511d3c11 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon, 23 Aug 2021 11:30:50 -0700 Subject: [PATCH 26/40] Update README.md --- apps/carcrazy/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/carcrazy/README.md b/apps/carcrazy/README.md index 774061c58..6eef6f8c7 100644 --- a/apps/carcrazy/README.md +++ b/apps/carcrazy/README.md @@ -1,3 +1,3 @@ -![Screenshot 2021-08-23 100720](https://user-images.githubusercontent.com/89286474/130490762-24915bfe-5368-4ef8-b164-38a0fcf3b814.png) +![Screenshot 2021-08-23 100720](https://user-images.githubusercontent.com/89286474/130498574-0b5246cb-8553-455c-b6c0-096e5ca1644c.png) Form Link: https://forms.office.com/r/HnwYzG9Sk7 From 9d33283bc8be69a73f7e743fb218aaf3d48b5796 Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:36:36 -0400 Subject: [PATCH 27/40] Create README.md --- apps/nixie/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/nixie/README.md diff --git a/apps/nixie/README.md b/apps/nixie/README.md new file mode 100644 index 000000000..7280800e9 --- /dev/null +++ b/apps/nixie/README.md @@ -0,0 +1,16 @@ +Nixie clock + +This clock displays the time in nixie-inspired numerals. + +The app makes use of a module called "m_vatch" which manages all the timers, and makes calls to functions in the 'main' file +to manage drawing the background, time, and any data like sensor info, step counters, battery, etc. The idea is that it is +reusable if you write many watch apps... you just need to implement functions to draw the background (called on start, and every +time the 'mode' changes (regular and night mode), the time (which gets a call every second), and the data (also every second, +except not in night mode)). + +Night mode is a mode that can be set manually or automatically, allowing the watch code to adjust colors and detail. Mainly, +used as a night clock, you can draw no background, and use dim colors for your digits. If set to auto, the accelerometer is used so +when the watch is placed on its side, it switches to night mode (your watch may need a tweak... and Bangle 2 is a different story!) + +It also handles step counting so that it's stored on a daily +basis - survives a system reset, zeroes when the date changes and keeps a record in a history file by day. From f17f4e61481b508fd0ee0fbedbe668ed3f490d04 Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:37:12 -0400 Subject: [PATCH 28/40] Delete readme.md from an old version --- apps/nixie/readme.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 apps/nixie/readme.md diff --git a/apps/nixie/readme.md b/apps/nixie/readme.md deleted file mode 100644 index 68af873a6..000000000 --- a/apps/nixie/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -This watch face emulates nixie tube characters and is a bit fun to watch draw. Also displays date, "steps" (the stepcounter / 10 until I really train the accelerometer) and remaining battery. - -Also supports alarms from a JSON file named "yngv.alarms.json". From d34faf8a2b2d12652cd1923d600fe9938ed3506e Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:38:14 -0400 Subject: [PATCH 29/40] Update nixie.app.js Works on both Bangle 1 and Bangle 2 --- apps/nixie/nixie.app.js | 318 ++++++++++++++++++++++------------------ 1 file changed, 172 insertions(+), 146 deletions(-) diff --git a/apps/nixie/nixie.app.js b/apps/nixie/nixie.app.js index f1cd245f1..a62590f75 100644 --- a/apps/nixie/nixie.app.js +++ b/apps/nixie/nixie.app.js @@ -1,50 +1,47 @@ +const EMULATOR = false; +// which Bangle? +const isB2 = g.getWidth() < 200; + +// global coordinate system +const wX = g.getWidth(); +const wY = g.getHeight(); +const midX = wX/2, midY = wY/2; +// relative positioning: send 0 <= coord < 1 +function relX(x) { return Math.floor(x*wX); } +function relY(y) { return Math.floor(y*wY); } + +// colors +const col_bg = 0; +const col_nm =isB2 ? 1 :"#206040"; +const col_sep = isB2 ? 6 :"#202020"; +const col_off = isB2 ? 1 : "#202020"; +const col_shad1 = isB2 ? 4 :"#FF0000"; +const col_shad2 = isB2 ? 6 :"#FF6000"; +const col_hi =isB2 ? 7 : "#FFC000"; +const col_data = isB2 ? 6 :"#C06000"; + +g.setBgColor(col_bg); g.clear(); +var imgTube = { + width : 64, height : 128, bpp : 2, + buffer : require("heatshrink").decompress(atob("AE9AB7sQD54AOiFQB5tVsgPN0uoBxkByEFB5kGyIPNhVVB5tpLwKAMoJuOgNQggMJgtVDhsVqtEZ5cVrWlEBcFtWq1WlJxUaBwOq1IgJgIdCqoABEBEC1WVBwTkGKgUGFYIOCgIRDC4kaFoVUOQQKCQ4IgCB4YKDCYIgCq2QgEqHwJLIEoOkgFqB4KaIEoNkB4Z7JHQVqquqD5EVDYQPCVRIPE1IPKgsAtJTCAA8GyEBD4TrKqAPOgNRB5sRB5wfPgAPOiA/RP4IPaiD6BB5oCBB5kAdQIPNH5wPCvIPMBgIPMR4QPcL4QPNgIPQvS/MqtAB59+B9cVB91VL91BF91RF79RB4OVD5wPsH59BB51FB5sQB/0AD7xvPV4elD5wPLqIPOgJPeX/6//X8YPMH5wPPL74PfN55PQB6TfPB5afDB51/D57P/Z/7P/B97vOB5kAB58VoAA=")) +}; +var imgTubeBW = { + width : 46, height : 92, bpp : 1, + buffer : require("heatshrink").decompress(atob("AD0EAomAAgcCBQkQEykwAgcP/gFD/wKECok4AgcB4A7DgwQEjAFEsYWExg2DhkgAoVAE4kA8AEDgZqEhw+JgA+DCwIKEhhrJCyJELFqBbQIiByLIk6gWZyC3WOSItWOVq3nCywA=")) +}; + require("Font8x12").add(Graphics); g.setFont("8x12", 1); let interval = null; -let stepCounter = 0; - -let msgs = require("Storage").readJSON('yngv27.msgs.json'); -let alarms = require("Storage").readJSON('yngv27.alarm.json'); let alarming = false; let nightMode = false; -function showMsg(msg) { - alarming = true; - g.setFontAlign(0,-1); - g.setColor(1,1,1); - g.drawString("<< ALARM >>", 120, 180, true); - g.drawString(msg, 120, 200, true); - Bangle.buzz(); - setTimeout(Bangle.buzz, 800); - setTimeout(Bangle.buzz, 1600); - setTimeout(Bangle.buzz, 2400); - setTimeout(Bangle.buzz, 3200); -} - -function checkMsgs() { - for(let idx=0; idx < alarms.length; idx++) { - let tdiff = Date.now() - Date.parse(alarms[idx].time); - // 10 sec margin of error - if(tdiff > 0 && tdiff < 10000) { - showMsg(alarms[idx].msg); - } - } -} - -for(let idx=0; idx < alarms.length; idx++) { - let tdiff = Date.parse(alarms[idx].time) - Date.now(); - let msg = alarms[idx].msg; - if(tdiff > 0) { - /*console.log(`will alarm ${msg} in ${tdiff}`);*/ - setTimeout(checkMsgs, tdiff); - } -} - -let xs = 0.5; -let ys = 0.75; +// our scale factor +let xs = 0.5 * wX/240; +let ys = 0.75 * wY/240; let prevH1 = -1; let prevH2 = -1; @@ -52,7 +49,7 @@ let prevM1 = -1; let prevM2 = -1; -let points0 = [ +let points0 = new Uint8Array([ 0, 40, 1, 35, 7, 20, @@ -79,11 +76,11 @@ let points0 = [ 1, 64, 0, 59, 0, 40 -]; +]); -let points1 = [ 40, 99, 40, 0]; +let points1 = new Uint8Array([ 40, 99, 40, 0]); -let points2 = [ 0, 25, +let points2 = new Uint8Array([ 0, 25, 2, 22, 6, 13, 17, 5, @@ -103,11 +100,11 @@ let points2 = [ 0, 25, 8, 80, 0, 99, 79, 99 - ]; + ]); -let points4 = [ 60, 99, 60, 0, 0, 75, 79, 75 ]; +let points4 = new Uint8Array([ 60, 99, 60, 0, 0, 75, 79, 75 ]); -let points8 = [ +let points8 = new Uint8Array([ 40, 40, 26, 42, 15, 46, @@ -148,9 +145,9 @@ let points8 = [ 18, 34, 28, 39, 40, 40, - ]; + ]); -let points6 = [ +let points6 = new Uint8Array([ 50, 0, 4, 56, 1, 66, @@ -171,9 +168,9 @@ let points6 = [ 26, 42, 15, 46, 4, 56, - ]; + ]); -let points3 = [ +let points3 = new Uint8Array([ 1, 77, 6, 87, 17, 94, @@ -190,12 +187,12 @@ let points3 = [ 39, 40, 79, 0, 1, 0 - ]; + ]); -let points7 = [ 0, 0, 79, 0, 30, 99 ]; +let points7 = new Uint8Array([ 0, 0, 79, 0, 30, 99 ]); -let points9 = []; -let points5 = [ +let points9 = new Uint8Array(points6.length); +let points5 = new Uint8Array([ 1, 77, 6, 87, 17, 94, @@ -215,7 +212,7 @@ let points5 = [ 15, 46, 27, 0, 79, 0, - ]; +]); function drawPoints(points, x0, y0) { let x = points[0]*xs+x0, y = points[1]*ys+y0; @@ -245,8 +242,8 @@ for (let idx=0; idx*2 < points6.length; idx++) { pointsArray = [points0, points1, points2, points3, points4, points5, points6, points7, points8, points9]; function eraseDigit(d, x, y) { - if(d < 0) return; - g.setColor("#000000"); + if(d < 0 || d > 9) return; + g.setColor(col_bg); if(nightMode) { drawPoints(pointsArray[d], x, y); return; @@ -263,84 +260,101 @@ function eraseDigit(d, x, y) { function drawDigit(d, x, y) { if(nightMode) { - g.setColor("#206040"); + g.setColor(col_nm); drawPoints(pointsArray[d], x, y); return; } - g.setColor("#202020"); + g.setColor(col_off); for (let idx = pointsArray.length - 1; idx >= 0 ; idx--) { if(idx == d) { - g.setColor("#FF0000"); + g.setColor(col_shad1); drawPoints(pointsArray[d], x-2, y-2); drawPoints(pointsArray[d], x+2, y-2); drawPoints(pointsArray[d], x-2, y+2); drawPoints(pointsArray[d], x+2, y+2); - g.setColor("#FF6000"); + g.setColor(col_shad2); drawPoints(pointsArray[d], x-1, y-1); drawPoints(pointsArray[d], x+1, y-1); drawPoints(pointsArray[d], x-1, y+1); drawPoints(pointsArray[d], x+1, y+1); - g.setColor("#FFC000"); + g.setColor(col_hi); drawPoints(pointsArray[d], x, y); - g.setColor("#202020"); + g.setColor(col_off); } else { drawPoints(pointsArray[idx], x, y); } } } -function drawTime() { - const mstr="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"; +function drawBkgd(nm) { + g.clear(); + prevH1=-1;prevH2=-1;prevM1=-1;prevM2=-1; + if(nm) return; + + if(!isB2) { + // tube images + g.setColor(col_shad2); - let d = new Date(); - let hour = d.getHours(); - let minute = d.getMinutes(); - let month = d.getMonth(); - let date = d.getDate(); + [relX(0),relX(0.25),relX(0.5),relX(0.75)].forEach((v,i,a) => { + g.drawImage(imgTube,v,relY(0.225)); + }); + // something to sit on + g.setColor(col_shad2); + g.fillRect(0, relY(0.76),wX,relY(0.76)); + } else { + // simple tubes + [1,45,89,133].forEach((v,i,a) => { + g.setColor(col_shad1); + g.drawEllipse(v, 52, v+41, 90); + g.drawRect(v,66,v+41,125); + g.clearRect(v+1,66,v+40,124); + }); + } + g.setColor(col_shad2); + g.moveTo(relX(0.125), 0); + g.lineTo(relX(0.25), relY(0.125)); + g.lineTo(relX(0.75), relY(0.125)); + g.lineTo(relX(0.875),0); + + g.moveTo(relX(0.125), wY); + g.lineTo(relX(0.25), relY(0.875)); + g.lineTo(relX(0.75), relY(0.875)); + g.lineTo(relX(0.875), wY); - let h1 = Math.floor(hour / 10); - let h2 = hour % 10; - let m1 = Math.floor(minute / 10); - let m2 = minute % 10; +} + +function drawTime(d,nm) { + const dx = [relX(0.042), relX(0.29), relX(0.55), relX(0.791)]; //[ 10, 65, 135, 190]; + const dy = [relY(0.38),relY(0.38),relY(0.38),relY(0.38)]; + + let h1 = Math.floor(d.hour / 10); + let h2 = d.hour % 10; + let m1 = Math.floor(d.min / 10); + let m2 = d.min % 10; if(h1 == prevH1 && h2 == prevH2 && m1 == prevM1 && m2 == prevM2) { return; } + nightMode = nm; if(h1 != prevH1) { - eraseDigit(prevH1, 10, 80); - drawDigit(h1, 10, 80); + eraseDigit(prevH1, dx[0], dy[0]); + drawDigit(h1, dx[0], dy[0]); } if(h2 != prevH2) { - eraseDigit(prevH2, 65, 80); - drawDigit(h2, 65, 80); + eraseDigit(prevH2, dx[1], dy[1]); + drawDigit(h2, dx[1], dy[1]); } if(m1 != prevM1) { - eraseDigit(prevM1, 135, 80); - drawDigit(m1, 135, 80); + eraseDigit(prevM1, dx[2], dy[2]); + drawDigit(m1, dx[2], dy[2]); } if(m2 != prevM2) { - eraseDigit(prevM2, 190, 80); - drawDigit(m2, 190, 80); + eraseDigit(prevM2, dx[3], dy[3]); + drawDigit(m2, dx[3], dy[3]); } - if(!nightMode) { - g.setColor("#000000"); - g.fillRect(0, 10, 240, 24); - g.fillRect(0, 222, 240, 240); - g.setColor("#202020"); - g.drawLine(0, 24, 239, 24); - g.drawLine(0, 226, 239, 226); - g.setColor("#C06000"); - g.setFontAlign(0, -1); - g.drawString(mstr.slice(month*3,month*3+3) + " " + date, 120, 10); - g.setFontAlign(-1,-1); - g.drawString("STEP " + stepCounter, 0, 230); - g.setFontAlign(1,-1); - g.drawString("BTY "+E.getBattery(), 240, 230); - } - prevH1 = h1; prevH2 = h2; prevM1 = m1; @@ -348,56 +362,68 @@ function drawTime() { } -function btn1Func() { - if(alarming) { - alarming = false; - } else { - nightMode = !nightMode; - g.setRotation(nightMode ? 1 : 0, 0); - } - g.clear(); - prevH1 = -1; - prevH2 = -1; - prevM1 = -1; - prevM2 = -1; - drawTime(); -} - -function stop () { - if (interval) { - clearInterval(interval); +function drawData(d) { + if(!nightMode) { + g.setColor(col_data); + g.setFontAlign(0, -1); + g.drawString(` ${d.dow}, ${d.mon3} ${d.date} `, wX/2, relX(0.042), true); + g.setFontAlign(-1,-1); + g.drawString("STEP ", 0, relY(0.82), true); + g.drawString(`${d.steps} `,0, relY(0.875), true); + g.setFontAlign(1,-1); + g.drawString(" BTY", relX(0.999), relY(0.82), true); + g.drawString(` ${d.batt}`, relX(0.999), relY(0.875), true); + g.setFontAlign(0,-1); + g.setColor(col_shad2); + g.drawString('BANGLE.JS', wX/2, relY(0.925)); } } -function start () { - if (interval) { - clearInterval(interval); - } - interval = setInterval(drawTime, 10000); - drawTime(); +//setWatch(E.showLauncher, BTN1, {repeat:true,edge:"falling"}); +if(EMULATOR) { + let d = new Date(); + + let hour = d.getHours(); + let minute = d.getMinutes(); + + let h1 = Math.floor(hour / 10); + let h2 = hour % 10; + let m1 = Math.floor(minute / 10); + let m2 = minute % 10; + + let data = { + h1: h1, + h2: h2, + m1: m1, + m2: m2, + hour: hour, + min: minute, + }; + + drawBkgd(nightMode); + + drawTime(data, nightMode); + const mstr="JanFebMarAprMayJunJulAugSepOctNovDec"; + const dowstr = "SunMonTueWedThuFriSat"; + + let month = d.getMonth(); + let dow = d.getDay(); + data.month = month; + data.date = d.getDate(); + + data.mon3 = mstr.slice(month*3,month*3+3); + data.dow = dowstr.substr(dow*3,3); + data.dateStr = data.dow + " " + data.mon3 + " " + data.date; + data.steps = 12345; + data.batt = E.getBattery() + (Bangle.isCharging() ? "+" : ""); + data.charging = Bangle.isCharging(); + + drawData(data); +} else { + Bangle.setUI("clock"); + let v = require("m_vatch.js"); + v.setDrawTime(drawTime); + v.setDrawBackground(drawBkgd); + v.setDrawData(drawData); + v.begin(); } - -start(); - - -Bangle.on('lcdPower', function (on) { - if (on) { - start(); - } else { - stop(); - } -}); - - -function btn3Func() { - showMsg("This is a test message"); -} - -// Show launcher when middle button pressed -setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); -// redraw -setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); -setWatch(btn3Func, BTN3, {repeat:true,edge:"falling"}); -Bangle.on('step', function(cnt) { - stepCounter = cnt / 10; -}); From 9d912be5b6623d9bb5a715dc1b73869dae71fc09 Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:38:52 -0400 Subject: [PATCH 30/40] Update nixie.info --- apps/nixie/nixie.info | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/nixie/nixie.info b/apps/nixie/nixie.info index d9ac5129b..66f5ff2a5 100644 --- a/apps/nixie/nixie.info +++ b/apps/nixie/nixie.info @@ -1 +1,10 @@ -{"id":"jvNixie","name":"Nixie Clock","type":"clock","src":"nixie.app.js","sortorder":-1,"version":"0.1","files":"nixie.info,nixie.app.js"} +{ +"id":"jvNixie", +"name":"Nixie Clock", +"type":"clock", +"src":"nixie.app.js", +"icon": "nixie.img", +"sortorder":1, +"version":"1.1", +"files":"nixie.info,nixie.app.js,nixie.img, m_vatch.js" +} From 8bbfabfb77ace876d27deee1d393a6d5a982891f Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:39:24 -0400 Subject: [PATCH 31/40] Create m_vatch.js The watch engine, step manager --- apps/nixie/m_vatch.js | 317 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 apps/nixie/m_vatch.js diff --git a/apps/nixie/m_vatch.js b/apps/nixie/m_vatch.js new file mode 100644 index 000000000..430892424 --- /dev/null +++ b/apps/nixie/m_vatch.js @@ -0,0 +1,317 @@ +const _Storage = require('Storage'); + +let interval = null; + +let nightMode = false; + +let stepFile = 'v.steps.json'; +let stepArchiveFile = 'v.stephist.json'; + +let _Options = {}; +let optsFile = 'm_vatch.opts.json'; + +let _Alarm = { + inAlarm: false, + reload: () => {}, + scheduleAlarms: () => {}, + showMsg: (title, msg) => {}, + showNotes: () => {}, +}; + +let _StepData = {}; + +const pad0 = (n) => (n > 9) ? n : ("0"+n); + +const getToday = () => { + let d = new Date(); + return d.getFullYear()+'-'+ pad0(d.getMonth()+1) + '-' + pad0(d.getDate()); +}; + +function reload() { + _StepData = _Storage.readJSON(stepFile); + if(!_StepData) { + _StepData = { + lastDate: '2020-01-01', + stepCache: 0, + lastStepCount: 0, + updated: true, + }; + } + if(getToday() === _StepData.lastDate) { + _StepData.stepCache += _StepData.lastStepCount; + _StepData.lastStepCount = 0; + } +} + +function stringFromArray(data) +{ + var count = data.length; + var str = ""; + + for(var index = 0; index < count; index += 1) + str += String.fromCharCode(data[index]); + + return str; +} + +function logD(str) { + if(_Options.debug) console.log(str); +} + + +let lastH1 = -1; +let lastH2 = -1; +let lastM1 = -1; +let lastM2 = -1; + + +let drawBackground = () => {}; +let drawTime = () => {}; +let drawData = () => {}; + + +function timeCheck() { + + if(_Alarm.inAlarm) return; + + logD('Again, ' + JSON.stringify(_Options)); + logD('opt.nm = '+_Options.autoNightMode); + if(_Options.autoNightMode) { + // this may vary by Bangle.. adjust to taste + let a = Bangle.getAccel(); + a.x = Math.floor(a.x * 100); + logD('a.x = ' + a.x); + if(a.x <= 101 && a.x >= 99) { + if(!nightMode) { + nightMode = ! nightMode; + redrawScreen(); + } + } else { + if(nightMode) { + nightMode = ! nightMode; + redrawScreen(); + } + } + } + + let d = new Date(); + + let hour = d.getHours(); + let minute = d.getMinutes(); + + let h1 = Math.floor(hour / 10); + let h2 = hour % 10; + let m1 = Math.floor(minute / 10); + let m2 = minute % 10; + + logD("lastH1 = "+lastH1+": lastM2 = "+lastM2); + if(h1 == lastH1 && h2 == lastH2 && m1 == lastM1 && m2 == lastM2) { + return; + } + + logD("drawing time"); + let data = { + h1: h1, + h2: h2, + m1: m1, + m2: m2, + hour: hour, + min: minute, + }; + drawTime(data, nightMode); + + lastH1 = h1; + lastH2 = h2; + lastM1 = m1; + lastM2 = m2; + + if(!nightMode && !_Alarm.inAlarm) { + logD("drawing data..."); + const mstr="JanFebMarAprMayJunJulAugSepOctNovDec"; + const dowstr = "SunMonTueWedThuFriSat"; + + let month = d.getMonth(); + let dow = d.getDay(); + data.month = month; + data.date = d.getDate(); + + data.mon3 = mstr.slice(month*3,month*3+3); + data.dow = dowstr.substr(dow*3,3); + data.dateStr = data.dow + " " + data.mon3 + " " + data.date; + data.steps = _StepData.stepCache + _StepData.lastStepCount; + data.batt = E.getBattery() + (Bangle.isCharging() ? "+" : ""); + data.charging = Bangle.isCharging(); + + drawData(data); + } + + if(_StepData.updated) { + _Storage.writeJSON(stepFile, _StepData); + logD(JSON.stringify(_StepData)); + _StepData.updated = false; + } +} + +function stop () { + if (interval) { + clearInterval(interval); + } +} + +function start () { + if (interval) { + clearInterval(interval); + } + // first time init + interval = setInterval(timeCheck, 1000); + timeCheck(); +} + + +function btn1Func() { + logD("btn1Func"); + + if(_Alarm.inAlarm ) { + _Alarm.inAlarm = false; + } else { + if( ! _Options.autoNightMode) { + nightMode = ! nightMode; + logD('nm is '+nightMode); + } + } + redrawScreen(); +} + +function redrawScreen() { + logD("redrawScreen"); + + if(nightMode) { + g.setRotation(1,0); + } else { + g.setRotation(0,0); + } + lastM1 = -1; + lastM2 = -1; + lastH1 = -1; + lastH2 = -1; + drawBackground(nightMode); + timeCheck(); +} + +function btn2Func() { + _Alarm.reload(); + _Alarm.scheduleAlarms(); + _Alarm.showNotes(); +} + +Bangle.on('step', function(cnt) { + if(!_StepData.lastDate) return; + if(_StepData.lastDate !== getToday()) { + // save previous day's step count + try { + let sf = _Storage.readJSON(stepArchiveFile); + if(!sf) sf = []; + logD('sf is '+ (typeof sf) +':'+sf); + // trim to 30 + if(sf.length >= 30 ) sf.shift(); + let steps = _StepData.stepCache +_StepData.lastStepCount; + let sd = `${_StepData.lastDate},${steps}`; + sf.push(sd); + _Storage.writeJSON(stepArchiveFile, sf); + } catch (err) { + _Storage.write('err.txt',err); + } + /* individual step files by date + _Storage.write(_StepData.lastDate +'.steps', JSON.stringify( + _StepData.stepCache +_StepData.lastStepCount + )); + */ + _StepData.stepCache = 0 - cnt; + _StepData.lastDate = getToday(); + } + _StepData.lastStepCount = cnt; + _StepData.updated = true; +}); + +/* +** Advertise a writeable characteristic. Accepts text (in 20 char +** chunks) terminated with __EOM__ by itself. If there's text, show +** it (as an alarm), otherwise reload the alarm & msg files (empty +** string signals another BLE process updated those files) +*/ +/* +var BLEMessage = ""; +NRF.setServices({ + "feb10001-f00d-ea75-7192-abbadabadebb": { + "feb10002-f00d-ea75-7192-abbadabadebb": { + value : [0], + maxLen : 20, + writable : true, + onWrite : function(evt) { + let str = stringFromArray(evt.data); + if(str === "__EOM__") { + if(BLEMessage) { + showMsg('Message',BLEMessage); + } else { + reload(); + scheduleAlarms(); + showMsg('', 'Reloading...'); + } + BLEMessage = ''; + } else { + BLEMessage += str; + } + } + } + } +}, { }); +*/ + +exports.setDrawBackground = function(dBkgd) { + drawBackground = dBkgd; +}; +exports.setDrawTime = function(dTime) { + drawTime = dTime; +}; +exports.setDrawData = function( dData) { + drawData = dData; +}; +exports.begin = function() { + _Options = _Storage.readJSON(optsFile); + if(!_Options) _Options = { + autoNightMode: true, + useAlarms: false, + stepManager: true, + debug: true, + }; + + console.log(JSON.stringify(_Options)); + + if(_Options.useAlarms) { + _Alarm = require('m_alarms'); + _Alarm.reload(); + _Alarm.scheduleAlarms(); + } + // separate the Bangles now + const isB2 = g.getWidth() < 200; + + if(!isB2) { + Bangle.on('lcdPower', function (on) { + if (on) { + start(); + } else { + stop(); + } + }); + setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); + + if(_Options.useAlarms) { + setWatch(btn2Func, BTN2, {repeat:true,edge:"falling"}); + } + setWatch(Bangle.showLauncher, BTN3, {repeat:false,edge:"falling"}); + } + reload(); + drawBackground(nightMode); + start(); +}; + From d50d8c296b492c0600c2ce0a72cc1267094917d0 Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:40:06 -0400 Subject: [PATCH 32/40] Add files via upload for the launcher --- apps/nixie/nixie.png | Bin 0 -> 401 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/nixie/nixie.png diff --git a/apps/nixie/nixie.png b/apps/nixie/nixie.png new file mode 100644 index 0000000000000000000000000000000000000000..d21714191843d684e332a135789fde57d5f1e173 GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)I7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O=*!;1lA?$jGSA$>t}_7OpOoAj*XtIhfUbd z1Ta2{0qS80Pt>pmQk(@Ik;M!Qe1}1p@p%4<6rkWMPZ!4!i_^&xtjsJDtP&CyR#Dbc zk`hW*HdZnXPD}}$(^wtetWfzlq0#YZfZ;YqjS@kniww(l$Q+nr=8?j*sm1)r9d8Gx zCsI$U%(mdD7Z>bgvAL#cv$b%_q+PMsvS35SI) mt~t=a$0Ff&P=SSqhv8p=?&)(Pb4`K1X7F_Nb6Mw<&;$S@*?AEF literal 0 HcmV?d00001 From 97938355be5cfbc8aea885f8732f6941e4f6255f Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:42:28 -0400 Subject: [PATCH 33/40] Update README.md --- apps/nixie/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/nixie/README.md b/apps/nixie/README.md index 7280800e9..17a49ebad 100644 --- a/apps/nixie/README.md +++ b/apps/nixie/README.md @@ -1,6 +1,7 @@ -Nixie clock +## Nixie clock -This clock displays the time in nixie-inspired numerals. +This clock displays the time in nixie-inspired numerals and works on both Bangle versions (1 and 2). It uses a generic +coordinate system (0 <= width < 1) and has helper functions to use inline. The app makes use of a module called "m_vatch" which manages all the timers, and makes calls to functions in the 'main' file to manage drawing the background, time, and any data like sensor info, step counters, battery, etc. The idea is that it is From 5001e793bc98a9c4bcbd986ce555fb715d6d3222 Mon Sep 17 00:00:00 2001 From: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue, 24 Aug 2021 09:35:36 -0700 Subject: [PATCH 34/40] Update README.md Made the image into text. --- apps/carcrazy/README.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/apps/carcrazy/README.md b/apps/carcrazy/README.md index 6eef6f8c7..25fa23b25 100644 --- a/apps/carcrazy/README.md +++ b/apps/carcrazy/README.md @@ -1,3 +1,18 @@ -![Screenshot 2021-08-23 100720](https://user-images.githubusercontent.com/89286474/130498574-0b5246cb-8553-455c-b6c0-096e5ca1644c.png) +# Car Crazy +Car crazy is a fun game where you tilt your wrist left and right to avoid incoming cars. If you get hit by a car you lose a heart. In the game you have three hearts, if you get hit 3 times you are sent to the game over screen. Your goal is to try to last as long as you can. Because this game is still in beta please report any bugs here: https://forms.office.com/r/HnwYzG9Sk7. -Form Link: https://forms.office.com/r/HnwYzG9Sk7 +### Images: +(Coming Soon) + +### Instructions: + +BNT2: Hold down this button to start the game if you are on the starting page and game over page. + +Tilting Left-Right: Tilt your wrist left and right to steer your car and try not to get hit by the enemy car. + +### Feautures Coming Soon: +0.02: Levels are creating making the game get harder as it goes along. + +0.03: Optional soundtrack in settings. More levels. + +0.04: With higher scores you can now unlock different colors of cars. From 56269a668b71db80c4360489b69c7bc006cea11d Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Tue, 24 Aug 2021 14:15:04 -0400 Subject: [PATCH 35/40] Delete app.js old app --- apps/g26/app.js | 336 ------------------------------------------------ 1 file changed, 336 deletions(-) delete mode 100644 apps/g26/app.js diff --git a/apps/g26/app.js b/apps/g26/app.js deleted file mode 100644 index b96422f4c..000000000 --- a/apps/g26/app.js +++ /dev/null @@ -1,336 +0,0 @@ -g.clear(); - -require("FontHaxorNarrow7x17").add(Graphics); -g.setFont("HaxorNarrow7x17", 1); // bitmap font, 8x magnified - -g.setFontAlign(0,0); // center font - -let interval = null; -let stepCounter = 0; - -let fgColor = "#FFFFFF"; -let bgColor = "#000000"; - -let fillDigits = true; -let myHeartRate = 123; -let hrmPower = false; - -const startX = [ 24, 90, 24, 90 ]; -const startY = [ 14, 14, 120, 120 ]; - -const hht = 60; -const vht = 40; -const w = 60; -const h = 90; - -let lastHour = 99; -let lastMinute = 99; - - -function pad0(n) { - return (n > 9) ? n : ("0"+n); -} - -function setFG() { - g.setColor(fgColor); -} - -function setBG() { - g.setColor(bgColor); -} - -function ellipse(x1, y1, x2, y2, fill) { - if (fill) g.fillEllipse(x1, y1, x2, y2); - else g.drawEllipse(x1, y1, x2, y2); -} - -function poly(arr, fill) { - if (fill) g.fillPoly(arr, true); - else g.drawPoly(arr, true); -} - -function rect(x1, y1, x2, y2, fill) { - if (fill) g.fillRect(x1, y1, x2, y2); - else g.drawRect(x1, y1, x2, y2); -} - -setBG(); -rect(0, 0, 240, 240, true); - - -/** DIGITS **/ - -/* zero */ -function draw0(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+w, yOrig+h, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+15, yOrig+15, xOrig+w-15, yOrig+h-15, fillDigits); -} - -/* one */ -function draw1(xOrig, yOrig) { - setFG(); - poly([xOrig+w/2-6, yOrig, - xOrig+w/2-12, yOrig, - xOrig+w/2-20, yOrig+12, - xOrig+w/2-6, yOrig+12 - ], fillDigits); - rect(xOrig+w/2-6, yOrig, xOrig+w/2+6, yOrig+h-3, fillDigits); - -} - -/* two */ -function draw2(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); - - setBG(); - rect(xOrig, yOrig+27, xOrig+40, yOrig+61, true); - - setFG(); - poly([xOrig, yOrig+88, - xOrig+56, yOrig+88, - xOrig+56, yOrig+75, - xOrig+25, yOrig+75, - xOrig+46, yOrig+50, - xOrig+42, yOrig+36 - ], fillDigits); -} - -/* three */ -function draw8(xOrig, yOrig) { - setFG(); - ellipse(xOrig+3, yOrig, xOrig+53, yOrig+48, fillDigits); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+17, yOrig+13, xOrig+40, yOrig+35, fillDigits); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); -} - -function draw3(xOrig, yOrig) { - draw8(xOrig, yOrig); - setBG(); - rect(xOrig, yOrig+24, xOrig+24, yOrig+61, true); -} - -/* four */ -function draw4(xOrig, yOrig) { - setFG(); - rect(xOrig+8, yOrig+54, xOrig+w-4, yOrig+67, fillDigits); - rect(xOrig+36, yOrig+12, xOrig+49, yOrig+88, fillDigits); - poly([xOrig, yOrig+67, - xOrig+12, yOrig+67, - xOrig+49, yOrig+12, - xOrig+49, yOrig+1, - xOrig+42, yOrig+1 - ], fillDigits); -} - -function draw5(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); - - setBG(); - rect(xOrig, yOrig+24, xOrig+20, yOrig+61, true); - - setFG(); - poly([xOrig+20, yOrig+1, - xOrig+7, yOrig+47, - xOrig+19, yOrig+47, - xOrig+32, yOrig+1 - ], fillDigits); - rect(xOrig+20, yOrig+1, xOrig+53, yOrig+13, fillDigits); -} - -/* six */ -function draw6(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig+33, xOrig+56, yOrig+89, fillDigits); - poly([xOrig+2, yOrig+48, - xOrig+34, yOrig, - xOrig+46, yOrig+7, - xOrig+14, yOrig+56 - ], fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+46, xOrig+43, yOrig+76, fillDigits); -} - -/* seven */ -function draw7(xOrig, yOrig) { - setFG(); - poly([xOrig+4, yOrig+1, - xOrig+w-1, yOrig+1, - xOrig+w-7, yOrig+13, - xOrig+4, yOrig+13 - ], fillDigits); - poly([xOrig+w-1, yOrig+1, - xOrig+15, yOrig+88, - xOrig+5, yOrig+81, - xOrig+w-19, yOrig+9 - ], fillDigits); -} - -function draw9(xOrig, yOrig) { - setFG(); - ellipse(xOrig, yOrig, xOrig+56, yOrig+56, fillDigits); - poly([xOrig+54, yOrig+41, - xOrig+22, yOrig+89, - xOrig+10, yOrig+82, - xOrig+42, yOrig+33 - ], fillDigits); - if(fillDigits) setBG(); - ellipse(xOrig+13, yOrig+13, xOrig+43, yOrig+43, fillDigits); -} - -/** END DIGITS **/ -function getRandomColor() { - const digits = "0123456789ABCDEF"; - let r1 = digits[Math.floor(Math.random() * 16)]; - let r2 = digits[Math.floor(Math.random() * 16)]; - let g1 = digits[Math.floor(Math.random() * 16)]; - let g2 = digits[Math.floor(Math.random() * 16)]; - let b1 = digits[Math.floor(Math.random() * 16)]; - let b2 = digits[Math.floor(Math.random() * 16)]; - let str = "#"+r1+r2+g1+g2+b1+b2; - /* console.log(str); */ - return str; -} - -function drawDigit(pos, dig) { - let x = startX[pos]; - let y = startY[pos]; - - setBG(); - rect(x, y, x+w, y+h, true); - switch(dig) { - case 0: - draw0(x, y); - break; - case 1: - draw1(x, y); - break; - case 2: - draw2(x, y); - break; - case 3: - draw3(x, y); - break; - case 4: - draw4(x, y); - break; - case 5: - draw5(x, y); - break; - case 6: - draw6(x, y); - break; - case 7: - draw7(x, y); - break; - case 8: - draw8(x, y); - break; - case 9: - draw9(x, y); - break; - } -} - - -function drawTime() { - let d = new Date(); - let hour = d.getHours(); - let minute = d.getMinutes(); - let month = d.getMonth(); - let date = d.getDate(); - - if(hour == lastHour && minute == lastMinute) { - return; - } - - fgColor = "#FFFFFF"; - if(hour != lastHour) { - drawDigit(0, Math.floor(hour / 10)); - drawDigit(1, hour % 10); - } - - fgColor = "#00FFFF"; - if(minute != lastMinute) { - drawDigit(2, Math.floor(minute / 10)); - drawDigit(3, minute % 10); - } - lastHour = hour; - lastMinute = minute; - - setBG(); - rect(0, 226, 240, 240, true); - for(let c = 0; c <= 240; c++) { - g.setColor(0, 0, 1-c/240); - g.fillRect(180, c, 240, c); - } - g.setColor("#C0C0C0"); - - g.setFontAlign(-1,-1); - g.drawString("DT", 184, 10); - g.drawString("STP", 184, 70); - g.drawString("BPM", 184, 140); - g.drawString("BTY", 184, 210); - - g.setFontAlign(1,-1); - g.drawString(month + "/" + date, 236, 10); - g.drawString(stepCounter, 236, 70); - g.drawString(myHeartRate, 236, 140); - g.drawString(E.getBattery(), 236, 210); - -} - -function stop () { - if (interval) { - clearInterval(interval); - } -} - -function start () { - if (interval) { - clearInterval(interval); - } - // first time init - interval = setInterval(drawTime, 10000); - drawTime(); -} - -start(); - -// Bangle.loadWidgets(); -// Bangle.drawWidgets(); - -Bangle.on('lcdPower', function (on) { - if (on) { - start(); - } else { - stop(); - } -}); - -function btn1Func() { - fillDigits = !fillDigits; - g.clear(); - lastHour = 99; - lastMinute = 99; - drawTime(); -} - -// Show launcher when middle button pressed -setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); - -setWatch(btn1Func, BTN1, {repeat:true,edge:"falling"}); - -Bangle.on('step', function(cnt) { - stepCounter = cnt; -}); - From fa287de2fa829494b3686ea5de02a5106eee0036 Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Tue, 24 Aug 2021 14:15:16 -0400 Subject: [PATCH 36/40] Delete apps.json old app --- apps/g26/apps.json | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 apps/g26/apps.json diff --git a/apps/g26/apps.json b/apps/g26/apps.json deleted file mode 100644 index e037c8f17..000000000 --- a/apps/g26/apps.json +++ /dev/null @@ -1,13 +0,0 @@ -}, -{ "id": "g26", - "name": "G26 Watch", - "shortName":"G26 Watch", - "type": "clock", - "version":"0.01", - "description": "This is a watchface loosely based on a $5 step tracker", - "tags": "", - "storage": [ - {"name":"g26.app.js","url":"g26.js"} - ] -} -] From 921d8703125a6074ff80c69201e9c5748a57922c Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Tue, 24 Aug 2021 14:23:18 -0400 Subject: [PATCH 37/40] Create app-icon.js --- apps/nixie/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/nixie/app-icon.js diff --git a/apps/nixie/app-icon.js b/apps/nixie/app-icon.js new file mode 100644 index 000000000..99de52534 --- /dev/null +++ b/apps/nixie/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkBIf4A/AH4A/AH4AtgtVAANQAwIFCAwYTGBIQDBqsF6AXCqFQroXDBQQXFAxNUBRAQKAAXVAYUEFBY7EBgtVC5UEDotdERwQBC4pGDTgQXJgoRDMoQGCqisFR5pICDQQwDCAxVJZAYXKQo7nEC6AtBCYgXGCYYDCJQYXBF5ThDKwoNCB4UMC4yyBToIGDAYNUDoRiBO5CyBLwi5Ea4RyGAH4A/AH4A/AH4A/ACQ=")) From 642a46e863a9e7b7faed2f8ef24e7e365d19ee3c Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Tue, 24 Aug 2021 14:24:45 -0400 Subject: [PATCH 38/40] Rename nixie.app.js to app.js --- apps/nixie/{nixie.app.js => app.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/nixie/{nixie.app.js => app.js} (100%) diff --git a/apps/nixie/nixie.app.js b/apps/nixie/app.js similarity index 100% rename from apps/nixie/nixie.app.js rename to apps/nixie/app.js From 2f7bdb8805c79d2845c20f381aded9d6eb4445c4 Mon Sep 17 00:00:00 2001 From: JV <61598758+yngv27@users.noreply.github.com> Date: Tue, 24 Aug 2021 14:35:08 -0400 Subject: [PATCH 39/40] Update apps.json added Nixie Clock --- apps.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps.json b/apps.json index 2b28509cf..2320ecd6e 100644 --- a/apps.json +++ b/apps.json @@ -3410,5 +3410,20 @@ {"name":"thermomF.app.js","url":"app.js"}, {"name":"thermomF.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "vNixie", + "name": "Nixie Clock", + "shortName":"Nixie", + "icon": "nixie.png", + "version":"1.0", + "description": "A nixie tube clock for both Bangle 1 and 2.", + "tags": "clock", + "type":"clock", + "readme": "README.md", + "storage": [ + {"name":"nixie.app.js","url":"app.js"}, + {"name":"nixie.img","url":"app-icon.js","evaluate":true}, + {"name":"m_vatch.js","url":"m_vatch.js"} + ] } ] From 409444a85ce9c73ffe69f7cb166d63f4b21643cb Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 25 Aug 2021 08:44:14 +0100 Subject: [PATCH 40/40] tweaks to make Nixie app work --- apps.json | 4 ++-- apps/nixie/ChangeLog | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 apps/nixie/ChangeLog diff --git a/apps.json b/apps.json index 763cc15e4..08677cd59 100644 --- a/apps.json +++ b/apps.json @@ -3411,11 +3411,11 @@ {"name":"thermomF.img","url":"app-icon.js","evaluate":true} ] }, -{ "id": "vNixie", +{ "id": "nixie", "name": "Nixie Clock", "shortName":"Nixie", "icon": "nixie.png", - "version":"1.0", + "version":"0.01", "description": "A nixie tube clock for both Bangle 1 and 2.", "tags": "clock", "type":"clock", diff --git a/apps/nixie/ChangeLog b/apps/nixie/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/nixie/ChangeLog @@ -0,0 +1 @@ +0.01: New App!