diff --git a/Nasal/view.nas b/Nasal/view.nas index 550d37844..568b501c6 100644 --- a/Nasal/view.nas +++ b/Nasal/view.nas @@ -143,37 +143,40 @@ var flyby = { me.altN = props.globals.getNode("/sim/viewer/altitude-ft", 1); me.loopid = 0; me.number = nil; + me.currview = nil; forindex (var i; views) if (views[i].getNode("name").getValue() == "Fly-By View") me.number = i; if (me.number == nil) die("can't find 'Fly-By View'"); - setlistener("/sim/freeze/replay-state", func { cmdarg().getValue() or me.reset() }); setlistener("/sim/signals/reinit", func { cmdarg().getValue() or me.reset() }); + setlistener("/sim/freeze/replay-state", func { + settimer(func { me.reset() }, 1); # time for replay to catch up + }); setlistener("/sim/current-view/view-number", func { - me.loopid += 1; - if (cmdarg().getValue() == me.number) { - me.reset(); - me.loop(me.loopid); - } + me.currview = cmdarg().getValue(); + me.reset(); }, 1); }, reset: func { + me.loopid += 1; + me.currview == me.number or return; 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(1); + me.loop(me.loopid); }, setpos : func(force = 0) { var pos = geo.aircraft_position(); var course = me.coord.course_to(pos); var dist = me.coord.distance_to(pos); - if (dist < 1.5 * me.chase and !force) + if (dist < 1.7 * 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, dist * 0.8); pos.apply_course_distance(course + side, me.chase); var lon = pos.lon(); var lat = pos.lat();