From d4e030f9c6599c1d298843faacbc497c3a582ed5 Mon Sep 17 00:00:00 2001
From: mfranz <mfranz>
Date: Fri, 4 May 2007 22:48:40 +0000
Subject: [PATCH] - don't update when aircraft stays within threshold distance
 - randomize left/right, better parameters - don't reset on pause

---
 Nasal/view.nas | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/Nasal/view.nas b/Nasal/view.nas
index dfd4a97ad..550d37844 100644
--- a/Nasal/view.nas
+++ b/Nasal/view.nas
@@ -149,7 +149,7 @@ var flyby = {
         if (me.number == nil)
             die("can't find 'Fly-By View'");
 
-        setlistener("/sim/freeze/replay-state", func { me.reset() });
+        setlistener("/sim/freeze/replay-state", func { cmdarg().getValue() or me.reset() });
         setlistener("/sim/signals/reinit", func { cmdarg().getValue() or me.reset() });
         setlistener("/sim/current-view/view-number", func {
             me.loopid += 1;
@@ -160,25 +160,28 @@ var flyby = {
         }, 1);
     },
     reset: func {
-        me.chase = -getprop("/sim/chase-distance-m") / 2;
+        me.chase = -getprop("/sim/chase-distance-m");
         me.course = getprop("/orientation/heading-deg");
         me.coord = geo.Coord.new().set(geo.aircraft_position());
         me.dist = 20;
-        me.setpos();
+        me.setpos(1);
     },
-    setpos : func {
+    setpos : func(force = 0) {
         var pos = geo.aircraft_position();
         var course = me.coord.course_to(pos);
         var dist = me.coord.distance_to(pos);
-        pos.apply_course_distance(course, 30 + dist * 0.5);
-        pos.apply_course_distance(course + 90, me.chase * 0.75);
+        if (dist < 1.5 * me.chase and !force)
+            return;
+        var side = (rand() - 0.5 < 0) ? -90 : 90;;
+        pos.apply_course_distance(course, dist * 0.6);
+        pos.apply_course_distance(course + side, me.chase);
         var lon = pos.lon();
         var lat = pos.lat();
         var elev = geo.elevation(lon, lat);
         var alt = pos.alt();
         alt += (alt - me.coord.alt()) * 0.5;
-        if (elev != nil and alt < elev + 10)
-            alt = elev + 10;
+        if (elev != nil and alt < elev + 5)
+            alt = elev + 5;
 
         me.lonN.setValue(lon);
         me.latN.setValue(lat);
@@ -188,8 +191,8 @@ var flyby = {
     loop : func(id) {
         id == me.loopid or return;
         me.setpos();
-        settimer(func { me.loop(id) }, 6);
-    }
+        settimer(func { me.loop(id) }, 6.3);
+    },
 };