Hallo Joni,
ich weiß nicht, ob das jetzt noch hilfreich ist:
habe mich daran versucht, nachdem ich im Wiki an mehreren Stellen was gefunden hatte.
Zunächst wollte ich die Überwachung der Property 'reverser' für beide Motoren getrennt haben, wegen der Throttle-GUI.
soetwas:
- Code: Alles auswählen
var reverse_chg1 = func {
if (getprop("controls/engines/engine[1]/reverser")) {
gui.popupTip("Thrust reverse active (engine[1])", 30, nil, {x: 1, y: 1});
} else {
gui.popupTip("Thrust reverse inactive (engine[1])", 30, nil, {x: 1, y: 1});
}
}
setlistener("/controls/engines/engine[1]/reverser", reverse_chg1); ## test: (komisch, das wird bei allen engines getriggert...)
funktioniert, allerdings habe ich da beobachtet, dass allein die einzelne Zeile:
- Code: Alles auswählen
setlistener("/controls/engines/engine[1]/reverser", reverse_chg1);
dazu führt, das bei jeder Änderung des Umkehrschubs mit dem Throttle-GUI-Widget, ob rechts oder links, die Funktion getriggert wird,
evtl wird da schon bei einem anderen Listener bei jeder Änderung in die (beide) Properties geschrieben?
oder kann man nicht getrennt je einen unabhängigen Listener haben (liegt das daran, dass es im Property-Tree statt .../engine[0]/ die Verzweigung .../engine/ gibt?)
Also, da ist mir einiges nicht klar, evtl kann mir jmd damit auf die Sprünge helfen?
Dann hab ich halt mal wie folgt beide Property-Abfragen in eine Funktion gepackt:
- Code: Alles auswählen
var reverse_chg = func {
if (getprop("controls/engines/engine[0]/reverser")) {
mess_e0="active (engine[0])"
} else {
mess_e0="inactive (engine[0])"
}
if (getprop("controls/engines/engine[1]/reverser")) {
mess_e1="active (engine[1])"
} else {
mess_e1="inactive (engine[1])"
}
gui.popupTip(sprintf("Thrust reverse:\n%s\n%s", mess_e0, mess_e1), 30, nil, {x: 1, y: 1});
}
setlistener("/controls/engines/engine[1]/reverser", reverse_chg); ## test: (komisch, das wird bei allen engines getriggert...)
es ist momentan anscheinend egal, welche Engine-Property dann überwacht wird...
Bei Tests mit der svn-Version der Twin Otter ist mir auch aufgefallen, dass die GUI-Slider, nachdem man die Motoren gestartet hat nur noch auf den ersten Motor 'hören', also der Schub des zweiten Mortors und die Animation der Schubhebel im Cockpit sich nur noch nach der 'reverser'-Property des linken Motors richten.
_______________
edit: nach dem separaten Testen des Umkehrschubs auf beiden Motoren mittels Tastenkombination (auf die Schnelle in die -base.xml eingefügt) hat sich gezeigt, dass hier nur der Listener der entsprechenden Engine-Property reagiert, ich vermute deshalb, dass mit dem GUI-Regler-Fensterchen irgendwie immer beide Properties geschrieben werden und deshalb immer ein evtl. vorhandener Listener, egal auf welcher Engine getriggert wird.
edit1: erstmal die Bitte um Verzeihung für den langen Post!
...ich habe da noch ein bischen dran gesessen und meine herausgefunden zu haben, wie man das mit den Listenern schöner machen kann, generell finde ich hier eine getrennte Benachrichtigung für die Motoren besser, allerdings weiß ich gerade noch nicht, wie man dann abfängt, dass beide Properties umgeschaltet wurden, da die Tooltips sich ersetzen,sieht man dann nur die letzte Benachrichtigung...
- Code: Alles auswählen
var reverse_chg = func (c_node, c_name) {
if (c_node.getValue())
var c_status = "active";
else
var c_status = "inactive";
print("Thrust reverse " ~ c_status ~ ": " ~ c_name);
gui.popupTip(sprintf("Thrust reverse %s: %s", c_status, c_name), 30, nil, {x: 1, y: 1});
};
setlistener("/controls/engines/engine[0]/reverser", func(c_node) { reverse_chg(c_node, c_name="engine 1"); });
setlistener("/controls/engines/engine[1]/reverser", func(c_node) { reverse_chg(c_node, c_name="engine 2"); });
Gruß, Sebastian
i5-2400 - 8GB DDR3 - integrated Graphics - Ubuntu 14.04.5 64bit lubuntu-desktop - FG: stable | next (wiki.flightgear.org/Scripted_Compilation_on_Linux_Debian/Ubuntu)