From 52e559244282e7314bb05ac79dcdef8e545bbe91 Mon Sep 17 00:00:00 2001 From: Thorsten Renk Date: Mon, 21 Nov 2016 10:06:35 +0200 Subject: [PATCH] Replacement of blackout/redout implementation with a sophisticated model developed for military simulators - research and implementation by Nikolai Verner Christensen --- Aircraft/Generic/g-forces.xml | 863 ++++++++++++++++++++++++++++++++++ Nasal/redout.nas | 75 +-- preferences.xml | 33 +- 3 files changed, 894 insertions(+), 77 deletions(-) create mode 100644 Aircraft/Generic/g-forces.xml diff --git a/Aircraft/Generic/g-forces.xml b/Aircraft/Generic/g-forces.xml new file mode 100644 index 000000000..523afb8e9 --- /dev/null +++ b/Aircraft/Generic/g-forces.xml @@ -0,0 +1,863 @@ + + + + + + sim/rendering/redout/parameters/blackout-onset-g + sim/rendering/redout/parameters/blackout-complete-g + sim/rendering/redout/parameters/redout-onset-g + sim/rendering/redout/parameters/redout-complete-g + sim/rendering/redout/parameters/onset-blackout-sec + sim/rendering/redout/parameters/fast-blackout-sec + sim/rendering/redout/parameters/onset-redout-sec + sim/rendering/redout/parameters/fast-redout-sec + sim/rendering/redout/parameters/recover-fast-sec + sim/rendering/redout/parameters/recover-slow-sec + + sim/rendering/redout/internal/log/g-force + sim/rendering/redout/internal/log/onset-b + sim/rendering/redout/internal/log/fast-b + sim/rendering/redout/internal/log/g-force-r + sim/rendering/redout/internal/log/onset-r + sim/rendering/redout/internal/log/fast-r + + sim/rendering/redout/internal/g-force + sim/rendering/redout/internal/g-force-inv + sim/rendering/redout/internal/blackout + sim/rendering/redout/internal/redout + + sim/rendering/redout/alpha + sim/rendering/redout/red + sim/current-view/internal + sim/rendering/redout/internal/sum + sim/rendering/redout/enabled + + + + gain + 0 + + + + + + + 1000.0 + + + + -1000.0 + + + + + + 0 + + + + + + gain + 0 + + + + + + + 1000.0 + + + + -1000.0 + + + + + + 0 + + + + + + gain + 1 + + + + + + + 1.25 + + + + + + + + + 1.25 + + + + + + + + gain + 1 + + + + + + + + + + + 1.5 + + + + + + + + + + 0.50 + + 1.5 + + + + + + + + gain + 1 + + + + + + + -1.00 + + + + + + + + + -1.00 + + + + + + + + gain + 1 + + + + + + + + + + + -1.25 + + + + + + + + + + -0.50 + + -1.25 + + + + + + + + gain + -1 + + + + + + fdm/jsbsim/aero/alpha-deg + 180.0 + + + fdm/jsbsim/aero/alpha-deg + -180.0 + + + + + +
+ accelerations/pilot/z-accel-fps_sec + 32.174 +
+
+ + +
+ + + gain + 1 + + + + + + + fdm/jsbsim/aero/alpha-deg + 180.0 + + + fdm/jsbsim/aero/alpha-deg + -180.0 + + + + + + accelerations/pilot-g[0] + + + + + + gain + 1 + + + + + + + + + + + + + + + + + gain + 1 + + + + + + + + + + + + + + + + + gain + 1 + + + + + + 1 + + + + + 0 + + + + + + gain + 1 + + + + + + 1 + + + + + + + + + + + + + + + gain + 1 + + + + + + + + + + + + + 1 + + 0 + + + + sim/time/delta-sec +
+ 1 + + 0 + + + +
+ + + + 1 + + + + + + 1 + + +
+ + + + +
+
+
+
+
+
+
+
+
+ + +
+ + + gain + 1 + + + + + + + + + + + + + 1 + + 0 + + + + sim/time/delta-sec +
+ 1 + + 0 + + 10 + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+
+
+
+
+
+
+
+
+
+ + +
+ + + gain + 1 + + + + + + + + + + -1 + + + 2 + + + + + + + + + + gain + 1 + + + + + + + + + + -1 + + + 2 + + + + + + + + + + gain + -1 + + + + + + + + + + 2 + + + + + + + + gain + 1 + + + + + + 1 + + + + + 0 + + + + + + gain + 1 + + + + + + 1 + + + + + + + + + + + + + + + gain + 1 + + + + + + + + + + + + + 1 + + 0 + + + + sim/time/delta-sec +
+ 1 + + 0 + + + +
+ + + + 1 + + + + + + 1 + + +
+ + + + +
+
+
+
+
+
+
+
+
+ + +
+ + + gain + 1 + + + + + + + + + + + + + 1 + + 0 + + + + sim/time/delta-sec +
+ 1 + + 0 + + 10 + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+
+
+
+
+
+
+
+
+
+ + +
+ + + gain + 1 + + + + + + + + + + + + + + + + + + gain + 1 + + + + + + 1 + + + + 0 + + + + + 1 + + + + + + gain + 1 + + + + + + 1 + + + + 0 + + + + + + + + -1 + + + + + + + + gain + 1 + + + + + + 1 + + + + 0 + + + + + 0 + + + + + + gain + 1 + + + + + + 1 + + + + 0 + + + + + + + + + + + gain + 0 + + + + + + + + + 0 + + + + + + 0 + + + + + + gain + 0 + + + + + + + + + 0 + + + + + + gain + 0 + + + + + + + + + 0 + + + + +
diff --git a/Nasal/redout.nas b/Nasal/redout.nas index 1a2126270..275cbc596 100644 --- a/Nasal/redout.nas +++ b/Nasal/redout.nas @@ -1,14 +1,9 @@ # Damped G value - starts at 1. var GDamped = 1.0; var previousG = 1.0; -var running_redout = 0; var running_compression = 0; var fdm = "jsb"; -var blackout_start = nil; -var blackout_end = nil; -var redout_start = nil; -var redout_end = nil; var compression_rate = nil; var internal = nil; @@ -17,7 +12,7 @@ var lp_red = nil; var run = func { - if (running_redout or running_compression) + if (running_compression) { var GCurrent = 1.0; @@ -51,28 +46,6 @@ var run = func { if (internal) { - if (running_redout) - { - if (GDamped > blackout_start) - { - # Blackout - setprop("/sim/rendering/redout/red",0); - setprop("/sim/rendering/redout/alpha", - (GDamped - blackout_start) / (blackout_end - blackout_start)); - } - elsif (GDamped < redout_start) - { - # Redout - setprop("/sim/rendering/redout/red",1); - setprop("/sim/rendering/redout/alpha", - abs((GDamped - redout_start) / (redout_end - redout_start))); - } - else - { - setprop("/sim/rendering/redout/alpha",0); - } - } - if (running_compression) { # Apply any compression due to G-forces @@ -84,51 +57,20 @@ var run = func { } } } - else - { - # Not in cockpit view - remove all redout/blackout - setprop("/sim/rendering/redout/alpha",0); - } settimer(run, 0); } - else - { - # Disabled - remove all redout/blackout - setprop("/sim/rendering/redout/alpha",0); - } -} - -var check_params = func() { - blackout_start = getprop("/sim/rendering/redout/parameters/blackout-onset-g"); - blackout_end = getprop("/sim/rendering/redout/parameters/blackout-complete-g"); - redout_start = getprop("/sim/rendering/redout/parameters/redout-onset-g"); - redout_end = getprop("/sim/rendering/redout/parameters/redout-complete-g"); - if ((blackout_start == nil) or - (blackout_end == nil) or - (redout_start == nil) or - (redout_end == nil) ) - { - # No valid properties - no point running - running_redout = 0; - } } var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized", func { removelistener(fdm_init_listener); # uninstall, so we're only called once fdm = getprop("/sim/flight-model"); - running_redout = getprop("/sim/rendering/redout/enabled"); running_compression = getprop("/sim/rendering/headshake/enabled"); internal = getprop("/sim/current-view/internal"); lp_black = aircraft.lowpass.new(0.2); lp_red = aircraft.lowpass.new(0.25); - setlistener("/sim/rendering/redout/parameters", func { - # one parameter has changed, read them all in again - check_params(); - }, 1, 2); - setlistener("/sim/current-view/internal", func(n) { internal = n.getBoolValue(); }); @@ -138,7 +80,7 @@ var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized", }, 1); setlistener("/sim/rendering/headshake/enabled", func(n) { - if ((running_compression == 0) and (running_redout == 0) and n.getBoolValue()) + if ((running_compression == 0) and n.getBoolValue()) { running_compression = 1; # start new timer now @@ -150,19 +92,6 @@ var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized", } }, 1); - setlistener("/sim/rendering/redout/enabled", func(n) { - if ((running_compression == 0) and (running_redout == 0) and n.getBoolValue()) - { - running_redout = 1; - # start new timer now - run(); - } - else - { - running_redout = n.getBoolValue(); - } - }, 1); - # Now we've set up the listeners (which will have triggered), run it. run(); } diff --git a/preferences.xml b/preferences.xml index 95d8956fe..f20786681 100644 --- a/preferences.xml +++ b/preferences.xml @@ -254,11 +254,32 @@ Started September 2000 by David Megginson, david@megginson.com true - 3.5 - 5 - -2 - -4 + 2.5 + 4.5 + 300 + 10 + -2 + -4 + 45 + 7.5 + 7 + 15 + + 1 + 1 + 0 + 0 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + + false @@ -510,6 +531,10 @@ Started September 2000 by David Megginson, david@megginson.com Local Weather Rules Environment/local-weather-rules.xml + + g force effects + Aircraft/Generic/g-forces.xml + Aircraft/Generic/generic-instrumentation.xml