preferences.xml: drop /sim/input/selected/engine settings (these properties
are set in controls.nas since ages) controls.nas: avoid repeated querying of /sim/input/selected/engine[*] properties; this isn't supposed to change at runtime and is a rather costly process, especially in axis handlers
This commit is contained in:
parent
eb42fbda8c
commit
c35f3207d3
2 changed files with 51 additions and 77 deletions
|
@ -1,59 +1,36 @@
|
|||
var startEngine = func {
|
||||
var sel = props.globals.getNode("/sim/input/selected");
|
||||
var engs = props.globals.getNode("/controls/engines").getChildren("engine");
|
||||
for(var i=0; i<size(engs); i+=1) {
|
||||
var select = sel.getChild("engine", i);
|
||||
if(select != nil and select.getValue() != 0) {
|
||||
engs[i].getNode("starter").setBoolValue(1);
|
||||
}
|
||||
}
|
||||
var startEngine = func(v = 1) {
|
||||
foreach(var e; engines)
|
||||
if(e.selected.getValue())
|
||||
e.controls.getNode("starter").setBoolValue(v);
|
||||
}
|
||||
|
||||
# Initialization hack (called after initialization via a timeout), to
|
||||
# make sure that the number of engine properties in the selection tree
|
||||
# match the actual number of engines. This should probably be fixed in a
|
||||
# more elegant way...
|
||||
var initSelectProps = func {
|
||||
var engs = props.globals.getNode("/controls/engines").getChildren("engine");
|
||||
var sel = props.globals.getNode("/sim/input/selected");
|
||||
for(var i=0; i<size(engs); i+=1) {
|
||||
if(sel.getChild("engine", i) == nil) {
|
||||
sel.getNode("engine[" ~ i ~ "]", 1); }}
|
||||
}
|
||||
settimer(initSelectProps, 0);
|
||||
|
||||
var selectEngine = func {
|
||||
var sel = props.globals.getNode("/sim/input/selected").getChildren("engine");
|
||||
foreach(var node; sel) { node.setBoolValue(node.getIndex() == arg[0]); }
|
||||
var selectEngine = func(which) {
|
||||
foreach(var e; engines) e.selected.setBoolValue(which == e.index);
|
||||
}
|
||||
|
||||
# Selects (state=1) or deselects (state=0) a list of engines, or all
|
||||
# engines if no list is specified. Example: selectEngines(1, 1, 3, 5);
|
||||
#
|
||||
var selectEngines = func (state, engines...) {
|
||||
var sel = props.globals.getNode("/sim/input/selected");
|
||||
if(size(engines)) {
|
||||
foreach(var e; engines)
|
||||
sel.getChild("engine", e, 1).setBoolValue(state);
|
||||
var selectEngines = func (state, which...) {
|
||||
if(size(which)) {
|
||||
foreach(var i; which)
|
||||
foreach(var e; engines)
|
||||
if(e.index == i)
|
||||
e.selected.setBoolValue(state);
|
||||
} else {
|
||||
foreach(var e; sel.getChildren("engine"))
|
||||
e.setBoolValue(state);
|
||||
foreach(var e; engines)
|
||||
e.selected.setBoolValue(state);
|
||||
}
|
||||
}
|
||||
|
||||
var selectAllEngines = func {
|
||||
var sel = props.globals.getNode("/sim/input/selected").getChildren("engine");
|
||||
foreach(var node; sel) { node.setBoolValue(1); }
|
||||
foreach(var e; engines) e.selected.setBoolValue(1);
|
||||
}
|
||||
|
||||
var stepMagnetos = func {
|
||||
var change = arg[0];
|
||||
var engs = props.globals.getNode("/controls/engines").getChildren("engine");
|
||||
var sel = props.globals.getNode("/sim/input/selected");
|
||||
for(var i=0; i<size(engs); i+=1) {
|
||||
var select = sel.getChild("engine", i);
|
||||
if(select != nil and select.getValue() != 0) {
|
||||
var mag = engs[i].getNode("magnetos", 1);
|
||||
var stepMagnetos = func(change) {
|
||||
foreach(var e; engines) {
|
||||
if(e.selected.getValue()) {
|
||||
var mag = e.controls.getNode("magnetos", 1);
|
||||
mag.setIntValue(mag.getValue() + change);
|
||||
}
|
||||
}
|
||||
|
@ -67,14 +44,13 @@ var centerFlightControls = func {
|
|||
|
||||
var throttleMouse = func {
|
||||
if(!getprop("/devices/status/mice/mouse[0]/button[1]")) return;
|
||||
var sel = props.globals.getNode("/sim/input/selected").getChildren("engine");
|
||||
var delta = cmdarg().getNode("offset").getValue() * -4;
|
||||
foreach(var n; sel) {
|
||||
if(!n.getValue()) continue;
|
||||
var throttle = "/controls/engines/engine[" ~ n.getIndex() ~ "]/throttle";
|
||||
var val = getprop(throttle) + delta;
|
||||
foreach(var e; engines) {
|
||||
if(!e.selected.getValue()) continue;
|
||||
var throttle = e.controls.getNode("throttle");
|
||||
var val = throttle.getValue() + delta;
|
||||
if(size(arg) > 0) val = -val;
|
||||
setprop(throttle, val);
|
||||
throttle.setDoubleValue(val);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,10 +59,9 @@ var throttleMouse = func {
|
|||
var adjustAxis = func(invert, pre, post) {
|
||||
var val = cmdarg().getNode("setting").getValue();
|
||||
if(invert) val = -val;
|
||||
var sel = props.globals.getNode("/sim/input/selected").getChildren("engine");
|
||||
foreach(var n; sel)
|
||||
if(n.getValue())
|
||||
setprop(pre ~ n.getIndex() ~ post, (1 - val)/2);
|
||||
foreach(var e; engines)
|
||||
if(e.selected.getValue())
|
||||
setprop(pre ~ e.index ~ post, (1 - val)/2);
|
||||
}
|
||||
var throttleAxis = func
|
||||
adjustAxis(size(arg), "/controls/engines/engine[", "]/throttle");
|
||||
|
@ -223,12 +198,10 @@ var adjPropeller = func {
|
|||
adjEngControl("propeller-pitch", arg[0]); }
|
||||
|
||||
var adjEngControl = func {
|
||||
var engs = props.globals.getNode("/controls/engines").getChildren("engine");
|
||||
var selected = props.globals.getNode("/sim/input/selected");
|
||||
var delta = arg[1] * THROTTLE_RATE * getprop("/sim/time/delta-realtime-sec");
|
||||
foreach(var e; engs) {
|
||||
if(selected.getChild("engine", e.getIndex(), 1).getBoolValue()) {
|
||||
var node = e.getNode(arg[0], 1);
|
||||
foreach(var e; engines) {
|
||||
if(e.selected.getValue()) {
|
||||
var node = e.controls.getNode(arg[0], 1);
|
||||
node.setValue(node.getValue() + delta);
|
||||
}
|
||||
}
|
||||
|
@ -239,12 +212,10 @@ var adjEngControl = func {
|
|||
# arg[1] is the auto-throttle target speed increment
|
||||
var incThrottle = func {
|
||||
var auto = props.globals.getNode("/autopilot/locks/speed", 1);
|
||||
var sel = props.globals.getNode("/sim/input/selected");
|
||||
if (!auto.getValue()) {
|
||||
var engs = props.globals.getNode("/controls/engines").getChildren("engine");
|
||||
foreach(var e; engs) {
|
||||
if(sel.getChild("engine", e.getIndex(), 1).getBoolValue()) {
|
||||
var node = e.getNode("throttle", 1);
|
||||
foreach(var e; engines) {
|
||||
if(e.selected.getValue()) {
|
||||
var node = e.controls.getNode("throttle", 1);
|
||||
var val = node.getValue() + arg[0];
|
||||
node.setValue(val < -1.0 ? -1.0 : val > 1.0 ? 1.0 : val);
|
||||
}
|
||||
|
@ -388,7 +359,7 @@ var weaponSelect = func(d) {
|
|||
var ptt = func(b) setprop("/instrumentation/comm/ptt", b);
|
||||
|
||||
##
|
||||
# Lighting
|
||||
# Lighting.
|
||||
#
|
||||
var toggleLights = func {
|
||||
if (getprop("/controls/switches/panel-lights")) {
|
||||
|
@ -413,3 +384,20 @@ var toggleLights = func {
|
|||
setprop("/controls/switches/nav-lights", 1);
|
||||
}
|
||||
}
|
||||
|
||||
##
|
||||
# Initialization.
|
||||
#
|
||||
var engines = [];
|
||||
_setlistener("/sim/signals/fdm-initialized", func {
|
||||
var sel = props.globals.getNode("/sim/input/selected", 1);
|
||||
var engs = props.globals.getNode("/controls/engines").getChildren("engine");
|
||||
|
||||
foreach(var e; engs) {
|
||||
var index = e.getIndex();
|
||||
var s = sel.getChild("engine", index, 1);
|
||||
if(s.getType() == "NONE") s.setBoolValue(1);
|
||||
append(engines, { index: index, controls: e, selected: s });
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -233,20 +233,6 @@ Started September 2000 by David Megginson, david@megginson.com
|
|||
</dg>
|
||||
</instrument-options>
|
||||
<input>
|
||||
<selected>
|
||||
<engine n="0" type="bool">true</engine>
|
||||
<engine n="1" type="bool">true</engine>
|
||||
<engine n="2" type="bool">true</engine>
|
||||
<engine n="3" type="bool">true</engine>
|
||||
<engine n="4" type="bool">true</engine>
|
||||
<engine n="5" type="bool">true</engine>
|
||||
<engine n="6" type="bool">true</engine>
|
||||
<engine n="7" type="bool">true</engine>
|
||||
<engine n="8" type="bool">true</engine>
|
||||
<engine n="9" type="bool">true</engine>
|
||||
<engine n="10" type="bool">true</engine>
|
||||
<engine n="11" type="bool">true</engine>
|
||||
</selected>
|
||||
<property-key-handler type="bool" userarchive="y">false</property-key-handler>
|
||||
</input>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue