Skip to content

Commit 8acb48a

Browse files
committed
trail: Start map draw around current position.
1 parent 401f205 commit 8acb48a

File tree

1 file changed

+96
-32
lines changed

1 file changed

+96
-32
lines changed

apps/trail/trail.app.js

Lines changed: 96 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ function angleDifference(angle1, angle2) {
496496
/* These are initialized by read() function, below */
497497
var start = {}, destination = {}, num = 0, dist = 0;
498498

499-
function read(pp, n) {
499+
function read(pp, n, candy) {
500500
let f = require("Storage").open(n+".st", "r");
501501
let l = f.readLine();
502502
let prev = 0;
@@ -513,23 +513,26 @@ function read(pp, n) {
513513
if (pp.g)
514514
paint(pp, prev, p, 1);
515515
} else {
516-
zoom.geoNew(p, 3000);
516+
if (candy)
517+
zoom.geoNew(p, 3000);
517518
start = p;
519+
if (candy) {
518520
pp.lat = p.lat;
519521
pp.lon = p.lon;
522+
}
520523
/* FIXME: won't init destination */
521-
return;
524+
//return;
522525
}
523526
prev = p;
524527
}
525528
l = f.readLine();
526529
if (!(num % 30)) {
527530
g.clear();
528531
zoom.geoPaint(prev, 0, 2500);
529-
g.drawString(num + "\n" + fmt.fmtDist(dist / 1000), 3, 3);
532+
g.drawString(num + "\n" + fmt.fmtDist(dist / 1000) + "\n" + track_name, 3, 3);
530533
g.flip();
531534
print(num, "points");
532-
if (!(num % 300)) {
535+
if (candy && !(num % 300)) {
533536
zoom.geoNew(prev, 3000);
534537
}
535538
}
@@ -539,8 +542,9 @@ function read(pp, n) {
539542
destination = prev;
540543
}
541544

542-
/* Convert to storagefile, and find out start/stop points (and display some eye-candy) */
543-
function time_read(n) {
545+
/* Find out start/stop points (and display some eye-candy) */
546+
function time_read() {
547+
let n = track_name
544548
ui.drawMsg("Converting");
545549
print("Converting...");
546550
to_storage(n);
@@ -552,7 +556,7 @@ function time_read(n) {
552556
pp.x = 176/2;
553557
pp.y = 176/2;
554558
pp.g = zoom.buf;
555-
read(pp, n);
559+
read(pp, n, 1);
556560
// { rotate: Math.PI / 4 + i/100, scale: 1-i/100 }
557561

558562
let v2 = getTime();
@@ -681,43 +685,59 @@ function step_to(pp, pass_all) {
681685
return quiet;
682686
}
683687

684-
var demo_mode = 0;
688+
var demo_mode = 0, zoom_mode = 0;
685689

686690
function step() {
687691
const fast = 0;
692+
let follow = 0;
693+
switch (ui.display) {
694+
case 0: follow = 1; break;
695+
case 1: break;
696+
case 2: follow = 1; break;
697+
}
698+
688699
let v1 = getTime();
689700
g.reset().clear();
690701

691702
let fix = gps.getGPSFix();
692-
693-
let have_more = load_next();
703+
let have_more = 1;
704+
if (follow)
705+
have_more = load_next();
694706

695707
let pp = fix;
696708
pp.ppm = 0.08 * 3; /* Pixels per meter */
697709
pp.g = g;
698710

699-
if (demo_mode || !fix.fix) {
711+
if (follow && (demo_mode || !fix.fix)) {
700712
let i = 2;
701713
pp.lat = track[i].lat;
702714
pp.lon = track[i].lon;
703715
pp.course = fmt.bearing(track[i], track[i+1]);
704716
}
705717

706-
let quiet = step_to(pp, 1);
707-
if (1) {
718+
let quiet = {};
719+
if (follow)
720+
quiet = step_to(pp, 1);
721+
let zoom_scale = 0;
722+
switch (zoom_mode) {
723+
case 0: zoom_scale = 500; break;
724+
case 1: zoom_scale = 1500; break;
725+
case 2: zoom_scale = 2500; break;
726+
}
727+
switch (ui.display) {
728+
case 0: break;
729+
case 1: break;
730+
case 2:
731+
ui.drawMsg("Stats\n" + fmt.fmtDist(0 / 1000) + "\n" + point_num + "/" + num);
732+
zoom_scale = 0;
733+
break;
734+
}
735+
if (zoom_scale) {
708736
g.setColor(0, 0, 0);
709-
let zoom_scale = 0;
710-
switch (ui.display) {
711-
case 0: zoom_scale = 500; break;
712-
case 1: zoom_scale = 1500; break;
713-
case 2: zoom_scale = 2500; break;
714-
case 3: /* draw some statistics? */ break;
715-
}
716-
if (zoom_scale)
717-
zoom.geoPaint(pp, -pp.course, zoom_scale);
737+
zoom.geoPaint(pp, -pp.course, zoom_scale);
718738
}
719739

720-
{
740+
if (zoom_scale) {
721741
/* Draw arrow representing current position */
722742
pp.x = ui.w/2;
723743
pp.y = ui.h*0.5;
@@ -728,7 +748,7 @@ function step() {
728748
}
729749

730750
g.setColor(0, 0, 0);
731-
if (!fast) {
751+
if (follow && !fast) {
732752
g.setFont("Vector", 31);
733753
g.setFontAlign(-1, -1);
734754
let msg = "\noff " + fmt.fmtDist(quiet.offtrack/1000);
@@ -737,7 +757,7 @@ function step() {
737757
}
738758
g.drawString(fmt.fmtFix(fix, getTime()-gps.gps_start) + msg, 3, 3);
739759
}
740-
if (!fast) {
760+
if (zoom_scale && !fast) {
741761
g.setFont("Vector", 23);
742762
g.setColor(0, 0, 0);
743763
g.setFontAlign(-1, 1);
@@ -785,7 +805,33 @@ function recover() {
785805
step_to(pp, 1);
786806
if (!load_next())
787807
break;
788-
ui.drawMsg("Recover\n" + fmt.fmtDist(d / 1000) + "\n" + point_num + "/" + num);
808+
if (!(point_num % 30))
809+
ui.drawMsg("Recover\n" + fmt.fmtDist(d / 1000) + "\n" + point_num + "/" + num + "\n" + track_name);
810+
}
811+
}
812+
813+
/* Draw map around current position */
814+
function draw_map() {
815+
ui.drawMsg("Draw...");
816+
let fix = gps.getGPSFix();
817+
if (!fix.fix) {
818+
print("Can't draw with no fix\n");
819+
fix.lat = 50.010507; /* FIXME */
820+
fix.lon = 14.765840;
821+
}
822+
let pp = fix;
823+
pp.ppm = 0.008 * 5; /* Pixels per meter */
824+
pp.course = 0;
825+
pp.x = 176/2;
826+
pp.y = 176/2;
827+
pp.g = zoom.buf;
828+
let d = 0;
829+
//load_next();
830+
zoom.geoNew(pp, 3000);
831+
{
832+
read(pp, track_name, 0);
833+
ui.drawMsg("Drawn\n" + fmt.fmtDist(d / 1000) + "\n" + point_num + "/" + num);
834+
step_init();
789835
}
790836
}
791837

@@ -820,21 +866,39 @@ print(l);
820866
/* After user selected the track, we can switch to main interface */
821867
function load_track(x) {
822868
ui.init();
823-
ui.numScreens = 4;
824-
ui.screens = [ "Detail", "Mid", "Overview", "Stats" ];
869+
ui.numScreens = 3;
870+
ui.screens = [ "Follow", "Map", "Stats" ];
825871

826872
Bangle.buzz(50, 1);
827873
ui.drawMsg("Loading\n"+x);
828874
track_name = x;
829-
time_read(x);
875+
time_read();
830876

831877
Bangle.on("drag", (b) => ui.touchHandler(b));
832878
Bangle.setUI({
833879
mode : "custom",
834880
clock : 0
835881
});
836-
ui.topLeft = () => { ui.drawMsg("Demo mode"); demo_mode = 1; }
837-
ui.topRight = () => { ui.drawMsg("Recover"); recover(); };
882+
ui.topLeft = () => {
883+
switch (ui.display) {
884+
case 0:
885+
case 1:
886+
zoom_mode++;
887+
if (zoom_mode == 3)
888+
zoom_mode = 0;
889+
ui.drawMsg("Zoom mode " + zoom_mode);
890+
break;
891+
case 2: demo_mode = !demo_mode;
892+
ui.drawMsg("Demo mode " + demo_mode);
893+
break;
894+
}
895+
}
896+
ui.topRight = () => {
897+
switch (ui.display) {
898+
case 0: ui.drawMsg("Recover"); recover(); break;
899+
case 1: ui.drawMsg("Draw map"); draw_map(); break;
900+
}
901+
};
838902
}
839903

840904
/* Display menu with tracks. */

0 commit comments

Comments
 (0)