@@ -496,7 +496,7 @@ function angleDifference(angle1, angle2) {
496496/* These are initialized by read() function, below */
497497var 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
686690function 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 */
821867function 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