parent
3c7e830e1c
commit
60c3a32494
|
|
@ -0,0 +1,2 @@
|
||||||
|
0.01: New app!
|
||||||
|
0.02: Make Bangle.js 2 compatible
|
||||||
|
|
@ -24,7 +24,7 @@ need to travel in to reach the selected waypoint. The blue text is
|
||||||
the name of the current waypoint. NONE means that there is no
|
the name of the current waypoint. NONE means that there is no
|
||||||
waypoint set and so bearing and distance will remain at 0. To select
|
waypoint set and so bearing and distance will remain at 0. To select
|
||||||
a waypoint, press BTN2 (middle) and wait for the blue text to turn
|
a waypoint, press BTN2 (middle) and wait for the blue text to turn
|
||||||
white. Then use BTN1 and BTN3 to select a waypoint. The waypoint
|
white. Then use BTN1 and BTN3 (swipe up/down on Bangle.js 2) to select a waypoint. The waypoint
|
||||||
choice is fixed by pressing BTN2 again. In the screen shot below a
|
choice is fixed by pressing BTN2 again. In the screen shot below a
|
||||||
waypoint giving the location of Stone Henge has been selected.
|
waypoint giving the location of Stone Henge has been selected.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,25 @@
|
||||||
var pal_by = new Uint16Array([0x0000,0xFFC0],0,1); // black, yellow
|
const scale = g.getWidth()/240;
|
||||||
var pal_bw = new Uint16Array([0x0000,0xffff],0,1); // black, white
|
var pal_by = new Uint16Array([g.getBgColor(),0xFFC0],0,1); // black, yellow
|
||||||
var pal_bb = new Uint16Array([0x0000,0x07ff],0,1); // black, blue
|
var pal_bw = new Uint16Array([g.getBgColor(),g.getColor()],0,1); // black, white
|
||||||
|
var pal_bb = new Uint16Array([g.getBgColor(),0x07ff],0,1); // black, blue
|
||||||
|
|
||||||
// having 3 2 color pallette keeps the memory requirement lower
|
// having 3 2 color pallette keeps the memory requirement lower
|
||||||
var buf1 = Graphics.createArrayBuffer(160,160,1, {msb:true});
|
var buf1 = Graphics.createArrayBuffer(160*scale,160*scale,1, {msb:true});
|
||||||
var buf2 = Graphics.createArrayBuffer(80,40,1, {msb:true});
|
var buf2 = Graphics.createArrayBuffer(g.getWidth()/3,40*scale,1, {msb:true});
|
||||||
var arrow_img = require("heatshrink").decompress(atob("lEowIPMjAEDngEDvwED/4DCgP/wAEBgf/4AEBg//8AEBh//+AEBj///AEBn///gEBv///wmCAAImCAAIoBFggE/AkaaEABo="));
|
var arrow_img = require("heatshrink").decompress(atob("lEowIPMjAEDngEDvwED/4DCgP/wAEBgf/4AEBg//8AEBh//+AEBj///AEBn///gEBv///wmCAAImCAAIoBFggE/AkaaEABo="));
|
||||||
|
|
||||||
function flip1(x,y) {
|
function flip1(x,y) {
|
||||||
g.drawImage({width:160,height:160,bpp:1,buffer:buf1.buffer, palette:pal_by},x,y);
|
g.drawImage({width:160*scale,height:160*scale,bpp:1,buffer:buf1.buffer, palette:pal_by},x,y);
|
||||||
buf1.clear();
|
buf1.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
function flip2_bw(x,y) {
|
function flip2_bw(x,y) {
|
||||||
g.drawImage({width:80,height:40,bpp:1,buffer:buf2.buffer, palette:pal_bw},x,y);
|
g.drawImage({width:g.getWidth()/3,height:40*scale,bpp:1,buffer:buf2.buffer, palette:pal_bw},x,y);
|
||||||
buf2.clear();
|
buf2.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
function flip2_bb(x,y) {
|
function flip2_bb(x,y) {
|
||||||
g.drawImage({width:80,height:40,bpp:1,buffer:buf2.buffer, palette:pal_bb},x,y);
|
g.drawImage({width:g.getWidth()/3,height:40*scale,bpp:1,buffer:buf2.buffer, palette:pal_bb},x,y);
|
||||||
buf2.clear();
|
buf2.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,12 +52,12 @@ function drawCompass(course) {
|
||||||
previous.course = course;
|
previous.course = course;
|
||||||
|
|
||||||
buf1.setColor(1);
|
buf1.setColor(1);
|
||||||
buf1.fillCircle(80,80,79,79);
|
buf1.fillCircle(buf1.getWidth()/2,buf1.getHeight()/2,79*scale);
|
||||||
buf1.setColor(0);
|
buf1.setColor(0);
|
||||||
buf1.fillCircle(80,80,69,69);
|
buf1.fillCircle(buf1.getWidth()/2,buf1.getHeight()/2,69*scale);
|
||||||
buf1.setColor(1);
|
buf1.setColor(1);
|
||||||
buf1.drawImage(arrow_img, 80, 80, {scale:3, rotate:radians(course)} );
|
buf1.drawImage(arrow_img, buf1.getWidth()/2, buf1.getHeight()/2, {scale:3*scale, rotate:radians(course)} );
|
||||||
flip1(40, 30);
|
flip1(40*scale, Bangle.appRect.y+6*scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** COMPASS CODE ***********/
|
/***** COMPASS CODE ***********/
|
||||||
|
|
@ -138,7 +139,7 @@ function distance(a,b){
|
||||||
|
|
||||||
|
|
||||||
function drawN(){
|
function drawN(){
|
||||||
buf2.setFont("Vector",24);
|
buf2.setFont("Vector",24*scale);
|
||||||
var bs = wp_bearing.toString();
|
var bs = wp_bearing.toString();
|
||||||
bs = wp_bearing<10?"00"+bs : wp_bearing<100 ?"0"+bs : bs;
|
bs = wp_bearing<10?"00"+bs : wp_bearing<100 ?"0"+bs : bs;
|
||||||
var dst = loc.distance(dist);
|
var dst = loc.distance(dist);
|
||||||
|
|
@ -147,12 +148,12 @@ function drawN(){
|
||||||
|
|
||||||
// show distance on the left
|
// show distance on the left
|
||||||
if (previous.dst !== dst) {
|
if (previous.dst !== dst) {
|
||||||
previous.dst = dst
|
previous.dst = dst;
|
||||||
buf2.setColor(1);
|
buf2.setColor(1);
|
||||||
buf2.setFontAlign(-1,-1);
|
buf2.setFontAlign(-1,-1);
|
||||||
buf2.setFont("Vector", 20);
|
buf2.setFont("Vector", 20*scale);
|
||||||
buf2.drawString(dst,0,0);
|
buf2.drawString(dst,0,0);
|
||||||
flip2_bw(0, 200);
|
flip2_bw(0, g.getHeight()-40*scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// bearing, place in middle at bottom of compass
|
// bearing, place in middle at bottom of compass
|
||||||
|
|
@ -160,9 +161,9 @@ function drawN(){
|
||||||
previous.bs = bs;
|
previous.bs = bs;
|
||||||
buf2.setColor(1);
|
buf2.setColor(1);
|
||||||
buf2.setFontAlign(0, -1);
|
buf2.setFontAlign(0, -1);
|
||||||
buf2.setFont("Vector",38);
|
buf2.setFont("Vector",38*scale);
|
||||||
buf2.drawString(bs,40,0);
|
buf2.drawString(bs,40*scale,0);
|
||||||
flip2_bw(80, 200);
|
flip2_bw(g.getWidth()/3, g.getHeight()-40*scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// waypoint name on right
|
// waypoint name on right
|
||||||
|
|
@ -170,13 +171,13 @@ function drawN(){
|
||||||
previous.selected = selected;
|
previous.selected = selected;
|
||||||
buf2.setColor(1);
|
buf2.setColor(1);
|
||||||
buf2.setFontAlign(1,-1); // right, bottom
|
buf2.setFontAlign(1,-1); // right, bottom
|
||||||
buf2.setFont("Vector", 20);
|
buf2.setFont("Vector", 20*scale);
|
||||||
buf2.drawString(wp.name, 80, 0);
|
buf2.drawString(wp.name, 80*scale, 0);
|
||||||
|
|
||||||
if (selected)
|
if (selected)
|
||||||
flip2_bw(160, 200);
|
flip2_bw(g.getWidth()/3*2, g.getHeight()-40*scale);
|
||||||
else
|
else
|
||||||
flip2_bb(160, 200);
|
flip2_bb(g.getWidth()/3*2, g.getHeight()-40*scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -229,9 +230,11 @@ function startdraw(){
|
||||||
}
|
}
|
||||||
|
|
||||||
function setButtons(){
|
function setButtons(){
|
||||||
setWatch(nextwp.bind(null,-1), BTN1, {repeat:true,edge:"falling"});
|
Bangle.setUI("updown", d=>{
|
||||||
setWatch(doselect, BTN2, {repeat:true,edge:"falling"});
|
if (d<0) { nextwp(-1); }
|
||||||
setWatch(nextwp.bind(null,1), BTN3, {repeat:true,edge:"falling"});
|
else if (d>0) { nextwp(1); }
|
||||||
|
else { doselect(); }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Bangle.on('lcdPower',function(on) {
|
Bangle.on('lcdPower',function(on) {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"id": "waypointer",
|
"id": "waypointer",
|
||||||
"name": "Way Pointer",
|
"name": "Way Pointer",
|
||||||
"version": "0.01",
|
"version": "0.02",
|
||||||
"description": "Navigate to a waypoint using the GPS for bearing and compass to point way, uses the same waypoint interface as GPS Navigation",
|
"description": "Navigate to a waypoint using the GPS for bearing and compass to point way, uses the same waypoint interface as GPS Navigation",
|
||||||
"icon": "waypointer.png",
|
"icon": "waypointer.png",
|
||||||
"tags": "tool,outdoors,gps",
|
"tags": "tool,outdoors,gps",
|
||||||
"supports": ["BANGLEJS"],
|
"supports": ["BANGLEJS", "BANGLEJS2"],
|
||||||
"readme": "README.md",
|
"readme": "README.md",
|
||||||
"interface": "waypoints.html",
|
"interface": "waypoints.html",
|
||||||
"storage": [
|
"storage": [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue