Changes

Jump to: navigation, search

Writing Joystick Code: Part 2

1,207 bytes added, 11:40, 13 October 2012
no edit summary
{{WIP}}
 
== Code snippets ==
Make sure you have read [[Input device]] and [[Writing Joystick Code: Part 1]] first.
These Code snippets are what you use instead of ''Your code goes here'' amd and ''Ctrl-Alt button released''as seen in Part 1.You just need to put them in the right place - inbetween in between the <script> and </script> tags.  '''Please note that some of them have concepts that will be explained in Part 3.'''
Please note that some of them have concepts that will be explained in a later section.
Each snippet has the following format:
Action R/NRS C
Code for action
U
Where Action is what you want to do, R means use with a repeatable button, NR means use with a non-repeatable button,
and U is the code for <mod-up>. If it is emptynot there, a <mod-up> is not needed.
Some Actions will have code for use with repeatable and An S, if present, means that it is a step action. gearDown is not a step-action, the gear is either up or down. flapsDown is a step action. Each time you send a flapsDown command the flaps go down one notch. This matters not if you are using a non-repeatable buttonsbutton, but if you use a repeating button, as long as you are pressing the button, flapsDown commands are being sent. This means that if you are still pressing the button when the flaps reach the next notch, they will go down one more notch.
The C, if present, means that whatever is being controlled is continously variable between its limits. An example is elevator trim. It moves between full-down to full-up in very tiny steps. Very tiny. Some Actions will have code for use with repeatable and non-repeatable buttons. Sometimes it is not wise to use the wrong type for a certain action. And sometimes you must use the correct type for an action - using a non-repeating button for Zoom is a bad idea, the user will have to constantly keep triggering the button to reach the zoom level he requires. Using a repeatable button is possible for something like gearDown, as long as the use knows to just use a brief push, but it is a bad idea. Notice that some commands have a +1 or a -1 in brackets to specify the direction of the action, and a 0 to say stop doing that. The 0 version will of course be in the <mod-ip> section.
If the action is upside-down for you, swap the + and - signs.
Also, sometimes the 1 is replaced by a number, which specifies by how much the action should be carried out. This is of course not approprite for all actions - you would not want to lower the gear just 75% of the way.
If the action is too vicious for you, make the number smaller.
Gear down NR
controls.gearDown(1)
U
controls.gearDown(0)
Gear up NR
controls.gearDown(-1) U controls.gearDown(0)
-----------------------------------------------------------------------------
Flaps down one notch NRS controls.gearDownflapsDown(1) U controls.gearDown(0)
Flaps up one notch NRS controls.gearDownflapsDown(-1) U controls.gearDown(0)
-----------------------------------------------------------------------------
Deploy spoilers NRS controls.stepSpoilers(1) U controls.stepSpoilers(0)
Retract spoilers NRS
controls.stepSpoilers(-1)
U
controls.stepSpoilers(0)
-----------------------------------------------------------------------------
Cycle View NR
view.stepView(1) U
-----------------------------------------------------------------------------
Elevator trim down RC controls.elevatorTrim(0.75) U
Elevator trim up RC controls.elevatorTrim(-0.75) U
-----------------------------------------------------------------------------
Elevator Trim down NRC interpolate("/controls/flight/elevator-trim", 1, 30 * (1 - getprop("controls/flight/elevator-trim")))
U
interpolate("/controls/flight/elevator-trim", getprop("controls/flight/elevator-trim"), 0)
Elevator trim up NRC interpolate("/controls/flight/elevator-trim", -1, 30 * (1 - getprop("controls/flight/elevator-trim")))
U
interpolate("/controls/flight/elevator-trim", getprop("controls/flight/elevator-trim"), 0)
These commands are all on one line.
To make it go faster, make the 30 smaller.
-----------------------------------------------------------------------------
Aileron trim left RC controls.aileronTrim(-0.75) U
Aileron trim right RC controls.aileronTrim(0.75) U
-----------------------------------------------------------------------------
Aileron trim left NRC interpolate("/controls/flight/aileron-trim", -1, 30 * (1 - getprop("controls/flight/aileron-trim")))
U
interpolate("/controls/flight/aileron-trim", getprop("controls/flight/aileron-trim"), 0)
Aileron trim right NRC interpolate("/controls/flight/aileron-trim", 1, 30 * (1 - getprop("controls/flight/aileron-trim")))
U
interpolate("/controls/flight/aileron-trim", getprop("controls/flight/aileron-trim"), 0)
To make it go faster, make the 30 smaller.
-----------------------------------------------------------------------------
If you want rudder-trim, use either the repeatable or non-repeatable above, changing elevator-trim/aileron -trim to rudder-trim.
-----------------------------------------------------------------------------
Apply all brakes NR
controls.applyBrakes(1)
U
controls.applyBrakes(0)
Apply left brake NR
controls.applyBrakes(1, -1)
U
controls.applyBrakes(0, -1)
Apply Right brake NR
controls.applyBrakes(1, 1)
U
controls.applyBrakes(0, 1)
-----------------------------------------------------------------------------
Start Stopwatch NR
globals["__dlg:stopwatch-dialog"].start() U
Stop Stopwatch NR
globals["__dlg:stopwatch-dialog"].stop() U
Reset Stopwatch NR
globals["__dlg:stopwatch-dialog"].reset() U
-----------------------------------------------------------------------------
Make mixture richer NRR C <![CDATA[ if(getprop("controls/engines/engine/mixture") < 1 ) { setprop("controls/engines/engine/mixture", getprop ("controls/engines/engine/mixture") + 0.05) } ]]> U
Make mixture leaner NRR C <![CDATA[ if(getprop("controls/engines/engine/mixture") > 0 ) { setprop("controls/engines/engine/mixture", getprop("controls/engines/engine/mixture") - 0.05) } ]]> U
-----------------------------------------------------------------------------
Start all engine all engines R controls.startEngine(1)
U
controls.startEngine(0)
Start specific engine R
controls.startEngine(1, x)
U
controls.startEngine(0, x)
x is the engine number. First engine is 0.
Wingsweep
Each How this is implemented in each aircraft that implements Wingsweep has a specific number depends on the design of steps between fully forward and fully swept-backthe aircraft. If it has predefined wingsweep settings it will step through these settings. You set the wingsweep by specifying how many steps If not, it will step 20% of the wings must sweep forwards or backwardsway each time called.
Wingsweep forward NR
controls.wingSweep(n1) U
Wingsweep backwards NR
controls.wingSweep(-n1) UIt is possible (but desirable?) to use any value from 1 to 5 in the brackets. This will make the wings sweep more steps at a time.----------------------------------------------------------------------------- Weapons
Where n is the number of steps Fire selected weapon NR controls. This means that the number of steps implemented per button press is hard-codedtrigger(1) in your joystick file U controls. You could of course use a modifier for larger trigger(or smaller0) steps. In this case you would have different values of n Select previous weapon NR controls.----------------------------------------------------------------------------weaponSelect(-1) weapons Select next weapon NR controls. weaponSelect(-1)
-----------------------------------------------------------------------------
Toggle all lights on/off NR
controls.toggleLights() U
Switch specific lights on NR
setProp(("controls/lighting/xxx"), true)
U
Switch specific lights off NR
taxi-lights, cabin-lights, map-lights.
-----------------------------------------------------------------------------
Instrument lights level up brighter R <![CDATA[ if(getprop("controls/lighting/instruments-norm") < 1 ) { setprop("controls/lighting/instruments-norm", getprop ("controls/lighting/instruments-norm") + 0.05) } ]]> U
Instrument lights level down dimmer R <![CDATA[ if(getprop("controls/lighting/instruments-norm") > 0 ) { setprop("controls/lighting/instruments-norm", getprop ("controls/lighting/instruments-norm") - 0.05) } ]]> U
Instrument lights level up NR
<![CDATA[ if(getprop("controls/lighting/instruments-norm") < 1 ) { setprop("controls/lighting/instruments-norm", getprop ("controls/lighting/instruments-norm") + 0.2) } ]]> U
Instrument lights level down NR
<![CDATA[ if(getprop("controls/lighting/instruments-norm") > 0 ) { setprop("controls/lighting/instruments-norm", getprop ("controls/lighting/instruments-norm") - 0.2) } ]]> U
-----------------------------------------------------------------------------
Step magnetos up NR
controls.stepMagnetos(1) U
Step magnetos down NR
controls.stepMagnetos(-1) U
-----------------------------------------------------------------------------
If While editing an xml file, if you find a line is too long for your page width, then you can press Enter and go to a new line.
FG will be happy - it needs a tag or a ; at the end of a line to tell it that the current line of code is finished.
setprop("controls/engines/engine/mixture", getprop ("controls/engines/engine/mixture") + 0.05)
becomes
setprop("controls/engines/engine/mixture", getprop ("controls/engines/engine/mixture") + 0.05)
Notice where I put the newline and how I indented the second line. Both are designed to make it easy for people to read,
as part of being a programmer is making your code legible for others.
224
edits

Navigation menu