From 645cfac648a95198cf336cd53ca5321bcb59d0f4 Mon Sep 17 00:00:00 2001 From: Stuart Buchanan <stuart_d_buchanan@yahoo.co.uk> Date: Wed, 1 Jan 2014 23:17:39 +0000 Subject: [PATCH] Use separate non-scrolling message display for tutorials. --- Nasal/tutorial/tutorial.nas | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/Nasal/tutorial/tutorial.nas b/Nasal/tutorial/tutorial.nas index 8be7cd5bf..d6ab8b953 100644 --- a/Nasal/tutorial/tutorial.nas +++ b/Nasal/tutorial/tutorial.nas @@ -16,6 +16,10 @@ var step_iter_count = 0; # number or step loop iterations var last_step_time = nil; # for set_targets() eta calculation var audio_dir = nil; +# Screen display. On bottom of screen, with no auto-scroll. +var display = screen.window.new(nil, 30, 5, 0); +display.sticky = 0; # don't turn on; makes scrolling up messages jump left and right + # property nodes (to be initialized with listener) var markerN = nil; var headingN = nil; @@ -74,7 +78,7 @@ var startTutorial = func { var dir = tutorialN.getNode("audio-dir"); if (dir != nil) - audio_dir = getprop("/sim/fg-root") ~ "/" ~ dir.getValue() ~ "/"; + audio_dir = getprop("/sim/fg-root") ~ "/" ~ dir.getValue(); else audio_dir = ""; @@ -101,6 +105,7 @@ var startTutorial = func { # <init> do_group(tutorialN.getNode("init")); is_running(1); # needs to be after "presets-commit" + display.show(); # Pick up any weather conditions/scenarios set setprop("/environment/rebuild-layers", getprop("/environment/rebuild-layers") + 1); @@ -116,6 +121,7 @@ var stopTutorial = func { set_properties(end); run_nasal(end); set_view(end) or view.point.restore(); + settimer(func() { if (!is_running()) { display.close(); } }, 10); } set_marker(); is_running(0); @@ -136,7 +142,7 @@ var step_tutorial = func(id) { # Check to ensure that this is the currently running tutorial. id == loop_id or return; - + var continue_after = func(n, w) { settimer(func { step_tutorial(id) }, w); } @@ -145,7 +151,7 @@ var step_tutorial = func(id) { if (current_step >= size(steps)) { var end = tutorialN.getNode("end"); say_message(end, "Tutorial finished."); - say_message(nil, "Deviations: " ~ num_errors); + #say_message(nil, "Deviations: " ~ num_errors); stopTutorial(); return; } @@ -162,7 +168,7 @@ var step_tutorial = func(id) { step_countN.setIntValue(step_iter_count = 0); do_group(step, "Tutorial step " ~ current_step); - + # A <wait> tag affects only the initial entry to the step var w = read_int(step, "wait", step_interval); return continue_after(step, w); @@ -388,10 +394,8 @@ var lastmsgcount = 0; var say_message = func(node, default = nil) { var msg = default; var audio = nil; - var is_error = 0; if (node != nil) { - is_error = node.getName() == "error"; var m = node.getChildren("message"); if (size(m)) @@ -402,23 +406,17 @@ var say_message = func(node, default = nil) { audio = a[rand() * size(a)].getValue(); } - if (msg != last_messageN.getValue() or (is_error and lastmsgcount == 1)) { - # Error messages are only displayed every 10 seconds (2 iterations) - # Other messages are only displayed if they change + if (msg != last_messageN.getValue()) { + # Messages are only displayed if they change if (audio != nil) { - var prop = { path : audio_dir, file : audio }; + var prop = { path : audio_dir, file : audio, volume : 1.0 }; fgcommand("play-audio-sample", props.Node.new(prop)); - screen.log.write(msg, 1, 1, 1); - } elsif (msg != nil) { - setprop("/sim/messages/copilot", msg); } - if (msg != nil) + if (msg != nil) { + display.write(msg, 1, 1, 1); last_messageN.setValue(msg); - - lastmsgcount = 0; - } else { - lastmsgcount += 1; + } } } @@ -449,7 +447,7 @@ var run_nasal = func(node) { var say = func(what, who = "copilot", delay = 0) { - settimer(func { setprop("/sim/messages/", who, what) }, delay); + settimer(func { display.write(what, 1, 1, 1) }, delay); }