commit
31f715d495
17
apps.json
17
apps.json
|
|
@ -2057,7 +2057,7 @@
|
|||
{ "id": "magnav",
|
||||
"name": "Navigation Compass",
|
||||
"icon": "magnav.png",
|
||||
"version":"0.03",
|
||||
"version":"0.04",
|
||||
"description": "Compass with linear display as for GPSNAV. Has Tilt compensation and remembers calibration.",
|
||||
"readme": "README.md",
|
||||
"tags": "tool,outdoors",
|
||||
|
|
@ -2138,18 +2138,19 @@
|
|||
{ "id": "multiclock",
|
||||
"name": "Multi Clock",
|
||||
"icon": "multiclock.png",
|
||||
"version":"0.06",
|
||||
"description": "Clock with multiple faces - Big, Analogue, Digital, Text.\n Switch between faces with BT1 & BTN3",
|
||||
"version":"0.07",
|
||||
"description": "Clock with multiple faces - Big, Analogue, Digital, Text, Time-Date.\n Switch between faces with BTN1 & BTN3",
|
||||
"readme": "README.md",
|
||||
"tags": "clock",
|
||||
"type":"clock",
|
||||
"allow_emulator":false,
|
||||
"storage": [
|
||||
{"name":"multiclock.app.js","url":"clock.min.js"},
|
||||
{"name":"big.face.js","url":"big.min.js"},
|
||||
{"name":"ana.face.js","url":"ana.min.js"},
|
||||
{"name":"digi.face.js","url":"digi.min.js"},
|
||||
{"name":"txt.face.js","url":"txt.min.js"},
|
||||
{"name":"multiclock.app.js","url":"clock.js"},
|
||||
{"name":"big.face.js","url":"big.js"},
|
||||
{"name":"ana.face.js","url":"ana.js"},
|
||||
{"name":"digi.face.js","url":"digi.js"},
|
||||
{"name":"txt.face.js","url":"txt.js"},
|
||||
{"name":"timdat.face.js","url":"timdat.js"},
|
||||
{"name":"multiclock.img","url":"multiclock-icon.js","evaluate":true}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
0.01: New App!
|
||||
0.02: Course marker
|
||||
0.03: Tilt compensation and calibration
|
||||
0.04: Fix Font size
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
|
||||
const Yoff = 80;
|
||||
var pal2color = new Uint16Array([0x0000,0xffff,0x07ff,0xC618],0,2);
|
||||
var buf = Graphics.createArrayBuffer(240,50,2,{msb:true});
|
||||
var buf = Graphics.createArrayBuffer(240,60,2,{msb:true});
|
||||
Bangle.setLCDTimeout(30);
|
||||
|
||||
function flip(b,y) {
|
||||
g.drawImage({width:240,height:50,bpp:2,buffer:b.buffer, palette:pal2color},0,y);
|
||||
g.drawImage({width:240,height:60,bpp:2,buffer:b.buffer, palette:pal2color},0,y);
|
||||
b.clear();
|
||||
}
|
||||
|
||||
|
|
@ -14,7 +14,7 @@ var brg=null;
|
|||
|
||||
function drawCompass(course) {
|
||||
buf.setColor(1);
|
||||
buf.setFont("Vector",16);
|
||||
buf.setFont("Vector",24);
|
||||
var start = course-90;
|
||||
if (start<0) start+=360;
|
||||
buf.fillRect(28,45,212,49);
|
||||
|
|
@ -89,7 +89,7 @@ function reading() {
|
|||
buf.setFont("6x8",2);
|
||||
buf.setFontAlign(-1,-1);
|
||||
buf.drawString("o",170,0);
|
||||
buf.setFont("Vector",40);
|
||||
buf.setFont("Vector",54);
|
||||
var course = Math.round(heading);
|
||||
var cs = course.toString();
|
||||
cs = course<10?"00"+cs : course<100 ?"0"+cs : cs;
|
||||
|
|
@ -163,7 +163,7 @@ var intervalRef;
|
|||
function startdraw(){
|
||||
g.clear();
|
||||
g.setColor(1,0.5,0.5);
|
||||
g.fillPoly([120,Yoff+50,110,Yoff+70,130,Yoff+70]);
|
||||
g.fillPoly([120,Yoff+60,110,Yoff+80,130,Yoff+80]);
|
||||
g.setColor(1,1,1);
|
||||
Bangle.drawWidgets();
|
||||
candraw = true;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
var Yoff=80,pal2color=new Uint16Array([0,65535,2047,50712],0,2),buf=Graphics.createArrayBuffer(240,50,2,{msb:!0});Bangle.setLCDTimeout(30);function flip(b,c){g.drawImage({width:240,height:50,bpp:2,buffer:b.buffer,palette:pal2color},0,c);b.clear()}var labels="N NE E SE S SW W NW".split(" "),brg=null;
|
||||
function drawCompass(b){buf.setColor(1);buf.setFont("Vector",16);var c=b-90;0>c&&(c+=360);buf.fillRect(28,45,212,49);var a=30,d=15-c%15;15>d?a+=d:d=0;for(var e=d;e<=180-d;e+=15){var f=c+e;0==f%90?(buf.drawString(labels[Math.floor(f/45)%8],a-8,0),buf.fillRect(a-2,25,a+2,45)):0==f%45?(buf.drawString(labels[Math.floor(f/45)%8],a-12,0),buf.fillRect(a-2,30,a+2,45)):0==f%15&&buf.fillRect(a,35,a+1,45);a+=15}brg&&(b=brg-b,180<b&&(b-=360),-180>b&&(b+=360),b+=120,30>b&&(b=14),210<b&&(b=226),buf.setColor(2),
|
||||
var Yoff=80,pal2color=new Uint16Array([0,65535,2047,50712],0,2),buf=Graphics.createArrayBuffer(240,60,2,{msb:!0});Bangle.setLCDTimeout(30);function flip(b,c){g.drawImage({width:240,height:60,bpp:2,buffer:b.buffer,palette:pal2color},0,c);b.clear()}var labels="N NE E SE S SW W NW".split(" "),brg=null;
|
||||
function drawCompass(b){buf.setColor(1);buf.setFont("Vector",24);var c=b-90;0>c&&(c+=360);buf.fillRect(28,45,212,49);var a=30,d=15-c%15;15>d?a+=d:d=0;for(var e=d;e<=180-d;e+=15){var f=c+e;0==f%90?(buf.drawString(labels[Math.floor(f/45)%8],a-8,0),buf.fillRect(a-2,25,a+2,45)):0==f%45?(buf.drawString(labels[Math.floor(f/45)%8],a-12,0),buf.fillRect(a-2,30,a+2,45)):0==f%15&&buf.fillRect(a,35,a+1,45);a+=15}brg&&(b=brg-b,180<b&&(b-=360),-180>b&&(b+=360),b+=120,30>b&&(b=14),210<b&&(b=226),buf.setColor(2),
|
||||
buf.fillCircle(b,40,8));flip(buf,Yoff)}var heading=0;function newHeading(b,c){var a=Math.abs(b-c),d=b>c?1:-1;180<=a&&(a=360-a,d=-d);if(2>a)return c;a=c+d*(1+Math.round(a/5));0>a&&(a+=360);360<a&&(a-=360);return a}var candraw=!1,CALIBDATA=require("Storage").readJSON("magnav.json",1)||null;
|
||||
function tiltfixread(b,c){Date.now();var a=Bangle.getCompass(),d=Bangle.getAccel();a.dx=(a.x-b.x)*c.x;a.dy=(a.y-b.y)*c.y;a.dz=(a.z-b.z)*c.z;var e=Math.atan(-d.x/-d.z),f=Math.cos(e);e=Math.sin(e);d=Math.atan(-d.y/(-d.x*e-d.z*f));var k=Math.sin(d);a=180*Math.atan2(a.dz*e-a.dx*f,a.dy*Math.cos(d)+a.dx*e*k+a.dz*f*k)/Math.PI;0>a&&(a+=360);return a}
|
||||
function reading(){var b=tiltfixread(CALIBDATA.offset,CALIBDATA.scale);heading=newHeading(b,heading);drawCompass(heading);buf.setColor(1);buf.setFont("6x8",2);buf.setFontAlign(-1,-1);buf.drawString("o",170,0);buf.setFont("Vector",40);b=Math.round(heading);var c=b.toString();buf.drawString(10>b?"00"+c:100>b?"0"+c:c,70,10);flip(buf,Yoff+80)}
|
||||
function calibrate(){var b=-32E3,c=-32E3,a=-32E3,d=32E3,e=32E3,f=32E3,k=setInterval(function(){var h=Bangle.getCompass();b=h.x>b?h.x:b;c=h.y>c?h.y:c;a=h.z>a?h.z:a;d=h.x<d?h.x:d;e=h.y<e?h.y:e;f=h.z<f?h.z:f},100);return new Promise(function(h){setTimeout(function(){k&&clearInterval(k);var m=(b-d)/2,n=(c-e)/2,p=(a-f)/2,l=(m+n+p)/3;h({offset:{x:(b+d)/2,y:(c+e)/2,z:(a+f)/2},scale:{x:l/m,y:l/n,z:l/p}})},3E4)})}
|
||||
function docalibrate(b,c){function a(a){a?(buf.setColor(1),buf.setFont("Vector",24),buf.setFontAlign(0,-1),buf.drawString("Fig 8s to",120,0),buf.drawString("Calibrate",120,26),flip(buf,Yoff),calibrate().then(function(a){require("Storage").write("magnav.json",a);CALIBDATA=a;startdraw();setButtons()})):(startdraw(),setTimeout(setButtons,1E3))}void 0===c&&(c=!1);stopdraw();clearWatch();c?E.showAlert("takes 30 seconds","Calibrate").then(a.bind(null,!0)):E.showPrompt("takes 30 seconds",{title:"Calibrate",
|
||||
buttons:{Start:!0,Cancel:!1}}).then(a)}Bangle.on("touch",function(b){candraw&&(1==b&&(brg=heading),2==b&&(brg=null))});var intervalRef;function startdraw(){g.clear();g.setColor(1,.5,.5);g.fillPoly([120,Yoff+50,110,Yoff+70,130,Yoff+70]);g.setColor(1,1,1);Bangle.drawWidgets();candraw=!0;intervalRef=setInterval(reading,200)}function stopdraw(){candraw=!1;intervalRef&&clearInterval(intervalRef)}
|
||||
function reading(){var b=tiltfixread(CALIBDATA.offset,CALIBDATA.scale);heading=newHeading(b,heading);drawCompass(heading);buf.setColor(1);buf.setFont("6x8",2);buf.setFontAlign(-1,-1);buf.drawString("o",170,0);buf.setFont("Vector",54);b=Math.round(heading);var c=b.toString();buf.drawString(10>b?"00"+c:100>b?"0"+c:c,70,10);flip(buf,Yoff+80)}
|
||||
function calibrate(){var b=-32E3,c=-32E3,a=-32E3,d=32E3,e=32E3,f=32E3,k=setInterval(function(){var h=Bangle.getCompass();b=h.x>b?h.x:b;c=h.y>c?h.y:c;a=h.z>a?h.z:a;d=h.x<d?h.x:d;e=h.y<e?h.y:e;f=h.z<f?h.z:f},100);return new Promise(function(h){setTimeout(function(){k&&clearInterval(k);var m=(b-d)/2,n=(c-e)/2,p=(a-f)/2,l=(m+n+p)/3;h({offset:{x:(b+d)/2,y:(c+e)/2,z:(a+f)/2},scale:{x:l/m,y:l/n,z:l/p}})},1E4)})}
|
||||
function docalibrate(b,c){function a(d){d?(buf.setColor(1),buf.setFont("Vector",24),buf.setFontAlign(0,-1),buf.drawString("Fig 8s to",120,0),buf.drawString("Calibrate",120,26),flip(buf,Yoff),calibrate().then(function(e){require("Storage").write("magnav.json",e);CALIBDATA=e;startdraw();setButtons()})):(startdraw(),setTimeout(setButtons,1E3))}void 0===c&&(c=!1);stopdraw();clearWatch();c?E.showAlert("takes 10 seconds","Calibrate").then(a.bind(null,!0)):E.showPrompt("takes 10 seconds",{title:"Calibrate",
|
||||
buttons:{Start:!0,Cancel:!1}}).then(a)}Bangle.on("touch",function(b){candraw&&(1==b&&(brg=heading),2==b&&(brg=null))});var intervalRef;function startdraw(){g.clear();g.setColor(1,.5,.5);g.fillPoly([120,Yoff+60,110,Yoff+80,130,Yoff+80]);g.setColor(1,1,1);Bangle.drawWidgets();candraw=!0;intervalRef=setInterval(reading,200)}function stopdraw(){candraw=!1;intervalRef&&clearInterval(intervalRef)}
|
||||
function setButtons(){setWatch(function(){load()},BTN1,{repeat:!1,edge:"falling"});setWatch(Bangle.showLauncher,BTN2,{repeat:!1,edge:"falling"});setWatch(docalibrate,BTN3,{repeat:!1,edge:"falling"})}var SCREENACCESS={withApp:!0,request:function(){this.withApp=!1;stopdraw();clearWatch()},release:function(){this.withApp=!0;startdraw();setButtons()}};Bangle.on("lcdPower",function(b){SCREENACCESS.withApp&&(b?startdraw():stopdraw())});Bangle.on("kill",function(){Bangle.setCompassPower(0)});Bangle.loadWidgets();
|
||||
Bangle.setCompassPower(1);CALIBDATA?(startdraw(),setButtons()):docalibrate({},!0);
|
||||
Bangle.setCompassPower(1);CALIBDATA?(startdraw(),setButtons()):docalibrate({},!0);
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
|
||||
var buf = Graphics.createArrayBuffer(240,160,1,{msb:true});
|
||||
Bangle.setLCDTimeout(30);
|
||||
|
||||
function flip() {
|
||||
g.drawImage({width:240,height:160,bpp:1,buffer:buf.buffer},0,40);
|
||||
buf.clear();
|
||||
}
|
||||
|
||||
var O = { x: -58, y: -3.5, z: -3.5};
|
||||
var S = { x: 1.01, y:1.05, z: 0.95};
|
||||
|
||||
function calibrate(){
|
||||
var max={x:-32000, y:-32000, z:-32000},
|
||||
min={x:32000, y:32000, z:32000};
|
||||
var mag = require("Storage").open("mags.csv","a");
|
||||
var ref = setInterval(()=>{
|
||||
var m = Bangle.getCompass();
|
||||
if (mag) mag.write(
|
||||
[((m.x-O.x)*S.x).toFixed(2),
|
||||
((m.y-O.y)*S.y).toFixed(2),
|
||||
((m.z-O.z)*S.z).toFixed(2)].join(",")+"\n");
|
||||
max.x = m.x>max.x?m.x:max.x;
|
||||
max.y = m.y>max.y?m.y:max.y;
|
||||
max.z = m.z>max.z?m.z:max.z;
|
||||
min.x = m.x<min.x?m.x:min.x;
|
||||
min.y = m.y<min.y?m.y:min.y;
|
||||
min.z = m.z<min.z?m.z:min.z;
|
||||
}, 100);
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(()=>{
|
||||
if(ref) clearInterval(ref);
|
||||
var offset = {x:(max.x+min.x)/2,y:(max.y+min.y)/2,z:(max.z+min.z)/2};
|
||||
var delta = {x:(max.x-min.x)/2,y:(max.y-min.y)/2,z:(max.z-min.z)/2};
|
||||
var avg = (delta.x+delta.y+delta.z)/3;
|
||||
var scale = {x:avg/delta.x, y:avg/delta.y, z:avg/delta.z};
|
||||
resolve({o:offset,s:scale});
|
||||
},60000);
|
||||
});
|
||||
}
|
||||
|
||||
function reading(){
|
||||
var start = Date.now();
|
||||
var m = Bangle.getCompass();
|
||||
var g = Bangle.getAccel();
|
||||
m.dx =m.x-O.x; m.dy=m.y-O.y; m.dz=m.z-O.z;
|
||||
var d = Math.atan2(-m.dx,m.dy)*180/Math.PI;
|
||||
if (d<0) d+=360;
|
||||
var phi = Math.atan(-g.x/-g.z);
|
||||
var cosphi = Math.cos(phi), sinphi = Math.sin(phi);
|
||||
var theta = Math.atan(-g.y/(-g.x*sinphi-g.z*cosphi));
|
||||
var costheta = Math.cos(theta), sintheta = Math.sin(theta);
|
||||
var xh = m.dy*costheta + m.dx*sinphi*sintheta + m.dz*cosphi*sintheta;
|
||||
var yh = m.dz*sinphi - m.dx*cosphi;
|
||||
var psi = Math.atan2(yh,xh)*180/Math.PI;
|
||||
if (psi<0) psi+=360;
|
||||
// display
|
||||
buf.setFont('6x8',2);
|
||||
buf.drawString("BX: "+m.dy,20,0);buf.drawString("X: "+Math.floor(g.y*1000),120,0);
|
||||
buf.drawString("BY: "+m.dx,20,20);buf.drawString("Y: "+Math.floor(-g.x*1000),120,20);
|
||||
buf.drawString("BZ: "+m.dz,20,40);buf.drawString("Z: "+Math.floor(-g.z*1000),120,40);
|
||||
buf.drawString("HC: "+Math.floor(d),20,60);
|
||||
buf.drawString("Roll: "+Math.floor(phi*180/Math.PI),20,80);
|
||||
buf.drawString("Pitch: "+Math.floor(theta*180/Math.PI),20,100);
|
||||
buf.drawString("TC: "+Math.floor(psi),20,120);
|
||||
var duration = Date.now()-start;
|
||||
buf.drawString("Time: "+Math.floor(duration)+"ms",20,140);
|
||||
flip();
|
||||
}
|
||||
|
||||
Bangle.on('kill',()=>{Bangle.setCompassPower(0);});
|
||||
|
||||
g.clear();
|
||||
g.setColor(1,1,1);
|
||||
Bangle.setCompassPower(1);
|
||||
buf.setFont('6x8',2);
|
||||
buf.drawString("Calibrate",20,40);
|
||||
flip();
|
||||
calibrate().then((f)=>{
|
||||
O=f.o;
|
||||
S=f.s;
|
||||
console.log(O);
|
||||
console.log(S);
|
||||
setInterval(reading,200);
|
||||
});
|
||||
|
|
@ -4,5 +4,7 @@
|
|||
0.04: Bug Fixes
|
||||
0.05: Add README
|
||||
0.06: Add txt clock
|
||||
0.07: Add Time Date clock and fix font sizes
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ This is a clock app that supports multiple clock faces. The user can switch betw
|
|||
### Text Clock Face
|
||||

|
||||
|
||||
### Time and Date Clock Face
|
||||
|
||||
|
||||
## Controls
|
||||
Clock faces are kept in a circular list.
|
||||
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@
|
|||
minutes = time[1];
|
||||
g.clearRect(0,24,239,239);
|
||||
g.setColor(1,1,1);
|
||||
g.setFont("Vector",100);
|
||||
g.setFont("Vector",132);
|
||||
g.drawString(hours,50,24,true);
|
||||
g.drawString(minutes,50,135,true);
|
||||
g.drawString(minutes,50,132,true);
|
||||
}
|
||||
|
||||
function onSecond(){
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
(function(){return function(){function c(a){g.reset();var b=a.toString().split(" ")[4].substr(0,5).split(":");a=b[0];b=b[1];g.clearRect(0,24,239,239);g.setColor(1,1,1);g.setFont("Vector",100);g.drawString(a,50,24,!0);g.drawString(b,50,135,!0)}return{init:function(){c(new Date)},tick:function(){var a=new Date;0===a.getSeconds()&&c(a)}}}})();
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
var FACES=[],iface=0;require("Storage").list(/\.face\.js$/).forEach(function(a){return FACES.push(eval(require("Storage").read(a)))});var face=FACES[iface](),intervalRefSec;function stopdraw(){intervalRefSec&&(intervalRefSec=clearInterval(intervalRefSec))}function startdraw(){g.clear();g.reset();Bangle.drawWidgets();face.init();intervalRefSec=setInterval(face.tick,1E3)}
|
||||
function setButtons(){function a(a){var b=FACES.length-1;iface+=a;iface=iface>b?0:0>iface?b:iface;stopdraw();face=FACES[iface]();startdraw()}setWatch(Bangle.showLauncher,BTN2,{repeat:!1,edge:"falling"});setWatch(a.bind(null,1),BTN1,{repeat:!0,edge:"rising"});setWatch(a.bind(null,-1),BTN3,{repeat:!0,edge:"rising"})}var SCREENACCESS={withApp:!0,request:function(){this.withApp=!1;stopdraw();clearWatch()},release:function(){this.withApp=!0;startdraw();setButtons()}};
|
||||
Bangle.on("lcdPower",function(a){SCREENACCESS.withApp&&(a?startdraw():stopdraw())});g.clear();Bangle.loadWidgets();startdraw();setButtons();
|
||||
|
|
@ -14,7 +14,7 @@ function getFace(){
|
|||
var d = new Date();
|
||||
var da = d.toString().split(" ");
|
||||
var time = da[4];
|
||||
buf.setFont("Vector",42);
|
||||
buf.setFont("Vector",54);
|
||||
buf.setFontAlign(0,-1);
|
||||
buf.drawString(time,buf.getWidth()/2,0);
|
||||
buf.setFont("6x8",2);
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
(function(){return function(){function b(){a.clear();a.setColor(1);var c=new Date,b=c.toString().split(" ")[4];a.setFont("Vector",42);a.setFontAlign(0,-1);a.drawString(b,a.getWidth()/2,0);a.setFont("6x8",2);a.setFontAlign(0,-1);c=c.toString().substr(0,15);a.drawString(c,a.getWidth()/2,70);g.setColor(1,1,1);g.drawImage({width:a.getWidth(),height:a.getHeight(),buffer:a.buffer},0,85)}var a=Graphics.createArrayBuffer(240,92,1,{msb:!0});return{init:b,tick:b}}})();
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
(() => {
|
||||
function getFace(){
|
||||
|
||||
var lastmin=-1;
|
||||
function drawClock(){
|
||||
var d=Date();
|
||||
if (d.getMinutes()==lastmin) return;
|
||||
d=d.toString().split(' ');
|
||||
var min=d[4].substr(3,2);
|
||||
var sec=d[4].substr(-2);
|
||||
var tm=d[4].substring(0,5);
|
||||
var hr=d[4].substr(0,2);
|
||||
lastmin=min;
|
||||
g.reset();
|
||||
g.clearRect(0,24,239,239);
|
||||
var w=g.getWidth();
|
||||
g.setColor(0xffff);
|
||||
g.setFontVector(80);
|
||||
g.drawString(tm,4+(w-g.stringWidth(tm))/2,64);
|
||||
g.setFontVector(36);
|
||||
g.setColor(0x07ff);
|
||||
var dt=d[0]+" "+d[1]+" "+d[2];//+" "+d[3];
|
||||
g.drawString(dt,(w-g.stringWidth(dt))/2,160);
|
||||
g.flip();
|
||||
}
|
||||
|
||||
function drawFirst(){
|
||||
lastmin=-1;
|
||||
drawClock();
|
||||
}
|
||||
|
||||
return {init:drawFirst, tick:drawClock};
|
||||
}
|
||||
|
||||
return getFace;
|
||||
|
||||
})();
|
||||
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
g.clearRect(0,40,239,210);
|
||||
g.setColor(1,1,1);
|
||||
g.setFontAlign(0,0);
|
||||
g.setFont("Vector",32);
|
||||
g.setFont("Vector",44);
|
||||
var txt = convert(d.getHours());
|
||||
g.drawString(txt.top,120,60);
|
||||
g.drawString(txt.bot,120,100);
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
(function(){return function(){function a(b){function a(c){var a=" ;one;two;three;four;five;six;seven;eight;nine".split(";"),b="ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen".split(" "),d=["twenty","thirty","forty","fifty"];return 10>c?{top:" ",bot:a[c]}:20>c?{top:" ",bot:b[c-10]}:60>c?{top:d[Math.floor(c/10)-2],bot:a[c%10]}:"error"}g.reset();g.clearRect(0,40,239,210);g.setColor(1,1,1);g.setFontAlign(0,0);g.setFont("Vector",32);var d=a(b.getHours());g.drawString(d.top,
|
||||
120,60);g.drawString(d.bot,120,100);d=a(b.getMinutes());g.drawString(d.top,120,140);g.drawString(d.bot,120,180)}return{init:function(){a(new Date)},tick:function(){var b=new Date;0===b.getSeconds()&&a(b)}}}})();
|
||||
Loading…
Reference in New Issue