diff --git a/Aircraft/Generic/Effects/null_bumpspec.png b/Aircraft/Generic/Effects/null_bumpspec.png new file mode 100644 index 000000000..8d65741bf Binary files /dev/null and b/Aircraft/Generic/Effects/null_bumpspec.png differ diff --git a/Aircraft/Generic/WalkView/walkview.nas b/Aircraft/Generic/WalkView/walkview.nas index 0824dc229..cecd081c6 100644 --- a/Aircraft/Generic/WalkView/walkview.nas +++ b/Aircraft/Generic/WalkView/walkview.nas @@ -362,7 +362,7 @@ var TO_DEG = 180/math.pi; var walkers = {}; var closerXY = func (pos, p1, p2) { - l1 = [p1[0] - pos[0], p1[1] - pos[1]]; - l2 = [p2[0] - pos[0], p2[1] - pos[1]]; + var l1 = [p1[0] - pos[0], p1[1] - pos[1]]; + var l2 = [p2[0] - pos[0], p2[1] - pos[1]]; return (l1[0]*l1[0] + l1[1]*l1[1]) - (l2[0]*l2[0] + l2[1]*l2[1]); } diff --git a/Aircraft/c172p/Instruments/kap140/KAP140TwoAxisAlt.xml b/Aircraft/c172p/Instruments/kap140/KAP140TwoAxisAlt.xml index 02ee2b61d..a9666f23c 100644 --- a/Aircraft/c172p/Instruments/kap140/KAP140TwoAxisAlt.xml +++ b/Aircraft/c172p/Instruments/kap140/KAP140TwoAxisAlt.xml @@ -279,7 +279,10 @@ properties' values. select vs-minus - vs-digits-minus + vs-digit2-minus + vs-digit3-minus + vs-digit4-minus + vs-digit5-minus @@ -287,15 +290,18 @@ properties' values. true - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 select - vs-digits + vs-digit2 + vs-digit3 + vs-digit4 + vs-digit5 @@ -303,8 +309,8 @@ properties' values. true - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 @@ -312,11 +318,10 @@ properties' values. textranslate vs-digit5 - /autopilot/KAP140/settings/target-pressure-rate - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 /autopilot/KAP140/settings/target-pressure-rate @@ -331,11 +336,10 @@ properties' values. textranslate vs-digit4 - /autopilot/KAP140/settings/target-pressure-rate - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 /autopilot/KAP140/settings/target-pressure-rate @@ -350,11 +354,10 @@ properties' values. textranslate vs-digit3 - /autopilot/KAP140/settings/target-pressure-rate - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 /autopilot/KAP140/settings/target-pressure-rate @@ -369,11 +372,10 @@ properties' values. textranslate vs-digit2 - /autopilot/KAP140/settings/target-pressure-rate - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 /autopilot/KAP140/settings/target-pressure-rate @@ -388,11 +390,10 @@ properties' values. textranslate vs-digit5-minus - /autopilot/KAP140/settings/target-pressure-rate - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 /autopilot/KAP140/settings/target-pressure-rate @@ -407,11 +408,10 @@ properties' values. textranslate vs-digit4-minus - /autopilot/KAP140/settings/target-pressure-rate - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 /autopilot/KAP140/settings/target-pressure-rate @@ -426,11 +426,10 @@ properties' values. textranslate vs-digit3-minus - /autopilot/KAP140/settings/target-pressure-rate - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 /autopilot/KAP140/settings/target-pressure-rate @@ -445,11 +444,10 @@ properties' values. textranslate vs-digit2-minus - /autopilot/KAP140/settings/target-pressure-rate - 0 /autopilot/KAP140/settings/target-pressure-rate + 0 /autopilot/KAP140/settings/target-pressure-rate @@ -911,5 +909,5 @@ properties' values. - + diff --git a/Effects/reflect-bump-spec.eff b/Effects/reflect-bump-spec.eff new file mode 100644 index 000000000..e9dd7f0c3 --- /dev/null +++ b/Effects/reflect-bump-spec.eff @@ -0,0 +1,316 @@ + + + + Effects/reflect-bump-spec + Effects/model-default + + + + Aircraft/Generic/Effects/null_bumpspec.png + linear-mipmap-linear + repeat + repeat + normalized + + + cubemap + + + + + + Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_px.png + Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_nx.png + Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_py.png + Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_ny.png + Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_pz.png + Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_nz.png + + + + + Aircraft/Generic/Effects/Rainbow.png + linear-mipmap-linear + repeat + repeat + normalized + + + Aircraft/Generic/Effects/FresnelLookUp.png + linear-mipmap-linear + repeat + repeat + normalized + + + Aircraft/737-300/Models/Effects/733LH.ReflectionMap3.png + linear-mipmap-linear + repeat + repeat + normalized + + transparent + smooth + 0.01 + 0.1 + 0.25 + 0.0 + 0.05 + 0 + + + + 6 + 7 + + + + + + /sim/rendering/shader-effects + + + 2.0 + + + + GL_ARB_shader_objects + GL_ARB_shading_language_100 + GL_ARB_vertex_shader + GL_ARB_fragment_shader + + + + + + + true + + material/active + material/ambient + material/diffuse + material/specular + material/emissive + material/shininess + material/color-mode + + + blend/active + blend/source + blend/destination + + shade-model + cull-face + rendering-hint + + + 0 + texture[0]/image + texture[0]/filter + texture[0]/wrap-s + texture[0]/wrap-t + texture[0]/internal-format + + + + 4 + texture[4]/image + texture[4]/filter + texture[4]/wrap-s + texture[4]/wrap-t + texture[4]/internal-format + + + + 5 + texture[5]/type + + + + + + texture[5]/images + + + + 6 + texture[6]/type + texture[6]/image + texture[6]/filter + texture[6]/wrap-s + texture[6]/wrap-t + + + + 7 + texture[7]/type + texture[7]/image + texture[7]/filter + texture[7]/wrap-s + texture[7]/wrap-t + + + + 8 + texture[8]/image + texture[8]/filter + texture[8]/wrap-s + texture[8]/wrap-t + texture[0]/internal-format + + + + 9 + noise + + + + + Shaders/reflect-bump-spec.vert + Shaders/reflect-bump-spec.frag + + tangent + 6 + + + binormal + 7 + + + + + BaseTex + sampler-2d + 0 + + + + NormalTex + sampler-2d + 4 + + + + Environment + sampler-cube + 5 + + + + Rainbow + sampler-2d + 6 + + + + Fresnel + sampler-2d + 7 + + + + Map + sampler-2d + 8 + + + + Noise + sampler-3d + 9 + + + + + rainbowiness + float + rainbowiness + + + + + fresneliness + float + fresneliness + + + + + noisiness + float + noisiness + + + + + refl_correction + float + refl_correction + + + + + ambient_correction + float + ambient_correction + + + + + reflect_map + float + reflect_map + + + + + diff --git a/Effects/water.eff b/Effects/water.eff index 171ec5c3c..248950cb6 100644 --- a/Effects/water.eff +++ b/Effects/water.eff @@ -2,6 +2,150 @@ Effects/water Effects/terrain-default + + + Textures/Water/water-reflection.png + linear-mipmap-linear + repeat + repeat + normalized + + + Textures/Water/water-refraction.png + linear-mipmap-linear + repeat + repeat + normalized + + + Textures/Water/water-normalmap.png + linear-mipmap-linear + repeat + repeat + normalized + + + Textures/Water/water-dudv.png + linear-mipmap-linear + repeat + repeat + normalized + + + /rendering/scene/saturation + + + + + + /sim/rendering/water-shader + /sim/rendering/shader-effects + + 2.0 + /sim/rendering/quality-level + + + + 2.0 + + + + GL_ARB_shader_objects + GL_ARB_shading_language_100 + GL_ARB_vertex_shader + GL_ARB_fragment_shader + + + + + + true + + material/ambient + material/diffuse + material/specular + ambient-and-diffuse + + transparent + transparent + smooth + back + + render-bin/bin-number + render-bin/bin-name + + + 0 + texture[0]/image + texture[0]/filter + texture[0]/wrap-s + texture[0]/wrap-t + + texture[0]/internal-format + + + + 1 + texture[1]/image + texture[1]/filter + texture[1]/wrap-s + texture[1]/wrap-t + + texture[1]/internal-format + + + + 2 + texture[2]/image + texture[2]/filter + texture[2]/wrap-s + texture[2]/wrap-t + + texture[2]/internal-format + + + + 3 + texture[3]/image + texture[3]/filter + texture[3]/wrap-s + texture[3]/wrap-t + + texture[3]/internal-format + + + + Shaders/water.vert + Shaders/water.frag + + + water_reflection + sampler-2d + 0 + + + water_refraction + sampler-2d + 1 + + + water_normalmap + sampler-2d + 2 + + + water_dudvmap + sampler-2d + 3 + + + saturation + float + 0.4 + + + + @@ -42,8 +186,8 @@ noise - Shaders/water.vert - Shaders/water.frag + Shaders/water-orig.vert + Shaders/water-orig.frag texture diff --git a/Environment/metarinterpolator.xml b/Environment/metarinterpolator.xml index 2c027ea10..c67cb2ab5 100644 --- a/Environment/metarinterpolator.xml +++ b/Environment/metarinterpolator.xml @@ -28,7 +28,7 @@ --> MetarController:pressure-sea-level-inhg noise-spike - 0.0003 + 0.006 /environment/metar/valid diff --git a/Input/Keyboard/multikey.xml b/Input/Keyboard/multikey.xml index c6b0a1608..6b9e01307 100644 --- a/Input/Keyboard/multikey.xml +++ b/Input/Keyboard/multikey.xml @@ -89,16 +89,6 @@ - - c - Clouds - - - dialog-show - clouds - - - f Fuel and Payload @@ -241,7 +231,6 @@ nasal @@ -253,7 +242,6 @@ nasal @@ -265,7 +253,6 @@ nasal @@ -277,7 +264,6 @@ nasal diff --git a/Nasal/mp_broadcast.nas b/Nasal/mp_broadcast.nas index cabef40ac..702a3372d 100644 --- a/Nasal/mp_broadcast.nas +++ b/Nasal/mp_broadcast.nas @@ -45,24 +45,25 @@ BroadcastChannel.new = func (mpp_path, process, accept_predicate = nil, on_disconnect = nil, enable_send=1) { - obj = { parents : [BroadcastChannel], - mpp_path : mpp_path, - send_node : enable_send ? props.globals.getNode(mpp_path, 1) - : nil, - process_msg : process, - send_to_self : send_to_self, - accept_predicate : (accept_predicate != nil) ? accept_predicate : - func (p) { return 1; }, - on_disconnect : (on_disconnect != nil) ? on_disconnect : - func (p) { return; }, - # Internal state. - send_buf : [], - peers : {}, - loopid : 0, - PERIOD : 1.3, - last_time : 0.0, # For join handling. - last_send : 0.0, # For the send queue - SEND_TIME : 0.5 }; + var obj = { parents : [BroadcastChannel], + mpp_path : mpp_path, + send_node : enable_send ? props.globals.getNode(mpp_path, 1) + : nil, + process_msg : process, + send_to_self : send_to_self, + accept_predicate : + (accept_predicate != nil) ? accept_predicate + : func (p) { return 1; }, + on_disconnect : (on_disconnect != nil) ? on_disconnect + : func (p) { return; }, + # Internal state. + send_buf : [], + peers : {}, + loopid : 0, + PERIOD : 1.3, + last_time : 0.0, # For join handling. + last_send : 0.0, # For the send queue + SEND_TIME : 0.5 }; if (enable_send and (obj.send_node == nil)) { printlog("warn", "BroadcastChannel invalid send node."); @@ -232,10 +233,10 @@ Binary.decodeCoord = func (str) { # The same object is seldom used for both sending and receiving. var MessageChannel = {}; MessageChannel.new = func (n = nil, process = nil) { - obj = { parents : [MessageChannel], - node : n, - process_msg : process, - old : "" }; + var obj = { parents : [MessageChannel], + node : n, + process_msg : process, + old : "" }; return obj; } MessageChannel.update = func { diff --git a/Nasal/multiplayer.nas b/Nasal/multiplayer.nas index 9bf4d351f..f2843b0c6 100644 --- a/Nasal/multiplayer.nas +++ b/Nasal/multiplayer.nas @@ -125,8 +125,10 @@ var handle_key = func(key) { input = substr(input, 0, size(input) - 1); gui.popupTip(input, 1000000); - return 1; } + + # Always handle key so excessive backspacing doesn't toggle the heading autopilot + return 1; } elsif (key == 27) { diff --git a/Nasal/startup.nas b/Nasal/startup.nas index 3d7cff973..d2d692a14 100644 --- a/Nasal/startup.nas +++ b/Nasal/startup.nas @@ -1,6 +1,6 @@ var set_runway_from_metar_wind = func { - if (!getprop("/environment/params/real-world-weather-fetch")) - return printlog("info", "metar-rwy: no live weather"); + if (!getprop("/environment/metar/valid")) + return printlog("info", "metar-rwy: no valid metar"); if (!getprop("/sim/startup/options/airport")) return printlog("info", "metar-rwy: no airport requested"); if (getprop("/sim/startup/options/runway")) diff --git a/Nasal/view.nas b/Nasal/view.nas index 30b4f25a8..3642ac2e3 100644 --- a/Nasal/view.nas +++ b/Nasal/view.nas @@ -1,663 +1,663 @@ -## -## view.nas -## -## Nasal code for implementing view-specific functionality. - -var index = nil; # current view index -var views = nil; # list of all view branches (/sim/view[n]) as props.Node -var current = nil; # current view branch (e.g. /sim/view[1]) as props.Node - - -var hasmember = func(class, member) { - if (contains(class, member)) - return 1; - if (!contains(class, "parents")) - return 0; - if (typeof(class.parents) != "vector") - return 0; - foreach (var parent; class.parents) - if (hasmember(parent, member)) - return 1; - return 0; -} - - -# Dynamically calculate limits so that it takes STEPS iterations to -# traverse the whole range, the maximum FOV is fixed at 120 degrees, -# and the minimum corresponds to normal maximum human visual acuity -# (~1 arc minute of resolution, although apparently people vary widely -# in this ability). Quick derivation of the math: -# -# mul^steps = max/min -# steps * ln(mul) = ln(max/min) -# mul = exp(ln(max/min) / steps) -var STEPS = 40; -var ACUITY = 1/60; # Maximum angle subtended by one pixel (== 1 arc minute) -var max = var min = var mul = 0; -var calcMul = func { - max = 120; # Fixed at 120 degrees - min = getprop("/sim/startup/xsize") * ACUITY; - mul = math.exp(math.ln(max/min) / STEPS); -} - -## -# Handler. Increase FOV by one step -# -var increase = func { - calcMul(); - var val = fovProp.getValue() * mul; - if(val == max) { return; } - if(val > max) { val = max } - fovProp.setDoubleValue(val); - var popup=getprop("/sim/view-name-popup"); - if(popup == 1 or popup==nil) gui.popupTip(sprintf("FOV: %.1f", val)); -} - -## -# Handler. Decrease FOV by one step -# -var decrease = func { - calcMul(); - var val = fovProp.getValue() / mul; - fovProp.setDoubleValue(val); - var popup=getprop("/sim/view-name-popup"); - if(popup == 1 or popup==nil) gui.popupTip(sprintf("FOV: %.1f%s", val, val < min ? " (overzoom)" : "")); -} - -## -# Handler. Reset FOV to default. -# -var resetFOV = func { - setprop("/sim/current-view/field-of-view", - getprop("/sim/current-view/config/default-field-of-view-deg")); -} - -var resetViewPos = func { - var v = current.getNode("config"); - setprop("/sim/current-view/x-offset-m", v.getNode("x-offset-m", 1).getValue() or 0); - setprop("/sim/current-view/y-offset-m", v.getNode("y-offset-m", 1).getValue() or 0); - setprop("/sim/current-view/z-offset-m", v.getNode("z-offset-m", 1).getValue() or 0); -} - -var resetViewDir = func { - setprop("/sim/current-view/goal-heading-offset-deg", - getprop("/sim/current-view/config/heading-offset-deg")); - setprop("/sim/current-view/goal-pitch-offset-deg", - getprop("/sim/current-view/config/pitch-offset-deg")); - setprop("/sim/current-view/goal-roll-offset-deg", - getprop("/sim/current-view/config/roll-offset-deg")); -} - -## -# Handler. Step to the next (force=1) or next enabled view. -# -var stepView = func(step, force = 0) { - step = step > 0 ? 1 : -1; - var n = index; - for (var i = 0; i < size(views); i += 1) { - n += step; - if (n < 0) - n = size(views) - 1; - elsif (n >= size(views)) - n = 0; - if (force or (var e = views[n].getNode("enabled")) == nil or e.getBoolValue()) - break; - } - setprop("/sim/current-view/view-number", n); - - # And pop up a nice reminder - var popup=getprop("/sim/view-name-popup"); - if(popup == 1 or popup==nil) gui.popupTip(views[n].getNode("name").getValue()); -} - -## -# Get view index by name. -# -var indexof = func(name) { - forindex (var i; views) - if (views[i].getNode("name", 1).getValue() == name) - return i; - return nil; -} - -## -# Standard view "slew" rate, in degrees/sec. -# -var VIEW_PAN_RATE = 60; - -## -# Pans the view horizontally. The argument specifies a relative rate -# (or number of "steps" -- same thing) to the standard rate. -# -var panViewDir = func(step) { - if (getprop("/sim/freeze/master")) - var prop = "/sim/current-view/heading-offset-deg"; - else - var prop = "/sim/current-view/goal-heading-offset-deg"; - - controls.slewProp(prop, step * VIEW_PAN_RATE); -} - -## -# Pans the view vertically. The argument specifies a relative rate -# (or number of "steps" -- same thing) to the standard rate. -# -var panViewPitch = func(step) { - if (getprop("/sim/freeze/master")) - var prop = "/sim/current-view/pitch-offset-deg"; - else - var prop = "/sim/current-view/goal-pitch-offset-deg"; - - controls.slewProp(prop, step * VIEW_PAN_RATE); -} - - -## -# Reset view to default using current view manager (see default_handler). -# -var resetView = func { - manager.reset(); -} - - -## -# Default view handler used by view.manager. -# -var default_handler = { - reset : func { - resetViewDir(); - resetFOV(); - }, -}; - - -## -# View manager. Administrates optional Nasal view handlers. -# Usage: view.manager.register(, ); -# -# view-id: the view's name (e.g. "Chase View") or index number -# view-handler: a hash with any combination of the functions listed in the -# following example, or none at all. Only define the interface -# functions that you really need! The hash may contain local -# variables and other, non-interface functions. -# -# Example: -# -# var some_view_handler = { -# init : func {}, # called only once at startup -# start : func {}, # called when view is switched to our view -# stop : func {}, # called when view is switched away from our view -# reset : func {}, # called with view.resetView() -# update : func { 0 }, # called iteratively if defined. Must return -# }; # interval in seconds until next invocation -# # Don't define it if you don't need it! -# -# view.manager.register("Some View", some_view_handler); -# -# -var manager = { - current : { node: nil, handler: default_handler }, - init : func { - me.views = {}; - me.loopid = 0; - var viewnodes = props.globals.getNode("sim").getChildren("view"); - forindex (var i; viewnodes) - me.views[i] = { node: viewnodes[i], handler: default_handler }; - setlistener("/sim/current-view/view-number", func(n) { - manager.set_view(n.getValue()); - }, 1); - }, - register : func(which, handler = nil) { - if (num(which) == nil) - which = indexof(which); - if (handler == nil) - handler = default_handler; - me.views[which]["handler"] = handler; - if (hasmember(handler, "init")) - handler.init(me.views[which].node); - me.set_view(); - }, - set_view : func(which = nil) { - if (which == nil) - which = index; - elsif (num(which) == nil) - which = indexof(which); - - me.loopid += 1; - if (hasmember(me.current.handler, "stop")) - me.current.handler.stop(); - - me.current = me.views[which]; - - if (hasmember(me.current.handler, "start")) - me.current.handler.start(); - if (hasmember(me.current.handler, "update")) - me._loop_(me.loopid += 1); - }, - reset : func { - if (hasmember(me.current.handler, "reset")) - me.current.handler.reset(); - else - default_handler.reset(); - }, - _loop_ : func(id) { - id == me.loopid or return; - settimer(func { me._loop_(id) }, me.current.handler.update() or 0); - }, -}; - - -var fly_by_view_handler = { - init : func { - me.latN = props.globals.getNode("/sim/viewer/latitude-deg", 1); - me.lonN = props.globals.getNode("/sim/viewer/longitude-deg", 1); - me.altN = props.globals.getNode("/sim/viewer/altitude-ft", 1); - me.hdgN = props.globals.getNode("/orientation/heading-deg", 1); - - setlistener("/sim/signals/reinit", func(n) { n.getValue() or me.reset() }); - setlistener("/sim/crashed", func(n) { n.getValue() and me.reset() }); - setlistener("/sim/freeze/replay-state", func { - settimer(func { me.reset() }, 1); # time for replay to catch up - }); - me.reset(); - }, - start : func { - me.reset(); - }, - reset: func { - me.chase = -getprop("/sim/chase-distance-m"); - me.course = me.hdgN.getValue(); - me.last = geo.aircraft_position(); - me.setpos(1); - me.dist = 20; - }, - setpos : func(force = 0) { - var pos = geo.aircraft_position(); - - # check if the aircraft has moved enough - var dist = me.last.distance_to(pos); - if (dist < 1.7 * me.chase and !force) - return 1.13; - - # "predict" and remember next aircraft position - var course = me.hdgN.getValue(); - var delta_alt = (pos.alt() - me.last.alt()) * 0.5; - pos.apply_course_distance(course, dist * 0.8); - pos.set_alt(pos.alt() + delta_alt); - me.last.set(pos); - - # apply random deviation - var radius = me.chase * (0.5 * rand() + 0.7); - var agl = getprop("/position/altitude-agl-ft") * FT2M; - if (agl > me.chase) - var angle = rand() * 2 * math.pi; - else - var angle = ((2 * rand() - 1) * 0.15 + 0.5) * (rand() < 0.5 ? -math.pi : math.pi); - - var dev_alt = math.cos(angle) * radius; - var dev_side = math.sin(angle) * radius; - pos.apply_course_distance(course + 90, dev_side); - - # and make sure it's not under ground - var lat = pos.lat(); - var lon = pos.lon(); - var alt = pos.alt(); - var elev = geo.elevation(lat, lon); - if (elev != nil) { - elev += 2; # min elevation - if (alt + dev_alt < elev and dev_alt < 0) - dev_alt = -dev_alt; - if (alt + dev_alt < elev) - alt = elev; - else - alt += dev_alt; - } - - # set new view point - me.latN.setValue(lat); - me.lonN.setValue(lon); - me.altN.setValue(alt * M2FT); - return 7.3; - }, - update : func { - return me.setpos(); - }, -}; - - -var model_view_handler = { - init: func(node) { - me.viewN = node; - me.current = nil; - me.legendN = props.globals.initNode("/sim/current-view/model-view", ""); - me.dialog = props.Node.new({ "dialog-name": "model-view" }); - }, - start: func { - me.listener = setlistener("/sim/signals/multiplayer-updated", func me._update_(), 1); - me.reset(); - fgcommand("dialog-show", me.dialog); - }, - stop: func { - fgcommand("dialog-close", me.dialog); - removelistener(me.listener); - }, - reset: func { - me.select(0); - }, - find: func(callsign) { - forindex (var i; me.list) - if (me.list[i].callsign == callsign) - return i; - return nil; - }, - select: func(which) { - if (num(which) == nil) - which = me.find(which) or 0; # turn callsign into index - - me.setup(me.list[which]); - }, - next: func(step) { - var i = me.find(me.current); - i = i == nil ? 0 : math.mod(i + step, size(me.list)); - me.setup(me.list[i]); - }, - _update_: func { - var self = { callsign: getprop("/sim/multiplay/callsign"), model:, - node: props.globals, root: '/' }; - me.list = [self] ~ multiplayer.model.list; - if (!me.find(me.current)) - me.select(0); - }, - setup: func(data) { - if (data.root == '/') { - var zoffset = getprop("/sim/chase-distance-m"); - var ident = '[' ~ data.callsign ~ ']'; - } else { - var zoffset = 70; - var ident = '"' ~ data.callsign ~ '" (' ~ data.model ~ ')'; - } - - me.current = data.callsign; - me.legendN.setValue(ident); - setprop("/sim/current-view/z-offset-m", zoffset); - - me.viewN.getNode("config").setValues({ - "eye-lat-deg-path": data.root ~ "/position/latitude-deg", - "eye-lon-deg-path": data.root ~ "/position/longitude-deg", - "eye-alt-ft-path": data.root ~ "/position/altitude-ft", - "eye-heading-deg-path": data.root ~ "/orientation/heading-deg", - "target-lat-deg-path": data.root ~ "/position/latitude-deg", - "target-lon-deg-path": data.root ~ "/position/longitude-deg", - "target-alt-ft-path": data.root ~ "/position/altitude-ft", - "target-heading-deg-path": data.root ~ "/orientation/heading-deg", - "target-pitch-deg-path": data.root ~ "/orientation/pitch-deg", - "target-roll-deg-path": data.root ~ "/orientation/roll-deg", - }); - }, -}; - - -var pilot_view_limiter = { - new : func { - return { parents: [pilot_view_limiter] }; - }, - init : func { - me.hdgN = props.globals.getNode("/sim/current-view/heading-offset-deg"); - me.xoffsetN = props.globals.getNode("/sim/current-view/x-offset-m"); - me.xoffset_lowpass = aircraft.lowpass.new(0.1); - me.last_offset = 0; - }, - start : func { - var limits = current.getNode("config/limits", 1); - me.left = { - heading_max : abs(limits.getNode("left/heading-max-deg", 1).getValue() or 1000), - threshold : abs(limits.getNode("left/x-offset-threshold-deg", 1).getValue() or 0), - xoffset_max : abs(limits.getNode("left/x-offset-max-m", 1).getValue() or 0), - }; - me.right = { - heading_max : -abs(limits.getNode("right/heading-max-deg", 1).getValue() or 1000), - threshold : -abs(limits.getNode("right/x-offset-threshold-deg", 1).getValue() or 0), - xoffset_max : -abs(limits.getNode("right/x-offset-max-m", 1).getValue() or 0), - }; - me.left.scale = me.left.xoffset_max / (me.left.heading_max - me.left.threshold); - me.right.scale = me.right.xoffset_max / (me.right.heading_max - me.right.threshold); - me.last_hdg = normdeg(me.hdgN.getValue()); - me.enable_xoffset = me.right.xoffset_max > 0.001 or me.left.xoffset_max > 0.001; - }, - update : func { - if (getprop("/devices/status/keyboard/ctrl")) - return; - - var hdg = normdeg(me.hdgN.getValue()); - if (abs(me.last_hdg - hdg) > 180) # avoid wrap-around skips - me.hdgN.setDoubleValue(hdg = me.last_hdg); - elsif (hdg > me.left.heading_max) - me.hdgN.setDoubleValue(hdg = me.left.heading_max); - elsif (hdg < me.right.heading_max) - me.hdgN.setDoubleValue(hdg = me.right.heading_max); - me.last_hdg = hdg; - - # translate view on X axis to look far right or far left - if (me.enable_xoffset) { - var offset = 0; - if (hdg > me.left.threshold) - offset = (me.left.threshold - hdg) * me.left.scale; - elsif (hdg < me.right.threshold) - offset = (me.right.threshold - hdg) * me.right.scale; - - var new_offset = me.xoffset_lowpass.filter(offset); - me.xoffsetN.setDoubleValue(me.xoffsetN.getValue() - me.last_offset + new_offset); - me.last_offset = new_offset; - } - return 0; - }, -}; - - -var panViewDir = func(step) { # FIXME overrides panViewDir function from above; needs better integration - if (getprop("/sim/freeze/master")) - var prop = "/sim/current-view/heading-offset-deg"; - else - var prop = "/sim/current-view/goal-heading-offset-deg"; - var viewVal = getprop(prop); - var delta = step * VIEW_PAN_RATE * getprop("/sim/time/delta-realtime-sec"); - var viewValSlew = normdeg(viewVal + delta); - var headingMax = abs(current.getNode("config/limits/left/heading-max-deg", 1).getValue() or 1000); - var headingMin = -abs(current.getNode("config/limits/right/heading-max-deg", 1).getValue() or 1000); - if (viewValSlew > headingMax) - viewValSlew = headingMax; - elsif (viewValSlew < headingMin) - viewValSlew = headingMin; - setprop(prop, viewValSlew); -} - - -#------------------------------------------------------------------------------ -# -# Saves/restores/moves the view point (position, orientation, field-of-view). -# Moves are interpolated with sinusoidal characteristic. There's only one -# instance of this class, available as "view.point". -# -# Usage: -# view.point.save(); ... save current view and return reference to -# saved values in the form of a props.Node -# -# view.point.restore(); ... restore saved view parameters -# -# view.point.move( [, diff --git a/gui/dialogs/osg_display_settings.xml b/gui/dialogs/stereoscopic-view-options.xml similarity index 54% rename from gui/dialogs/osg_display_settings.xml rename to gui/dialogs/stereoscopic-view-options.xml index da319f633..b873861fa 100644 --- a/gui/dialogs/osg_display_settings.xml +++ b/gui/dialogs/stereoscopic-view-options.xml @@ -2,8 +2,7 @@ - - osg-display-settings + stereoscopic-view-options false false vbox @@ -18,7 +17,7 @@ - + @@ -71,7 +70,7 @@ true 0 - 1.0 + 10.0 /sim/rendering/osg-displaysettings/screen-distance dialog-apply @@ -106,77 +105,4 @@ - - hbox - 1 - - true - - true - /sim/rendering/osg-displaysettings/double-buffer - - dialog-apply - - - - - - hbox - 1 - - true - - true - /sim/rendering/osg-displaysettings/depth-buffer - - dialog-apply - - - - - - hbox - 1 - - true - - true - /sim/rendering/osg-displaysettings/rgb - - dialog-apply - - - - - - hbox - 1 - - true - - 100 - 25 - true - /sim/rendering/osg-displaysettings/screen-width - - dialog-apply - - - - - - hbox - 1 - - true - - 100 - 25 - true - /sim/rendering/osg-displaysettings/screen-height - - dialog-apply - - - diff --git a/gui/dialogs/view.xml b/gui/dialogs/view.xml index d1c1a2ad7..b105ee1db 100644 --- a/gui/dialogs/view.xml +++ b/gui/dialogs/view.xml @@ -6,7 +6,7 @@ vbox - + diff --git a/gui/dialogs/weather.xml b/gui/dialogs/weather.xml index 362c0e322..b0e8b8a1a 100644 --- a/gui/dialogs/weather.xml +++ b/gui/dialogs/weather.xml @@ -1,1051 +1,1664 @@ - - - - - - weather - false - false - vbox - 3 - - - - hbox - 1 - - - true - - - - - - - - true - - - - - - - - hbox - 0 - - - - vbox - - vbox - 1 - - - - hbox - - - - - true - - - - - hbox - - table - - - - 0 - 1 - - - - - 0 - 2 - 80 - - - - - 0 - 3 - - - - - - - 1 - 1 - true - /environment/clouds/layer[4]/elevation-ft - - dialog-apply - - - - - 1 - 2 - 100 - true - /environment/clouds/layer[4]/coverage - clear - few - scattered - broken - overcast - cirrus - - dialog-apply - - - - - 1 - 3 - true - /environment/clouds/layer[4]/thickness-ft - - dialog-apply - - - - - - - - 2 - 1 - true - /environment/clouds/layer[3]/elevation-ft - - dialog-apply - - - - - 2 - 2 - 100 - true - /environment/clouds/layer[3]/coverage - clear - few - scattered - broken - overcast - cirrus - - dialog-apply - - - - - 2 - 3 - true - /environment/clouds/layer[3]/thickness-ft - - dialog-apply - - - - - - - - 3 - 1 - true - /environment/clouds/layer[2]/elevation-ft - - dialog-apply - - - - - 3 - 2 - 100 - true - /environment/clouds/layer[2]/coverage - clear - few - scattered - broken - overcast - cirrus - - dialog-apply - - - - - 3 - 3 - true - /environment/clouds/layer[2]/thickness-ft - - dialog-apply - - - - - - - - 4 - 1 - true - /environment/clouds/layer[1]/elevation-ft - - dialog-apply - - - - - 4 - 2 - 100 - true - /environment/clouds/layer[1]/coverage - clear - few - scattered - broken - overcast - cirrus - - dialog-apply - - - - - 4 - 3 - true - /environment/clouds/layer[1]/thickness-ft - - dialog-apply - - - - - - - - 5 - 1 - true - /environment/clouds/layer[0]/elevation-ft - - dialog-apply - - - - - 5 - 2 - 100 - true - false - /environment/clouds/layer[0]/coverage - clear - few - scattered - broken - overcast - cirrus - - dialog-apply - - - - - 5 - 3 - true - /environment/clouds/layer[0]/thickness-ft - - dialog-apply - - - - - - true - - - - - - - - vbox - 1 - - - hbox - - - - - true - - - - - hbox - fill - - table - - 0 - 0 - - - - - 0 - 1 - - - - - 1 - 0 - true - fill - /environment/metar/rain-norm - - dialog-apply - - true - - - - 1 - 1 - fill - /environment/metar/snow-norm - true - 30 - - dialog-apply - - - - - 0 - 3 - - - - - 1 - 3 - true - 50 - /environment/config/boundary/entry[0]/pressure-sea-level-inhg - - - - 2 - 0 - 3 - 30 - - - - - - true - - - - - - - - - true - - - - - vbox - - - - vbox - 1 - - - hbox - - - - - true - - - - - hbox - - table - - 0 - 0 - - - - - 0 - 1 - 2 - - - - - 0 - 3 - - - - - 0 - 4 - - - - - 0 - 5 - - - - - 1 - 0 - 52 - /environment/config/aloft/entry[4]/elevation-ft - true - - - - 1 - 1 - 40 - /environment/config/aloft/entry[4]/wind-from-heading-deg - true - - - - 1 - 2 - 35 - /environment/config/aloft/entry[4]/wind-speed-kt - true - - - - 1 - 3 - 55 - /environment/config/aloft/entry[4]/visibility-m - true - - - - 1 - 4 - 60 - /environment/config/aloft/entry[4]/temperature-degc - true - - - - 1 - 5 - 60 - /environment/config/aloft/entry[4]/dewpoint-degc - true - - - - 2 - 0 - 52 - /environment/config/aloft/entry[3]/elevation-ft - true - - - - 2 - 1 - 40 - /environment/config/aloft/entry[3]/wind-from-heading-deg - true - - - - 2 - 2 - 35 - /environment/config/aloft/entry[3]/wind-speed-kt - true - - - - 2 - 3 - 55 - /environment/config/aloft/entry[3]/visibility-m - true - - - - 2 - 4 - 60 - /environment/config/aloft/entry[3]/temperature-degc - true - - - - 2 - 5 - 60 - /environment/config/aloft/entry[3]/dewpoint-degc - true - - - - 3 - 0 - 52 - /environment/config/aloft/entry[2]/elevation-ft - true - - - - 3 - 1 - 40 - /environment/config/aloft/entry[2]/wind-from-heading-deg - true - - - - 3 - 2 - 35 - /environment/config/aloft/entry[2]/wind-speed-kt - true - - - - 3 - 3 - 55 - /environment/config/aloft/entry[2]/visibility-m - true - - - - 3 - 4 - 60 - /environment/config/aloft/entry[2]/temperature-degc - true - - - - 3 - 5 - 60 - /environment/config/aloft/entry[2]/dewpoint-degc - true - - - - 4 - 0 - 52 - /environment/config/aloft/entry[1]/elevation-ft - true - - - - 4 - 1 - 40 - /environment/config/aloft/entry[1]/wind-from-heading-deg - true - - - - 4 - 2 - 35 - /environment/config/aloft/entry[1]/wind-speed-kt - true - - - - 4 - 3 - 55 - /environment/config/aloft/entry[1]/visibility-m - true - - - - 4 - 4 - 60 - /environment/config/aloft/entry[1]/temperature-degc - true - - - - 4 - 5 - 60 - /environment/config/aloft/entry[1]/dewpoint-degc - true - - - - 5 - 0 - 52 - /environment/config/aloft/entry[0]/elevation-ft - true - - - - 5 - 1 - 40 - /environment/config/aloft/entry[0]/wind-from-heading-deg - true - - - - 5 - 2 - 35 - /environment/config/aloft/entry[0]/wind-speed-kt - true - - - - 5 - 3 - 55 - /environment/config/aloft/entry[0]/visibility-m - true - - - - 5 - 4 - 60 - /environment/config/aloft/entry[0]/temperature-degc - true - - - - 5 - 5 - 60 - /environment/config/aloft/entry[0]/dewpoint-degc - true - - - - true - - - - - - - - - vbox - 1 - - - hbox - - - - - true - - - - - hbox - - - table - - - 0 - 0 - - - - - 0 - 1 - 2 - - - - - 0 - 3 - - - - - 0 - 4 - - - - - 0 - 5 - - - - - 1 - 0 - 52 - /environment/config/boundary/entry[1]/elevation-ft - true - - - - 1 - 1 - 40 - /environment/config/boundary/entry[1]/wind-from-heading-deg - true - - - - 1 - 2 - 35 - /environment/config/boundary/entry[1]/wind-speed-kt - true - - - - 1 - 3 - 55 - /environment/config/boundary/entry[1]/visibility-m - true - - - - 1 - 4 - 60 - /environment/config/boundary/entry[1]/temperature-degc - true - - - - 1 - 5 - 60 - /environment/config/boundary/entry[1]/dewpoint-degc - true - - - - 2 - 0 - 52 - /environment/config/boundary/entry[0]/elevation-ft - true - - - - 2 - 1 - 40 - /environment/config/boundary/entry[0]/wind-from-heading-deg - true - - - - 2 - 2 - 35 - /environment/config/boundary/entry[0]/wind-speed-kt - true - - - - 2 - 3 - 55 - /environment/config/boundary/entry[0]/visibility-m - true - - - - 2 - 4 - 60 - /environment/config/boundary/entry[0]/temperature-degc - true - - - - 2 - 5 - 60 - /environment/config/boundary/entry[0]/dewpoint-degc - true - - - - true - - - - - - - - - - - - - vbox - - - - hbox - - - - - true - - - - - hbox - - - - - source-selection - fill - true - sim/gui/dialogs/weather-scenario/source-selection - - dialog-apply - source-selection - - - dialog-update - metar - - - nasal - - - - - - /environment/params/metar-updates-winds-aloft - - true - - dialog-apply - - aloft - - - - - - description - fill - true - 180 - 60 - 20 - false - true - true - sim/gui/dialogs/weather-scenario/description - - - - hbox - - - - - true - - - - - metar - fill - true - 180 - 50 - 20 - true - true - false - sim/gui/dialogs/weather-scenario/metar - - - - - - - - - - - - + + + + + + weather + false + false + vbox + 3 + + + + hbox + 1 + + + true + + + + + + + + true + + + + + + + + hbox + 0 + + + + vbox + + vbox + 1 + + + + hbox + + + + + true + + + + + hbox + + table + + + + 0 + 1 + + + + + 0 + 2 + 80 + + + + + 0 + 3 + + + + + + + 1 + 1 + true + /environment/clouds/layer[4]/elevation-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 1 + 2 + 100 + true + /environment/clouds/layer[4]/coverage + clear + few + scattered + broken + overcast + cirrus + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 1 + 3 + true + /environment/clouds/layer[4]/thickness-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + + + + 2 + 1 + true + /environment/clouds/layer[3]/elevation-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 2 + 2 + 100 + true + /environment/clouds/layer[3]/coverage + clear + few + scattered + broken + overcast + cirrus + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 2 + 3 + true + /environment/clouds/layer[3]/thickness-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + + + + 3 + 1 + true + /environment/clouds/layer[2]/elevation-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 3 + 2 + 100 + true + /environment/clouds/layer[2]/coverage + clear + few + scattered + broken + overcast + cirrus + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 3 + 3 + true + /environment/clouds/layer[2]/thickness-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + + + + 4 + 1 + true + /environment/clouds/layer[1]/elevation-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 4 + 2 + 100 + true + /environment/clouds/layer[1]/coverage + clear + few + scattered + broken + overcast + cirrus + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 4 + 3 + true + /environment/clouds/layer[1]/thickness-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + + + + 5 + 1 + true + /environment/clouds/layer[0]/elevation-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 5 + 2 + 100 + true + false + /environment/clouds/layer[0]/coverage + clear + few + scattered + broken + overcast + cirrus + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 5 + 3 + true + /environment/clouds/layer[0]/thickness-ft + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + + true + + + + + + + + vbox + 1 + + + hbox + + + + + true + + + + + hbox + fill + + table + + 0 + 0 + + + + + 0 + 1 + + + + + 1 + 0 + true + fill + /environment/metar/rain-norm + + dialog-apply + + true + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 1 + 1 + fill + /environment/metar/snow-norm + true + 30 + + dialog-apply + + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + 0 + 3 + + + + + pressure-sea-level-inhg + 1 + 3 + 50 + /environment/config/boundary/entry[0]/pressure-sea-level-inhg + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + true + + dialog-apply + pressure-sea-level-inhg + + + + + 2 + 0 + 3 + 30 + + + + + + true + + + + + + + + + true + + + + + vbox + + + + vbox + 1 + + + hbox + + + + + true + + + + + hbox + + table + + 0 + 0 + + + + + 0 + 1 + 2 + + + + + 0 + 3 + + + + + 0 + 4 + + + + + 0 + 5 + + + + + aloft-4-elevation-ft + 1 + 0 + 52 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[4]/elevation-ft + true + + dialog-apply + aloft-4-elevation-ft + + + + + aloft-4-wind-from-heading-deg + 1 + 1 + 40 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[4]/wind-from-heading-deg + true + + dialog-apply + aloft-4-wind-from-heading-deg + + + + + aloft-4-wind-speed-kt + 1 + 2 + 35 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[4]/wind-speed-kt + true + + dialog-apply + aloft-4-wind-speed-kt + + + + + aloft-4-visibility-m + 1 + 3 + 55 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[4]/visibility-m + true + + dialog-apply + aloft-4-visibility-m + + + + + aloft-4-temperature-degc + 1 + 4 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[4]/temperature-degc + true + + dialog-apply + aloft-4-temperature-degc + + + + + aloft-4-dewpoint-degc + 1 + 5 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[4]/dewpoint-degc + true + + dialog-apply + aloft-4-dewpoint-degc + + + + + aloft-3-elevation-ft + 2 + 0 + 52 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[3]/elevation-ft + true + + dialog-apply + aloft-3-elevation-ft + + + + + aloft-3-wind-from-heading-deg + 2 + 1 + 40 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[3]/wind-from-heading-deg + true + + dialog-apply + aloft-3-wind-from-heading-deg + + + + + aloft-3-wind-speed-kt + 2 + 2 + 35 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[3]/wind-speed-kt + true + + dialog-apply + aloft-3-wind-speed-kt + + + + + aloft-3-visibility-m + 2 + 3 + 55 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[3]/visibility-m + true + + dialog-apply + aloft-3-visibility-m + + + + + aloft-3-temperature-degc + 2 + 4 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[3]/temperature-degc + true + + dialog-apply + aloft-3-temperature-degc + + + + + aloft-3-dewpoint-degc + 2 + 5 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[3]/dewpoint-degc + true + + dialog-apply + aloft-3-dewpoint-degc + + + + + aloft-2-elevation-ft + 3 + 0 + 52 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[2]/elevation-ft + true + + dialog-apply + aloft-2-elevation-ft + + + + + aloft-2-wind-from-heading-deg + 3 + 1 + 40 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[2]/wind-from-heading-deg + true + + dialog-apply + aloft-2-wind-from-heading-deg + + + + + aloft-2-wind-speed-kt + 3 + 2 + 35 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[2]/wind-speed-kt + true + + dialog-apply + aloft-2-wind-speed-kt + + + + + aloft-2-visibility-m + 3 + 3 + 55 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[2]/visibility-m + true + + dialog-apply + aloft-2-visibility-m + + + + + aloft-2-temperature-degc + 3 + 4 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[2]/temperature-degc + true + + dialog-apply + aloft-2-temperature-degc + + + + + aloft-2-dewpoint-degc + 3 + 5 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[2]/dewpoint-degc + true + + dialog-apply + aloft-2-dewpoint-degc + + + + + aloft-1-elevation-ft + 4 + 0 + 52 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[1]/elevation-ft + true + + dialog-apply + aloft-1-elevation-ft + + + + + aloft-1-wind-from-heading-deg + 4 + 1 + 40 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[1]/wind-from-heading-deg + true + + dialog-apply + aloft-1-wind-from-heading-deg + + + + + aloft-1-wind-speed-kt + 4 + 2 + 35 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[1]/wind-speed-kt + true + + dialog-apply + aloft-1-wind-speed-kt + + + + + aloft-1-visibility-m + 4 + 3 + 55 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[1]/visibility-m + true + + dialog-apply + aloft-1-visibility-m + + + + + aloft-1-temperature-degc + 4 + 4 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[1]/temperature-degc + true + + dialog-apply + aloft-1-temperature-degc + + + + + aloft-1-dewpoint-degc + 4 + 5 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[1]/dewpoint-degc + true + + dialog-apply + aloft-1-dewpoint-degc + + + + + aloft-0-elevation-ft + 5 + 0 + 52 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[0]/elevation-ft + true + + dialog-apply + aloft-0-elevation-ft + + + + + aloft-0-wind-from-heading-deg + 5 + 1 + 40 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[0]/wind-from-heading-deg + true + + dialog-apply + aloft-0-wind-from-heading-deg + + + + + aloft-0-wind-speed-kt + 5 + 2 + 35 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[0]/wind-speed-kt + true + + dialog-apply + aloft-0-wind-speed-kt + + + + + aloft-0-visibility-m + 5 + 3 + 55 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[0]/visibility-m + true + + dialog-apply + aloft-0-visibility-m + + + + + aloft-0-temperature-degc + 5 + 4 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[0]/temperature-degc + true + + dialog-apply + aloft-0-temperature-degc + + + + + aloft-0-dewpoint-degc + 5 + 5 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/aloft/entry[0]/dewpoint-degc + true + + dialog-apply + aloft-0-dewpoint-degc + + + + + true + + + + + + + + + vbox + 1 + + + hbox + + + + + true + + + + + hbox + + + table + + + 0 + 0 + + + + + 0 + 1 + 2 + + + + + 0 + 3 + + + + + 0 + 4 + + + + + 0 + 5 + + + + + boundary-1-elevation-ft + 1 + 0 + 52 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[1]/elevation-ft + true + + dialog-apply + boundary-1-elevation-ft + + + + + boundary-1-wind-from-heading-deg + 1 + 1 + 40 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[1]/wind-from-heading-deg + true + + dialog-apply + boundary-1-wind-from-heading-deg + + + + + boundary-1-wind-speed-kt + 1 + 2 + 35 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[1]/wind-speed-kt + true + + dialog-apply + boundary-1-wind-speed-kt + + + + + boundary-1-visibility-m + 1 + 3 + 55 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[1]/visibility-m + true + + dialog-apply + boundary-1-visibility-m + + + + + boundary-1-temperature-degc + 1 + 4 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[1]/temperature-degc + true + + dialog-apply + boundary-1-temperature-degc + + + + + boundary-1-dewpoint-degc + 1 + 5 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[1]/dewpoint-degc + true + + dialog-apply + boundary-1-dewpoint-degc + + + + + boundary-0-elevation-ft + 2 + 0 + 52 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[0]/elevation-ft + true + + dialog-apply + boundary-0-elevation-ft + + + + + boundary-0-wind-from-heading-deg + 2 + 1 + 40 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[0]/wind-from-heading-deg + true + + dialog-apply + boundary-0-wind-from-heading-deg + + + + + boundary-0-wind-speed-kt + 2 + 2 + 35 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[0]/wind-speed-kt + true + + dialog-apply + boundary-0-wind-speed-kt + + + + + boundary-0-visibility-m + 2 + 3 + 55 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[0]/visibility-m + true + + dialog-apply + boundary-0-visibility-m + + + + + boundary-0-temperature-degc + 2 + 4 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[0]/temperature-degc + true + + dialog-apply + boundary-0-temperature-degc + + + + + boundary-0-dewpoint-degc + 2 + 5 + 60 + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + /environment/config/boundary/entry[0]/dewpoint-degc + true + + dialog-apply + boundary-0-dewpoint-degc + + + + + true + + + + + + + + + + + + + vbox + + + + hbox + + + + + true + + + + + hbox + + + + + source-selection + fill + true + sim/gui/dialogs/weather-scenario/source-selection + + dialog-apply + source-selection + + + dialog-update + metar + + + + + metar-updates-winds-aloft + /environment/params/metar-updates-winds-aloft + + true + + dialog-apply + metar-updates-winds-aloft + + + + + + + description + fill + true + 180 + 60 + 20 + false + true + true + sim/gui/dialogs/weather-scenario/description + + + + hbox + + + + + true + + + /environment/metar/valid + + true + false + + + + + metar + fill + true + 180 + 50 + 20 + true + true + false + sim/gui/dialogs/weather-scenario/metar + + + /sim/gui/dialogs/weather-scenario/state + 1 + + + + + + + + + + + + + + diff --git a/gui/menubar.xml b/gui/menubar.xml index 8126aa4ea..d13b2877c 100644 --- a/gui/menubar.xml +++ b/gui/menubar.xml @@ -1,10 +1,11 @@ + - + + + reset - + - + nasal + @@ -65,23 +97,7 @@ - - - nasal - - - - - - - - dialog-show - logging - - - - - + dialog-show exit @@ -109,6 +125,16 @@ + dialog-show @@ -124,6 +150,14 @@ + + + + dialog-show + static-lod + + + @@ -141,7 +175,19 @@ - + + + nasal + + + + + + dialog-show replay @@ -149,18 +195,10 @@ - + dialog-show - static-lod - - - - - - - dialog-show - osg-display-settings + stereoscopic-view-options @@ -193,7 +231,7 @@ - + H property-assign /sim/presets/trim @@ -234,7 +272,7 @@ autopilot - + dialog-show autopilot @@ -249,45 +287,42 @@ - + nasal - - + + nasal - - - - - nasal - - - - - - - - dialog-show - map - - + + @@ -296,23 +331,31 @@ - - - - dialog-show - local_weather - - - - - - - dialog-show - local_weather_tiles - - - - + + + + dialog-show + local_weather + + + + + + + dialog-show + local_weather_tiles + + + + + + + dialog-show + local_weather_config + + + + dialog-show @@ -333,6 +376,22 @@ + + + + dialog-show + map + + + + + + + dialog-show + stopwatch-dialog + + + fuel-and-payload @@ -343,7 +402,7 @@ - + dialog-show radios @@ -366,12 +425,10 @@ + + - - - dialog-show - stopwatch-dialog - + @@ -401,24 +458,32 @@ - - + + + dialog-show + ai + + + - + dialog-show - atc-ai + formation - + tanker false @@ -428,20 +493,31 @@ - + + + dialog-show + AIcarrier + + + + + dialog-show scenario + + + - + multiplayer - + dialog-show chat-full @@ -470,13 +546,15 @@ nasal + + @@ -513,13 +591,13 @@ - - - - reinit - io - - + + + + reinit + io + + @@ -577,20 +655,32 @@ 1 + + + + + nasal + + + + + + + + dialog-show + logging + + + + + - - - dialog-show - about - - - - + old-help-dialog @@ -606,7 +696,11 @@ - + + + + + nasal @@ -622,7 +716,7 @@ - + nasal @@ -630,15 +724,7 @@ - - - nasal - - + @@ -659,6 +745,14 @@ + + + + + dialog-show + about + + diff --git a/keyboard.xml b/keyboard.xml index e4010ac4d..d61f3d731 100644 --- a/keyboard.xml +++ b/keyboard.xml @@ -272,7 +272,7 @@ top down before the key bindings are parsed. SPACE - PTT - Push To Talk (via VoIP) + PTT - Push To Talk (via FGCom) nasal diff --git a/preferences.xml b/preferences.xml index 5a01e6347..df1e8b200 100644 --- a/preferences.xml +++ b/preferences.xml @@ -148,6 +148,7 @@ Started September 2000 by David Megginson, david@megginson.com 0 0 + 0 0 0 0 @@ -290,6 +291,14 @@ Started September 2000 by David Megginson, david@megginson.com Aircraft/Generic/generic-autopilot-helper.xml + + Environment METAR Interpolation Rule + Environment/metarinterpolator.xml + + + Environment Interpolation Rule + Environment/interpolator.xml + Aircraft/Generic/generic-instrumentation.xml