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.03: Changed setWatch to Bangle.setUI
|
||||
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;
|
||||
// if screen is always on, only animate when unlocked
|
||||
var isScreenAlwaysOn = process.env.BOARD=="BANGLEJS2";
|
||||
|
||||
/*var compiled = E.compiledC(`
|
||||
// void transl(int, int, int )
|
||||
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 PALETTES = 3;
|
||||
var MAPS = 6;
|
||||
var animInterval;
|
||||
|
||||
// If we're missing any maps, compute them!
|
||||
(function() {
|
||||
|
@ -65,6 +69,8 @@ function randomPalette() {
|
|||
var n = (0|Math.random()*200000) % PALETTES;
|
||||
var p = new Uint8Array(pal.buffer);
|
||||
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() {
|
||||
|
@ -93,7 +99,7 @@ var im = {
|
|||
};
|
||||
var lastSeconds = -1;
|
||||
|
||||
function iterate() { "ram"
|
||||
function iterate(clearBuf) { "ram"
|
||||
var d = new Date();
|
||||
var time = require("locale").time(d,1);
|
||||
var seconds = d.getSeconds().toString().padStart(2,0);
|
||||
|
@ -108,6 +114,9 @@ function iterate() { "ram"
|
|||
gfx.buffer = dataa.buffer;
|
||||
}
|
||||
var x,y,n,t = getTime()/10;
|
||||
if (clearBuf) {
|
||||
gfx.clear();
|
||||
} else { // do geiss animation
|
||||
var amt = 100*Bangle.getAccel().diff;
|
||||
for (var i=0;i<amt;i++) {
|
||||
//x = Math.round((W/2) + 20*Math.sin(t));
|
||||
|
@ -118,17 +127,46 @@ function iterate() { "ram"
|
|||
dataa[x + y*W] = 240;
|
||||
}
|
||||
compiled.transl(addrmap, addra, addrb);
|
||||
}
|
||||
|
||||
|
||||
x = 8;
|
||||
|
||||
gfx.setFont("5x9Numeric7Seg",2);
|
||||
gfx.drawString(time, x, 20);
|
||||
if (!clearBuf) { // don't draw seconds if not animating
|
||||
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
|
||||
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) {
|
||||
if (animInterval) {
|
||||
|
@ -144,11 +182,15 @@ Bangle.on('lcdPower',function(on) {
|
|||
});
|
||||
|
||||
// Show launcher when button pressed
|
||||
Bangle.setUI("clock");g.clear();
|
||||
Bangle.setUI("clock");
|
||||
g.clear(1);
|
||||
|
||||
Bangle.loadWidgets();
|
||||
Bangle.drawWidgets();
|
||||
iterate();
|
||||
animInterval = setInterval(iterate, 50);
|
||||
iterate(true);
|
||||
if (Bangle.isLCDOn() && (!isScreenAlwaysOn || !Bangle.isLocked())) {
|
||||
console.log("Starting");
|
||||
animInterval = setInterval(iterate, 50);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"id": "geissclk",
|
||||
"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",
|
||||
"icon": "clock.png",
|
||||
"type": "clock",
|
||||
"tags": "clock",
|
||||
"supports": ["BANGLEJS"],
|
||||
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||
"storage": [
|
||||
{"name":"geissclk.app.js","url":"clock.js"},
|
||||
{"name":"geissclk.precompute.js","url":"precompute.js"},
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// PALETTES ---------------------------
|
||||
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n0 / 3");
|
||||
(function() { // fire
|
||||
(function() { "jit" // fire
|
||||
for (var i=0;i<256;i++) {
|
||||
var r = Math.min(i*6,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);
|
||||
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n1 / 3");
|
||||
(function() { // gunge
|
||||
(function() { "jit" // gunge
|
||||
for (var i=0;i<256;i++) {
|
||||
var r = 0;
|
||||
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);
|
||||
E.showMessage("Precomputing\npalettes\n\nPlease wait...\n2 / 3");
|
||||
(function() { // rainbow
|
||||
(function() { "jit" // rainbow
|
||||
for (var i=0;i<256;i++) {
|
||||
var cl = E.HSBtoRGB((48+i)/128,1,Math.min(i/16,0.9),true);
|
||||
var r = cl[0];
|
||||
|
@ -35,7 +35,7 @@ require("Storage").write("geissclk.2.pal",pal.buffer);
|
|||
// MAPS ----------------------------------------------
|
||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n0 / 5");
|
||||
// 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++) {
|
||||
var dx = x-(W/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);
|
||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n1 / 5");
|
||||
// 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++) {
|
||||
var dx = x-(W/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);
|
||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n2 / 5");
|
||||
// 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++) {
|
||||
var dx = x-(W/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);
|
||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n3 / 5");
|
||||
// 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++) {
|
||||
var dx = x-(W/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);
|
||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n4 / 5");
|
||||
// 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++) {
|
||||
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);
|
||||
E.showMessage("Precomputing\nmaps\n\nPlease wait...\n5 / 5");
|
||||
// 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++) {
|
||||
dx = Math.sin(y*0.2);
|
||||
dy = Math.cos(x*0.2);
|
||||
|
|
Loading…
Reference in New Issue