Howto:Transmit properties over MP: Difference between revisions

From FlightGear wiki
Jump to navigation Jump to search
m (Bot: Automated text replacement (-aircrafts +aircraft))
m (+cat: Multiplayer)
Line 48: Line 48:
[[Category:Aircraft enhancement|Transmit properties over MP]]
[[Category:Aircraft enhancement|Transmit properties over MP]]
[[Category:Nasal|Transmit properties over MP]]
[[Category:Nasal|Transmit properties over MP]]
[[Category:Multiplayer]]

Revision as of 18:30, 22 March 2012

This article is a stub. You can help the wiki by expanding it.

Certain properties (eg. rudder deflection, flaps setting and gear position) are transmitted by default over the multiplayer network. However there are still lots of (mostly aircraft specific) properties that are not. Due to this limitation, certain animations (eg. opening of a door or landing lights) won't be visible for a pilot's virtual-colleagues.

This wiki article will teach you how to transmit properties over a network.

-set.xml

<multiplay>
 <generic>
  <int n="0" alias="/controls/lighting/landing-light-l"/>
  <int n="1" alias="/controls/lighting/landing-light-r"/>
  <float n="0" alias="/controls/flight/flaps"/>
  <string n="0" alias="/sim/multiplay/callsign"/>
 </generic>
</multiplay>

There are three types of properties that could be used:

  • float: decimal numbers (0.12, 5.01 ...).
  • int(eger): natural numbers (... -1, 0, 1, 2 ...)
  • string: alphanumeric values (PH-TST, EH01 ...).

Note: true and false are synonyms from 1 and 0, so in those cases (boolean properties) an integer should be used. Also note that each type is seperately numbered; you can have an int n="0" besided a float n="0".

The value behind alias= is the (local) path to the property that has to be transmitted. Make sure that the local property has the same type as the generic MP enabled one.

In the 3d model XML file

If the MP enabled properties are to be used in animations it is preferable to create aliases for them on the remote systems so that the animations can be written using the logical properties rather than the "sim/multiplay/generic/..." ones. The example below creates the "fdm/jsbsim/propulsion/engine[x]/pitch-angle-rad" properties in the AI/MP aircraft property subtree as aliases for the MP properties. In that way the relevant animations can use the more meaningful property name "fdm/jsbsim/propulsion/engine[x]/pitch-angle-rad" instead of "sim/multiplay/generic/float[x]".

<nasal>
 <load>
  ##############################################################################
  # The on-load Nasal is not executed when this file is loaded as the user
  # aircraft.
  ##############################################################################
  var rplayer = cmdarg();
  # Set up property aliases for animations.
  rplayer.getNode("fdm/jsbsim/propulsion/engine[0]/pitch-angle-rad", 1).
    alias(rplayer.getNode("sim/multiplay/generic/float[0]"));
  rplayer.getNode("fdm/jsbsim/propulsion/engine[1]/pitch-angle-rad", 1).
    alias(rplayer.getNode("sim/multiplay/generic/float[1]"));
  rplayer.getNode("fdm/jsbsim/propulsion/engine[2]/pitch-angle-rad", 1).
    alias(rplayer.getNode("sim/multiplay/generic/float[2]"));
  ##############################################################################
 </load>
</nasal>