1 # Damped G value - starts at 1.
4 var running_redout = 0;
5 var running_compression = 0;
8 var blackout_start = nil;
9 var blackout_end = nil;
10 var redout_start = nil;
12 var compression_rate = nil;
20 if (running_redout or running_compression)
26 GCurrent = getprop("/accelerations/pilot/z-accel-fps_sec");
27 if (GCurrent != nil) GCurrent = - GCurrent / 32;
31 GCurrent = getprop("/accelerations/pilot-g[0]");
39 # Updated the GDamped using a filter.
42 # Redout happens faster and clears quicker
43 GDamped = lp_red.filter(GCurrent);
47 GDamped = lp_black.filter(GCurrent);
50 setprop("/accelerations/pilot-gdamped", GDamped);
56 if (GDamped > blackout_start)
59 setprop("/sim/rendering/redout/red",0);
60 setprop("/sim/rendering/redout/alpha",
61 (GDamped - blackout_start) / (blackout_end - blackout_start));
63 elsif (GDamped < redout_start)
66 setprop("/sim/rendering/redout/red",1);
67 setprop("/sim/rendering/redout/alpha",
68 abs((GDamped - redout_start) / (redout_end - redout_start)));
72 setprop("/sim/rendering/redout/alpha",0);
76 if (running_compression)
78 # Apply any compression due to G-forces
79 if (GDamped != previousG)
81 var current_y_offset = getprop("/sim/current-view/y-offset-m");
82 setprop("/sim/current-view/y-offset-m", current_y_offset - (GDamped - previousG) * compression_rate);
89 # Not in cockpit view - remove all redout/blackout
90 setprop("/sim/rendering/redout/alpha",0);
97 # Disabled - remove all redout/blackout
98 setprop("/sim/rendering/redout/alpha",0);
102 var check_params = func() {
103 blackout_start = getprop("/sim/rendering/redout/parameters/blackout-onset-g");
104 blackout_end = getprop("/sim/rendering/redout/parameters/blackout-complete-g");
105 redout_start = getprop("/sim/rendering/redout/parameters/redout-onset-g");
106 redout_end = getprop("/sim/rendering/redout/parameters/redout-complete-g");
107 if ((blackout_start == nil) or
108 (blackout_end == nil) or
109 (redout_start == nil) or
110 (redout_end == nil) )
112 # No valid properties - no point running
117 var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized",
119 removelistener(fdm_init_listener); # uninstall, so we're only called once
120 fdm = getprop("/sim/flight-model");
121 running_redout = getprop("/sim/rendering/redout/enabled");
122 running_compression = getprop("/sim/rendering/headshake/enabled");
123 internal = getprop("/sim/current-view/internal");
124 lp_black = aircraft.lowpass.new(0.2);
125 lp_red = aircraft.lowpass.new(0.25);
127 setlistener("/sim/rendering/redout/parameters", func {
128 # one parameter has changed, read them all in again
132 setlistener("/sim/current-view/internal", func(n) {
133 internal = n.getBoolValue();
136 setlistener("/sim/rendering/headshake/rate-m-g", func(n) {
137 compression_rate = n.getValue();
140 setlistener("/sim/rendering/headshake/enabled", func(n) {
141 if ((running_compression == 0) and (running_redout == 0) and n.getBoolValue())
143 running_compression = 1;
144 # start new timer now
149 running_compression = n.getBoolValue();
153 setlistener("/sim/rendering/redout/enabled", func(n) {
154 if ((running_compression == 0) and (running_redout == 0) and n.getBoolValue())
157 # start new timer now
162 running_redout = n.getBoolValue();
166 # Now we've set up the listeners (which will have triggered), run it.