mirror of https://github.com/espruino/BangleApps
Modified Geissclk for Bangle.js 2
parent
0414dd5515
commit
026778f656
|
@ -2,3 +2,4 @@
|
||||||
0.02: BTN2->launcher, use smaller text to allow "20:00" to fit on screen
|
0.02: BTN2->launcher, use smaller text to allow "20:00" to fit on screen
|
||||||
0.03: Changed setWatch to Bangle.setUI
|
0.03: Changed setWatch to Bangle.setUI
|
||||||
0.04: Tell clock widgets to hide.
|
0.04: Tell clock widgets to hide.
|
||||||
|
0.05: Making geissclock work on Bangle.js 2 (but only animate when unlocked!)
|
|
@ -1,4 +1,7 @@
|
||||||
var W = 79, H = 64;
|
var W = 79, H = 64;
|
||||||
|
// if screen is always on, only animate when unlocked
|
||||||
|
var isScreenAlwaysOn = process.env.BOARD=="BANGLEJS2";
|
||||||
|
|
||||||
/*var compiled = E.compiledC(`
|
/*var compiled = E.compiledC(`
|
||||||
// void transl(int, int, int )
|
// void transl(int, int, int )
|
||||||
int transl(unsigned char *map, unsigned char *imgfrom, unsigned char *imgto) {
|
int transl(unsigned char *map, unsigned char *imgfrom, unsigned char *imgto) {
|
||||||
|
@ -46,6 +49,7 @@ var map = new Uint8Array(W*H);
|
||||||
var pal = new Uint16Array(256);
|
var pal = new Uint16Array(256);
|
||||||
var PALETTES = 3;
|
var PALETTES = 3;
|
||||||
var MAPS = 6;
|
var MAPS = 6;
|
||||||
|
var animInterval;
|
||||||
|
|
||||||
// If we're missing any maps, compute them!
|
// If we're missing any maps, compute them!
|
||||||
(function() {
|
(function() {
|
||||||
|
@ -65,6 +69,8 @@ function randomPalette() {
|
||||||
var n = (0|Math.random()*200000) % PALETTES;
|
var n = (0|Math.random()*200000) % PALETTES;
|
||||||
var p = new Uint8Array(pal.buffer);
|
var p = new Uint8Array(pal.buffer);
|
||||||
p.set(require("Storage").readArrayBuffer("geissclk."+n+".pal"));
|
p.set(require("Storage").readArrayBuffer("geissclk."+n+".pal"));
|
||||||
|
if (!g.theme.dark) // if not dark, invert colors
|
||||||
|
E.mapInPlace(pal,pal,x=>x^0xFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
function randomMap() {
|
function randomMap() {
|
||||||
|
@ -93,7 +99,7 @@ var im = {
|
||||||
};
|
};
|
||||||
var lastSeconds = -1;
|
var lastSeconds = -1;
|
||||||
|
|
||||||
function iterate() { "ram"
|
function iterate(clearBuf) { "ram"
|
||||||
var d = new Date();
|
var d = new Date();
|
||||||
var time = require("locale").time(d,1);
|
var time = require("locale").time(d,1);
|
||||||
var seconds = d.getSeconds().toString().padStart(2,0);
|
var seconds = d.getSeconds().toString().padStart(2,0);
|
||||||
|
@ -108,27 +114,59 @@ function iterate() { "ram"
|
||||||
gfx.buffer = dataa.buffer;
|
gfx.buffer = dataa.buffer;
|
||||||
}
|
}
|
||||||
var x,y,n,t = getTime()/10;
|
var x,y,n,t = getTime()/10;
|
||||||
var amt = 100*Bangle.getAccel().diff;
|
if (clearBuf) {
|
||||||
for (var i=0;i<amt;i++) {
|
gfx.clear();
|
||||||
//x = Math.round((W/2) + 20*Math.sin(t));
|
} else { // do geiss animation
|
||||||
//y = Math.round((H/2) + 20*Math.cos(t));
|
var amt = 100*Bangle.getAccel().diff;
|
||||||
//t += 0.628;
|
for (var i=0;i<amt;i++) {
|
||||||
x = 1+(Math.random()*(W-2))|0;
|
//x = Math.round((W/2) + 20*Math.sin(t));
|
||||||
y = 1+(Math.random()*(H-2))|0;
|
//y = Math.round((H/2) + 20*Math.cos(t));
|
||||||
dataa[x + y*W] = 240;
|
//t += 0.628;
|
||||||
|
x = 1+(Math.random()*(W-2))|0;
|
||||||
|
y = 1+(Math.random()*(H-2))|0;
|
||||||
|
dataa[x + y*W] = 240;
|
||||||
|
}
|
||||||
|
compiled.transl(addrmap, addra, addrb);
|
||||||
}
|
}
|
||||||
compiled.transl(addrmap, addra, addrb);
|
|
||||||
|
|
||||||
|
|
||||||
x = 8;
|
x = 8;
|
||||||
|
|
||||||
gfx.setFont("5x9Numeric7Seg",2);
|
gfx.setFont("5x9Numeric7Seg",2);
|
||||||
gfx.drawString(time, x, 20);
|
gfx.drawString(time, x, 20);
|
||||||
gfx.setFont("5x9Numeric7Seg");
|
if (!clearBuf) { // don't draw seconds if not animating
|
||||||
gfx.drawString(seconds, x+55, 30);
|
gfx.setFont("5x9Numeric7Seg");
|
||||||
|
gfx.drawString(seconds, x+55, 30);
|
||||||
|
}
|
||||||
// firmwares pre-2v09 wouldn't accelerate a 3x blit if it went right to the RHS - hence we're 79px not 80
|
// firmwares pre-2v09 wouldn't accelerate a 3x blit if it went right to the RHS - hence we're 79px not 80
|
||||||
g.drawImage(im,1,24,{scale:3});
|
if (g.getWidth()==176) // Bangle.js 2
|
||||||
|
g.drawImage(im,8,24,{scale:2});
|
||||||
|
else
|
||||||
|
g.drawImage(im,3,24,{scale:3});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isScreenAlwaysOn) {
|
||||||
|
Bangle.on('lock',function(on) {
|
||||||
|
if (animInterval) {
|
||||||
|
clearInterval(animInterval);
|
||||||
|
animInterval = undefined;
|
||||||
|
}
|
||||||
|
if (!on) { // not locked - animate!
|
||||||
|
randomMap();
|
||||||
|
randomPalette();
|
||||||
|
iterate();
|
||||||
|
animInterval = setInterval(iterate, 50);
|
||||||
|
} else {
|
||||||
|
iterate(true); // just clear
|
||||||
|
animInterval = setTimeout(function() {
|
||||||
|
iterate(true);
|
||||||
|
animInterval = setInterval(function() {
|
||||||
|
iterate(true);
|
||||||
|
}, 60000);
|
||||||
|
}, 60000 - (Date.now() % 60000));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Bangle.on('lcdPower',function(on) {
|
Bangle.on('lcdPower',function(on) {
|
||||||
if (animInterval) {
|
if (animInterval) {
|
||||||
|
@ -144,11 +182,15 @@ Bangle.on('lcdPower',function(on) {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Show launcher when button pressed
|
// Show launcher when button pressed
|
||||||
Bangle.setUI("clock");g.clear();
|
Bangle.setUI("clock");
|
||||||
|
g.clear(1);
|
||||||
|
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
iterate();
|
iterate(true);
|
||||||
animInterval = setInterval(iterate, 50);
|
if (Bangle.isLCDOn() && (!isScreenAlwaysOn || !Bangle.isLocked())) {
|
||||||
|
console.log("Starting");
|
||||||
|
animInterval = setInterval(iterate, 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"id": "geissclk",
|
"id": "geissclk",
|
||||||
"name": "Geiss Clock",
|
"name": "Geiss Clock",
|
||||||
"version": "0.04",
|
"version": "0.05",
|
||||||
"description": "7 segment clock with animated background in the style of Ryan Geiss' music visualisation. NOTE: The first run will take ~1 minute to do some precalculation",
|
"description": "7 segment clock with animated background in the style of Ryan Geiss' music visualisation. NOTE: The first run will take ~1 minute to do some precalculation",
|
||||||
"icon": "clock.png",
|
"icon": "clock.png",
|
||||||
"type": "clock",
|
"type": "clock",
|
||||||
"tags": "clock",
|
"tags": "clock",
|
||||||
"supports": ["BANGLEJS"],
|
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"geissclk.app.js","url":"clock.js"},
|
{"name":"geissclk.app.js","url":"clock.js"},
|
||||||
{"name":"geissclk.precompute.js","url":"precompute.js"},
|
{"name":"geissclk.precompute.js","url":"precompute.js"},
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// PALETTES ---------------------------
|
// PALETTES ---------------------------
|
||||||
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n0 / 3");
|
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n0 / 3");
|
||||||
(function() { // fire
|
(function() { "jit" // fire
|
||||||
for (var i=0;i<256;i++) {
|
for (var i=0;i<256;i++) {
|
||||||
var r = Math.min(i*6,240);
|
var r = Math.min(i*6,240);
|
||||||
var g = Math.min(i*3,240);
|
var g = Math.min(i*3,240);
|
||||||
|
@ -10,7 +10,7 @@ E.showMessage("Precomputing\npalettes\n\nPlease wait...\n0 / 3");
|
||||||
})()
|
})()
|
||||||
require("Storage").write("geissclk.0.pal",pal.buffer);
|
require("Storage").write("geissclk.0.pal",pal.buffer);
|
||||||
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n1 / 3");
|
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n1 / 3");
|
||||||
(function() { // gunge
|
(function() { "jit" // gunge
|
||||||
for (var i=0;i<256;i++) {
|
for (var i=0;i<256;i++) {
|
||||||
var r = 0;
|
var r = 0;
|
||||||
var g = Math.min(i*3,255);
|
var g = Math.min(i*3,255);
|
||||||
|
@ -20,7 +20,7 @@ E.showMessage("Precomputing\npalettes\n\nPlease wait...\n1 / 3");
|
||||||
})()
|
})()
|
||||||
require("Storage").write("geissclk.1.pal",pal.buffer);
|
require("Storage").write("geissclk.1.pal",pal.buffer);
|
||||||
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n2 / 3");
|
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n2 / 3");
|
||||||
(function() { // rainbow
|
(function() { "jit" // rainbow
|
||||||
for (var i=0;i<256;i++) {
|
for (var i=0;i<256;i++) {
|
||||||
var cl = E.HSBtoRGB((48+i)/128,1,Math.min(i/16,0.9),true);
|
var cl = E.HSBtoRGB((48+i)/128,1,Math.min(i/16,0.9),true);
|
||||||
var r = cl[0];
|
var r = cl[0];
|
||||||
|
@ -35,7 +35,7 @@ require("Storage").write("geissclk.2.pal",pal.buffer);
|
||||||
// MAPS ----------------------------------------------
|
// MAPS ----------------------------------------------
|
||||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n0 / 5");
|
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n0 / 5");
|
||||||
// straight out
|
// straight out
|
||||||
(function() { "ram"; var n = 0; for (var y=0;y<H;y++) {
|
(function() { "jit"; var n = 0; for (var y=0;y<H;y++) {
|
||||||
for (var x=0;x<W;x++) {
|
for (var x=0;x<W;x++) {
|
||||||
var dx = x-(W/2);
|
var dx = x-(W/2);
|
||||||
var dy = y-(H/2);
|
var dy = y-(H/2);
|
||||||
|
@ -49,7 +49,7 @@ E.showMessage("Precomputing\nmaps\n\nPlease wait...\n0 / 5");
|
||||||
require("Storage").write("geissclk.0.map",map);
|
require("Storage").write("geissclk.0.map",map);
|
||||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n1 / 5");
|
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n1 / 5");
|
||||||
// ripple out
|
// ripple out
|
||||||
(function() { "ram"; var n = 0; for (var y=0;y<H;y++) {
|
(function() { "jit"; var n = 0; for (var y=0;y<H;y++) {
|
||||||
for (var x=0;x<W;x++) {
|
for (var x=0;x<W;x++) {
|
||||||
var dx = x-(W/2);
|
var dx = x-(W/2);
|
||||||
var dy = y-(H/2);
|
var dy = y-(H/2);
|
||||||
|
@ -63,7 +63,7 @@ E.showMessage("Precomputing\nmaps\n\nPlease wait...\n1 / 5");
|
||||||
require("Storage").write("geissclk.1.map",map);
|
require("Storage").write("geissclk.1.map",map);
|
||||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n2 / 5");
|
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n2 / 5");
|
||||||
// twisty outwards
|
// twisty outwards
|
||||||
(function() { "ram"; var n = 0; for (var y=0;y<H;y++) {
|
(function() { "jit"; var n = 0; for (var y=0;y<H;y++) {
|
||||||
for (var x=0;x<W;x++) {
|
for (var x=0;x<W;x++) {
|
||||||
var dx = x-(W/2);
|
var dx = x-(W/2);
|
||||||
var dy = y-(H/2);
|
var dy = y-(H/2);
|
||||||
|
@ -76,7 +76,7 @@ E.showMessage("Precomputing\nmaps\n\nPlease wait...\n2 / 5");
|
||||||
require("Storage").write("geissclk.2.map",map);
|
require("Storage").write("geissclk.2.map",map);
|
||||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n3 / 5");
|
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n3 / 5");
|
||||||
// spiral
|
// spiral
|
||||||
(function() { "ram"; var n = 0; for (var y=0;y<H;y++) {
|
(function() { "jit"; var n = 0; for (var y=0;y<H;y++) {
|
||||||
for (var x=0;x<W;x++) {
|
for (var x=0;x<W;x++) {
|
||||||
var dx = x-(W/2);
|
var dx = x-(W/2);
|
||||||
var dy = y-(H/2);
|
var dy = y-(H/2);
|
||||||
|
@ -89,7 +89,7 @@ E.showMessage("Precomputing\nmaps\n\nPlease wait...\n3 / 5");
|
||||||
require("Storage").write("geissclk.3.map",map);
|
require("Storage").write("geissclk.3.map",map);
|
||||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n4 / 5");
|
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n4 / 5");
|
||||||
// blur down
|
// blur down
|
||||||
(function() { "ram"; var n=0; for (var y=0;y<H;y++) {
|
(function() { "jit"; var n=0; for (var y=0;y<H;y++) {
|
||||||
for (var x=0;x<W;x++) {
|
for (var x=0;x<W;x++) {
|
||||||
map[n++] = 136 - 6*16 + (y&1)*8-4;
|
map[n++] = 136 - 6*16 + (y&1)*8-4;
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ E.showMessage("Precomputing\nmaps\n\nPlease wait...\n4 / 5");
|
||||||
require("Storage").write("geissclk.4.map",map);
|
require("Storage").write("geissclk.4.map",map);
|
||||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n5 / 5");
|
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n5 / 5");
|
||||||
// twisty
|
// twisty
|
||||||
(function() { "ram"; var n=0; for (var y=0;y<H;y++) {
|
(function() { "jit"; var n=0; for (var y=0;y<H;y++) {
|
||||||
for (var x=0;x<W;x++) {
|
for (var x=0;x<W;x++) {
|
||||||
dx = Math.sin(y*0.2);
|
dx = Math.sin(y*0.2);
|
||||||
dy = Math.cos(x*0.2);
|
dy = Math.cos(x*0.2);
|
||||||
|
|
Loading…
Reference in New Issue