godarklight wrote in Sat Aug 18, 2012 12:11 pm: Im not sure if thats the correct way to toggle a property either but abs(value-1) does work...
Not really, the correct version is this as it doesn't get stuck if it's at 0.5:
- Code: Select all
var reverser = !getprop("/controls/engines/engine[0]/reverser");
props.setAll("/controls/engines/engine", "reverser", reverser);
If the property is 0 then it gets set to 1, else it gets set to 0.
Okay, here's my first contribution from my Cyborg-X file (lots more will be coming ):
My trigger script, adapted from the Cyborg-Evo.xml, designed for modifier combinations 0-4 that are stored in a NASAL variable (important) called "mod" whenever it's changed. If your modifier is stored exclusively in the property tree, then you need a line like: var mod = getprop("/input/joysticks/js[0]/modifier");
On the ground: Sets brakes with no mod or mod == 3 (used for differential braking on my joystick), toggles parking on release and mod == 1, toggles speedbrake/spoilers INDEPENDENTLY on mod == 2, toggle thrust reverser with mod == 4.
In the air: sets trigger0 with no mod, sets trigger1 with mod == 3, otherwise same as above.
- Code: Select all
<!-- Trigger Button - Brakes, Parking Brake, Speed Brake, Thrust Reverser -->
<button n="0">
<desc>Brakes (regular, park, speed, thrust reverser)</desc>
<repeatable type="bool">true</repeatable>
<binding>
<command>nasal</command>
<script><![CDATA[
#if on land
if (getprop("/gear/gear[0]/wow") or getprop("/gear/gear[1]/wow") or getprop("/gear/gear[2]/wow")) {
#regular brakes, i was having funny effects with the interpolation on the dragonfly,
#the left one would go quickly and the right would lag behind,
#so I took out the interpolation
if (mod == nil or mod == 0 or mod == 3 or mod == 1) {
#interpolate("/controls/gear/brake-left", 1, 0.075);
#interpolate("/controls/gear/brake-right", 1, 0.075);
setprop("/controls/gear/brake-left", 1);
setprop("/controls/gear/brake-right", 1);
} elsif (mod == 2) {
#
} elsif (mod == 3) {
#
}
} else {
#air:
if (mod == nil or mod == 0) {
setprop("/controls/armament/trigger", 1);
} elsif (mod == 1) {
#
} elsif (mod == 2) {
#
} elsif (mod == 3) { #differential braking modifier, not used in the air
setprop("/controls/armament/trigger1", 1);
} elsif (mod == 4) {
#
}
}]]>
</script>
</binding>
<mod-up>
<repeatable type="bool">true</repeatable>
<binding>
<command>nasal</command>
<script><![CDATA[
#one if by land... oh wait, that isn't how it goes. But this is for land:
if (getprop("/gear/gear[0]/wow") or getprop("/gear/gear[1]/wow") or getprop("/gear/gear[2]/wow")) {
#no mod, release brakes (you can do interpolation, see above)
if (mod == nil or mod == 0 or mod == 3) {
#interpolate("/controls/gear/brake-left", 0, 0.075);
#interpolate("/controls/gear/brake-right", 0, 0.075);
setprop("/controls/gear/brake-left", 0);
setprop("/controls/gear/brake-right", 0);
#toggle parking brake on mod-up
} elsif (mod == 1) {
var brake = !getprop("/controls/gear/brake-parking");
setprop("/controls/gear/brake-parking", brake);
if (brake) {
gui.popupTip("Parking Brake ON");
} else {
gui.popupTip("Parking Brake OFF");
}
setprop("/controls/gear/brake-left", 0);
setprop("/controls/gear/brake-right", 0);
#toggle speedbrake and spoilers independently, and only show the speedbrake value
} elsif (mod == 2) {
var speedbrake = !getprop("/controls/flight/speedbrake");
setprop("/controls/flight/speedbrake", speedbrake);
var spoilers = !getprop("/controls/flight/spoilers");
setprop("/controls/flight/spoilers", spoilers);
if (speedbrake) {
gui.popupTip("Speedbrake ON");
} else {
gui.popupTip("Speedbrake OFF");
}
} elsif (mod == 3) {
#
} elsif (mod == 4) {
var reverser = !getprop("/controls/engines/engine[0]/reverser");
props.setAll("/controls/engines/engine", "reverser", reverser);
if (reverser) {
gui.popupTip("Thrust Reverser ON");
} else {
gui.popupTip("Thrust Reverser OFF");
}
}
#two if by air:
} else {
#the trigger up is handled at the end, regardless of mod #
if (mod == nil or mod == 0) {
#
#parking brake, mod=1:
} elsif (mod == 1) {
var brake = !getprop("/controls/gear/brake-parking");
setprop("/controls/gear/brake-parking", brake);
if (brake) {
gui.popupTip("Parking Brake ON");
} else {
gui.popupTip("Parking Brake OFF");
}
setprop("/controls/gear/brake-left", 0);
setprop("/controls/gear/brake-right", 0);
#toggles independently and only shows speedbrake, not spoilers
} elsif (mod == 2) {
var speedbrake = !getprop("/controls/flight/speedbrake");
setprop("/controls/flight/speedbrake", speedbrake);
var spoilers = !getprop("/controls/flight/spoilers");
setprop("/controls/flight/spoilers", spoilers);
if (getprop("/controls/flight/spoilers")) {
gui.popupTip("Speedbrake ON");
} else {
gui.popupTip("Speedbrake OFF");
}
} elsif (mod == 3) {
#
} elsif (mod == 4) {
var reverser = !getprop("/controls/engines/engine[0]/reverser");
props.setAll("/controls/engines/engine", "reverser", reverser);
if (reverser) {
gui.popupTip("Thrust Reverser ON");
} else {
gui.popupTip("Thrust Reverser OFF");
}
}
}
setprop("/controls/armament/trigger", 0); #shut down the firing, interferes with the 'e' key, but life is life and who wants to reach over there anyways?
setprop("/controls/armament/trigger1", 0);]]>
</script>
</binding>
</mod-up>
</button>
Feel free to PM me if you want anything joystick related, e.g. help on converting my code snippets, if something isn't working, or feature requests. I'll be glad to help.
P.S. @e-Tron: I have my own Cyborg-X file, but it didn't have a F.L.Y. 5 names in it, so thanks for posting and helping me .