1
0
Fork 0

Merge branch 'work' of D:\Git_New\fgdata

This commit is contained in:
Vivian Meazza 2011-10-05 17:52:26 +01:00
commit 56e2db00a8
59 changed files with 13668 additions and 2540 deletions

View file

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- main controls -->
<PropertyList>
<signal>
<type>float</type>
<property type="string">/controls/flight/aileron</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/flight/elevator</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/flight/rudder</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/flight/aileron-trim</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/flight/elevator-trim</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/flight/rudder-trim</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/flight/flaps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/flight/speedbrake</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/flight/spoilers</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/gear/brake-left</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/gear/brake-right</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/gear/copilot-brake-left</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/gear/copilot-brake-right</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/gear/brake-parking</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/gear/gear-down</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/switches/master-avionics</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- jet engine -->
<PropertyList>
<signal>
<type>float</type>
<property type="string">/systems/electrical/outputs/fuel-pump[%i]</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/starter</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/throttle</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/condition</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/engines/engine[%i]/running</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/engines/engine[%i]/cranking</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/rpm</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/n1</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/n2</property>
</signal>
<signal>
<type>float</type><property type="string">/engines/engine[%i]/thrust-lbs</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/egt-degf</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/epr</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/oil-pressure-psi</property> <!-- JSBSim -->
</signal>
</PropertyList>

View file

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- propeller/piston engine -->
<PropertyList>
<signal>
<type>float</type>
<property type="string">/systems/electrical/outputs/fuel-pump[%i]</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/starter</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/master-bat</property> <!-- YASim -->
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/master-alt</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/throttle</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/mixture</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/propeller-pitch</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/condition</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/magnetos</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/engines/engine[%i]/running</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/engines/engine[%i]/cranking</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/rpm</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/fuel-flow-gph</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/fuel-px-psi</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/egt-degf</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/cht-degf</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/mp-osi</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/tit</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/oil-temperature-degf</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/oil-pressure-psi</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- turboprop engine -->
<PropertyList>
<signal>
<type>float</type>
<property type="string">/systems/electrical/outputs/fuel-pump[%i]</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/starter</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/master-bat</property> <!-- YASim -->
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/master-alt</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/throttle</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/mixture</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/propeller-pitch</property>
</signal>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine[%i]/condition</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/engines/engine[%i]/running</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/engines/engine[%i]/cranking</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/rpm</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/fuel-flow-gph</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/fuel-px-psi</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/egt-degf</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/cht-degf</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/mp-osi</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/tit</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/oil-temperature-degf</property> <!-- YASim -->
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/oil-pressure-psi</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/n1</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/n2</property>
</signal>
<signal>
<type>float</type><property type="string">/engines/engine[%i]/thrust-lbs</property>
</signal>
<signal>
<type>float</type>
<property type="string">/engines/engine[%i]/epr</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- environment -->
<PropertyList>
<signal>
<type>float</type>
<property type="string">/environment/wind-speed-kt</property>
</signal>
<signal>
<type>float</type>
<property type="string">/environment/wind-from-heading-deg</property>
</signal>
<signal>
<type>float</type>
<property type="string">/environment/turbulence/magnitude-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/environment/temperature-degc</property>
</signal>
<signal>
<type>float</type>
<property type="string">/environment/pressure-sea-level-inhg</property>
</signal>
<signal>
<type>float</type>
<property type="string">/environment/magnetic-variation-deg</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/hazards/icing/wing</property>
</signal>
<signal>
<type>float</type>
<property type="string">/environment/visibility-m</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- engine fault properties -->
<PropertyList>
<signal>
<type>bool</type>
<property type="string">/controls/flight/flaps-serviceable</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/faults/serviceable</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/faults/left-magneto-serviceable</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/faults/right-magneto-serviceable</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/faults/spark-plugs-serviceable</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/faults/oil-pressure-status</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/engines/engine[%i]/faults/fuel-pump-serviceable</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- fixed gear properties -->
<PropertyList>
<signal>
<type>float</type>
<property type="string">/gear/gear[%i]/steering-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/gear/gear[%i]/compression-norm</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/gear/gear[%i]/wow</property>
</signal>
<signal>
<type>float</type>
<property type="string">/gear/gear[%i]/rollspeed-ms</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- retractable gear properties -->
<PropertyList>
<!-- include fixed gear properties -->
<signals include="gear-fixed.xml"/>
<!-- add position of retractable gear -->
<signal>
<type>float</type>
<property type="string">/gear/gear[%i]/position-norm</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- position and aero parameters -->
<PropertyList>
<signal>
<type>double</type>
<interpolation type="string">angular-deg</interpolation>
<property type="string">/position/longitude-deg</property>
</signal>
<signal>
<type>double</type>
<interpolation type="string">angular-deg</interpolation>
<property type="string">/position/latitude-deg</property>
</signal>
<signal>
<type>double</type>
<property type="string">/position/altitude-ft</property>
</signal>
<signal>
<type>double</type>
<property type="string">/position/altitude-agl-ft</property>
</signal>
<signal>
<type>float</type>
<interpolation type="string">angular-deg</interpolation>
<property type="string">/orientation/roll-deg</property>
</signal>
<signal>
<type>float</type>
<interpolation type="string">angular-deg</interpolation>
<property type="string">/orientation/pitch-deg</property>
</signal>
<signal>
<type>float</type>
<interpolation type="string">angular-deg</interpolation>
<property type="string">/orientation/heading-deg</property>
</signal>
<signal>
<type>float</type>
<interpolation type="string">angular-deg</interpolation>
<property type="string">/orientation/alpha-deg</property>
</signal>
<signal>
<type>float</type>
<interpolation type="string">angular-rad</interpolation>
<property type="string">/orientation/side-slip-rad</property>
</signal>
<signal>
<type>float</type>
<interpolation type="string">angular-deg</interpolation>
<property type="string">/orientation/beta-deg</property>
</signal>
<signal>
<type>float</type>
<property type="string">/orientation/roll-rate-degps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/orientation/pitch-rate-degps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/orientation/yaw-rate-degps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/velocities/airspeed-kt</property>
</signal>
<signal>
<type>float</type>
<property type="string">/velocities/vertical-speed-fps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/velocities/speed-north-fps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/velocities/speed-east-fps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/velocities/speed-down-fps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/velocities/vBody-fps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/velocities/uBody-fps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/velocities/wBody-fps</property>
</signal>
<signal>
<type>float</type>
<property type="string">/accelerations/pilot/x-accel-fps_sec</property>
</signal>
<signal>
<type>float</type>
<property type="string">/accelerations/pilot/y-accel-fps_sec</property>
</signal>
<signal>
<type>float</type>
<property type="string">/accelerations/pilot/z-accel-fps_sec</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/sim/alarms/stall-warning</property>
</signal>
<signal>
<type>float</type>
<property type="string">/instrumentation/slip-skid-ball/indicated-slip-skid</property>
</signal>
<signal>
<type>float</type>
<property type="string">/position/ground-elev-m</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- flightrecorder properties for a single rotor (YASim).
Usage
<signals include="Aircraft/Generic/flight-recorder/components/rotor.xml">
<property-path type="string">/rotor/main</property-path>
</signals>
-->
<PropertyList>
<signal>
<type>float</type>
<property type="string">roll-deg</property>
<interpolation type="string">angular-deg</interpolation>
</signal>
<signal>
<type>float</type>
<property type="string">rpm</property>
</signal>
<signal>
<type>float</type>
<property type="string">stall</property>
</signal>
<signal>
<type>float</type>
<property type="string">torque</property>
</signal>
<signal>
<type>float</type>
<property type="string">yaw-deg</property>
<interpolation type="string">angular-deg</interpolation>
</signal>
<signal>
<type>float</type>
<property type="string">cone-deg</property>
<interpolation type="string">angular-deg</interpolation>
</signal>
</PropertyList>

View file

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- surface positions -->
<PropertyList>
<signal>
<type>float</type>
<property type="string">/surface-positions/elevator-pos-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/surface-positions/elevator-trim-tab-pos-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/surface-positions/flap-pos-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/surface-positions/left-aileron-pos-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/surface-positions/right-aileron-pos-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/surface-positions/rudder-pos-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/surface-positions/speedbrake-pos-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/surface-positions/spoilers-pos-norm</property>
</signal>
<signal>
<type>float</type>
<property type="string">/surface-positions/nose-wheel-pos-norm</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- flight recorder configuration -->
<!-- tanks -->
<PropertyList>
<signal>
<type>float</type>
<property type="string">/consumables/fuel/tank[%i]/level-gal_us</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/fuel/tank[%i]/fuel_selector</property>
</signal>
</PropertyList>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generic flight recorder configuration for gliders (no engines/no tanks/single gear).
Note: The generic configurations are provided as an example and for convenience only.
No need to use a generic configuration. You can copy the settings below to your aircraft's
flight recorder configuration and include a better combination of recorder components, if
none of the pre-defined configurations fits your aircraft.
-->
<PropertyList>
<name type="string">Generic Flight Recorder for Gliders (no engines/no tanks/single non-retractable gear)</name>
<signals include="/Aircraft/Generic/flightrecorder/components/environment.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/position.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/controls.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/surfaces.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/gear-fixed.xml">
<count type="int">1</count>
</signals>
<!-- "engine throttle" (usually used as glider's speed brake) -->
<signals>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine/throttle</property>
</signal>
</signals>
</PropertyList>

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generic flight recorder configuration for helicopters: main + tail rotor, 2 tanks.
Tested with YASim helicopters.
Note: The generic configurations are provided as an example and for convenience only.
No need to use a generic configuration. You can copy the settings below to your aircraft's
flight recorder configuration and include a better combination of recorder components, if
none of the pre-defined configurations fits your aircraft.
-->
<PropertyList>
<name type="string">Generic Flight Recorder for Helicopters</name>
<signals include="/Aircraft/Generic/flightrecorder/components/position.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/controls.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/environment.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/tanks.xml">
<count type="int">2</count>
</signals>
<!-- main rotor -->
<signals include="/Aircraft/Generic/flightrecorder/components/rotor.xml">
<prefix type="string">/rotors/main</prefix>
</signals>
<!-- tail rotor -->
<signals include="/Aircraft/Generic/flightrecorder/components/rotor.xml">
<prefix type="string">/rotors/tail</prefix>
</signals>
<!-- simple single engine properties -->
<signals>
<signal>
<type>float</type>
<property type="string">/controls/engines/engine/throttle</property>
</signal>
</signals>
</PropertyList>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generic flight recorder configuration for jets (2 jet engines/4 tanks/3 retractable gear).
Note: The generic configurations are provided as an example and for convenience only.
No need to use a generic configuration. You can copy the settings below to your aircraft's
flight recorder configuration and include a better combination of recorder components, if
none of the pre-defined configurations fits your aircraft.
-->
<PropertyList>
<name type="string">Generic Flight Recorder for Jets (2 jet engines/4 tanks/3 retractable gear)</name>
<signals include="/Aircraft/Generic/flightrecorder/components/environment.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/position.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/controls.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/surfaces.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/engine-jet.xml">
<count type="int">2</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/faults-engines.xml">
<count type="int">2</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/tanks.xml">
<count type="int">4</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/gear-retractable.xml">
<count type="int">3</count>
</signals>
</PropertyList>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generic flight recorder configuration: 1 propellers/engine, 2 tanks, 3 fixed gear.
Note: The generic configurations are provided as an example and for convenience only.
No need to use a generic configuration. You can copy the settings below to your aircraft's
flight recorder configuration and include a better combination of recorder components, if
none of the pre-defined configurations fits your aircraft.
-->
<PropertyList>
<name type="string">Generic Flight Recorder (1 piston engine/1 propeller/4 tanks/3 fixed gear)</name>
<signals include="/Aircraft/Generic/flightrecorder/components/environment.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/position.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/controls.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/surfaces.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/engine-piston-prop.xml">
<count type="int">1</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/faults-engines.xml">
<count type="int">1</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/tanks.xml">
<count type="int">2</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/gear-fixed.xml">
<count type="int">3</count>
</signals>
</PropertyList>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generic flight recorder configuration: 4 propellers/engines, 4 tanks, 3 retractable gear.
Records same properties as hard-coded recorder for <=FG2.4.0
Note: The generic configurations are provided as an example and for convenience only.
No need to use a generic configuration. You can copy the settings below to your aircraft's
flight recorder configuration and include a better combination of recorder components, if
none of the pre-defined configurations fits your aircraft.
-->
<PropertyList>
<name type="string">Generic Flight Recorder (4 piston engines/4 propellers/4 tanks/3 retractable gear)</name>
<signals include="/Aircraft/Generic/flightrecorder/components/environment.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/position.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/controls.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/surfaces.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/engine-piston-prop.xml">
<count type="int">4</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/faults-engines.xml">
<count type="int">4</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/tanks.xml">
<count type="int">4</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/gear-retractable.xml">
<count type="int">3</count>
</signals>
</PropertyList>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generic flight recorder configuration: 2 turboprop engines, 4 tanks, 3 retractable gear.
Note: The generic configurations are provided as an example and for convenience only.
No need to use a generic configuration. You can copy the settings below to your aircraft's
flight recorder configuration and include a better combination of recorder components, if
none of the pre-defined configurations fits your aircraft.
-->
<PropertyList>
<name type="string">Generic Flight Recorder (2 turboprop engines/2 propellers/4 tanks/3 retractable gear)</name>
<signals include="/Aircraft/Generic/flightrecorder/components/environment.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/position.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/controls.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/surfaces.xml"/>
<signals include="/Aircraft/Generic/flightrecorder/components/engine-turboprop.xml">
<count type="int">2</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/faults-engines.xml">
<count type="int">2</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/tanks.xml">
<count type="int">4</count>
</signals>
<signals include="/Aircraft/Generic/flightrecorder/components/gear-retractable.xml">
<count type="int">3</count>
</signals>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,477 @@
###############################################################################
##
## RAF mk9 bubble sextant.
##
## Copyright (C) 2007 - 2010 Anders Gidenstam (anders(at)gidenstam.org)
## This file is licensed under the GPL license version 2 or later.
##
###############################################################################
## NOTE: This module MUST be loaded as RAFmk9sextant;
## You can override these parameters when loading this file.
# Field of view when looking through the sextant
var FOV = 25;
# Distance from the eye to the sextant when looking through the sextant.
var VIEW_DISTANCE = 0.15;
# The view in which the sextant will be used.
var VIEW_NAME = "Cockpit View";
# The storage location and orientation.
# The location is relative to the default center for the view.
var STOWED = { position : {x:-0.3, y: 0.0, z: -0.2},
orientation : {heading : 320.0,
pitch : -45.0,
roll : 0.0}
};
## Interface functions.
var pick_up = func {
if (handling.lookthrough) return;
handling.toggle();
if (handling.enabled) {
handling.view_angle.setValue(-90.0);
handling.view_distance.setValue(2.0*VIEW_DISTANCE);
}
}
var toggle_look_through = func {
handling.toggle_look_through();
}
###############################################################################
# Bindings for mouse X and Y movements. Install these to the appropriate
# mouse mode and axes, e.g. in the -set file.
var mouseX = func {
if (!handling.enabled) return;
if(__kbd.alt.getValue()) {
var delta = 3*cmdarg().getNode("offset").getValue();
if(__kbd.shift.getValue() and handling.enabled) {
# Roll adjustment
var orient = sextant.get_orientation();
var roll = orient[2] - delta;
if(roll < -180) roll = -180;
if(roll > 180) roll = 180;
sextant.set_orientation(orient[0], orient[1], roll);
} else {
var view = "/sim/current-view/heading-offset-deg";
var val = getprop(view) - delta;
if(val < 0) val = 0;
if(val > 360) val = 360;
setprop(view, val);
}
}
}
var mouseY = func {
if (!handling.enabled) return;
if(__kbd.alt.getValue()) {
var delta = 3*cmdarg().getNode("offset").getValue();
if(__kbd.shift.getValue() and handling.enabled) {
# Altitude adjustment
sextant.adjust_altitude_fine(delta);
} else {
var view = "/sim/current-view/pitch-offset-deg";
var val = getprop(view) - delta;
if(val < -90) val = -90;
if(val > 90) val = 90;
setprop(view, val);
}
}
}
var RAD = math.pi/180;
var DEG = 180/math.pi;
###############################################################################
# Class for managing one RAF mk9 bubble sextant instrument.
var sextant = {
##################################################
init : func (n=0) {
me.UPDATE_INTERVAL = 0.0;
me.loopid = 0;
me.base =
props.globals.getNode("instrumentation/sextant["~ n ~"]/", 1);
## Instrument properties
me.pitch_err = me.base.getNode("pitch-error-deg", 1);
me.pitch_err.setDoubleValue(0);
me.roll_err = me.base.getNode("roll-error-deg", 1);
me.roll_err.setDoubleValue(0);
me.setting_min = me.base.getNode("setting/min", 1);
me.setting_min.setDoubleValue(0);
me.setting_deg1 = me.base.getNode("setting/deg1", 1);
me.setting_deg1.setDoubleValue(0); # 0 - 10 deg fractional.
me.setting_deg10 = me.base.getNode("setting/deg10", 1);
me.setting_deg10.setDoubleValue(0);
me.bubble = me.base.getNode("bubble-norm", 1);
me.bubble.setDoubleValue(0);
me.serviceable = me.base.getNode("serviceable", 1);
me.serviceable.setBoolValue(1);
## The instrument's orientation in the aircraft frame
## and position offset relative its initial position.
me.position = [me.base.getNode("offsets/x-m", 1),
me.base.getNode("offsets/y-m", 1),
me.base.getNode("offsets/z-m", 1)];
me.heading = me.base.getNode("offsets/heading-deg", 1);
me.pitch = me.base.getNode("offsets/pitch-deg", 1);
me.roll = me.base.getNode("offsets/roll-deg", 1);
me.position[0].setValue(0);
me.position[1].setValue(0);
me.position[2].setValue(0);
me.heading.setValue(0);
me.pitch.setValue(0);
me.roll.setValue(0);
me.reset();
print("RAF Mk9 bubble sextant ... initialized");
},
##################################################
set_position : func (x, y ,z) {
me.position[0].setValue(x);
me.position[1].setValue(y);
me.position[2].setValue(z);
},
##################################################
get_position : func (x, y ,z) {
return [me.position[0].getValue(),
me.position[1].getValue(),
me.position[2].getValue()];
},
##################################################
set_orientation : func (heading, pitch, roll) {
me.heading.setValue(heading);
me.pitch.setValue(pitch);
me.roll.setValue(roll);
},
##################################################
get_orientation : func () {
return [me.heading.getValue(),
me.pitch.getValue(),
me.roll.getValue()];
},
##################################################
step_10deg_knob : func (d) {
var val = me.setting_deg10.getValue() + (d < 0 ? -1 : 1);
if(val < 0) val = 0;
if(val > 8) val = 8;
me.setting_deg10.setValue(val);
},
##################################################
step_5deg_knob : func (d) {
var val = me.setting_deg1.getValue();
var new = val;
if (d <= 0 and val >= 5.0) new -= 5.0;
if (d >= 0 and val < 5.0) new += 5.0;
if(new < 0.0) new = 0;
if(new > 10.0) new = 10;
me.setting_deg1.setValue(new);
},
##################################################
step_bubble_knob : func (d) {
var val = me.bubble.getValue() + d;
if(val < 0) val = 0;
if(val > 1) val = 1;
me.bubble.setValue(val);
},
##################################################
adjust_altitude_fine : func (d) {
var val = me.setting_deg1.getValue() - d;
if(val < 0) val = 0;
if(val > 10) val = 10;
me.setting_deg1.setValue(val);
me.setting_min.setValue(60.0*val - 60*int(val));
},
##################################################
get_altitude : func {
return 10.0 * me.setting_deg10.getValue() + me.setting_deg1.getValue();
},
##################################################
reset : func {
me.loopid += 1;
me._loop_(me.loopid);
},
##################################################
update : func {
## State data we need.
var heading_ac = getprop("/orientation/heading-deg") * RAD;
var pitch_ac = getprop("/orientation/pitch-deg") * RAD;
var roll_ac = getprop("/orientation/roll-deg") * RAD;
var yaw_v = me.heading.getValue() * RAD;
var pitch_v = me.pitch.getValue() * RAD;
var roll_v = me.roll.getValue() * RAD;
## Compute local aircraft axes vectors in the local frame
## Account for aircraft orientation. (x/y/z = front/left/up)
var T_ac = mulMM(mulMM(rotateZ(heading_ac), rotateY(pitch_ac)),
rotateX(roll_ac));
## Account for view orientation and sextant settings.
## The sextant frame is assumed to coincide with the view frame
## except that it is pitched down altitude deg around its local
## Y axis.
var T_bs = mulMM(mulMM(mulMM(mulMM(
T_ac,
rotateZ(yaw_v)),
rotateY(pitch_v)),
rotateX(roll_v)),
rotateY(-me.get_altitude() * RAD));
var X_bs = mulMv(T_bs, X);
var Y_bs = mulMv(T_bs, Y);
var Z_bs = mulMv(T_bs, Z);
## Transform up in the local frame to the sextant frame.
var Up = mulMv([X_bs, Y_bs, Z_bs], Z);
var Up_xz = [Up[0], 0, Up[2]];
var Up_yz = [0, Up[1], Up[2]];
## Compute interesting angles in the sextant frame.
var p_err = angleV(Z, Up_xz);
if (scalar(Up_xz, X) < 0.0) {
p_err *= -1;
}
me.pitch_err.setValue(p_err*DEG);
var r_err = angleV(Z, Up_yz);
if (scalar(Up_yz, Y) < 0.0) {
r_err *= -1;
}
me.roll_err.setValue(r_err*DEG);
},
##################################################
_loop_ : func(id) {
id == me.loopid or return;
me.update();
settimer(func { me._loop_(id); }, me.UPDATE_INTERVAL, 1);
}
};
###############################################################################
## Singleton class for handling (i.e. moving / rotating) a sextant.
var handling = {
enabled : 0,
##################################################
init : func (n=0) {
me.UPDATE_INTERVAL = 0.0;
me.loopid = 0;
me.lookthrough = 0;
me.base =
props.globals.getNode("instrumentation/sextant["~ n ~"]/", 1);
## Instrument properties
me.altitude_deg = me.base.getNode("altitude-deg", 1);
me.altitude_deg.setDoubleValue(0);
## 3d model position properties
me.source_view = view.views[view.indexof(VIEW_NAME)];
var src = me.source_view.getNode("config");
me.offset = {x: src.getNode("z-offset-m").getValue(),
y: src.getNode("x-offset-m").getValue(),
z: src.getNode("y-offset-m").getValue()};
me.view_distance = me.base.getNode("view-distance-m", 1);
me.view_distance.setDoubleValue(2.0*VIEW_DISTANCE);
me.view_angle = me.base.getNode("view-angle-deg", 1);
me.view_angle.setDoubleValue(0.0);
sextant.init();
sextant.set_position
(STOWED.position.x,
STOWED.position.y,
STOWED.position.z);
sextant.set_orientation
(STOWED.orientation.heading,
STOWED.orientation.pitch,
STOWED.orientation.roll);
## Instrument "display"
me.display = screen.display.new(20, 10);
me.display.add(me.altitude_deg,
props.globals.getNode("/sim/time/gmt"));
me.disable();
print("RAF Mk9 bubble sextant handling ... initialized");
},
##################################################
toggle : func {
if (me.enabled) {
me.disable();
} else {
me.enable();
}
},
##################################################
enable : func {
me.enabled = 1;
me.display.toggle();
me.loopid += 1;
me._loop_(me.loopid);
},
##################################################
toggle_look_through : func {
if (!me.enabled) return;
if (!me.lookthrough) {
me.lookthrough = 1;
me.view_distance.setDoubleValue(VIEW_DISTANCE);
me.view_angle.setValue(0.0);
me.old_view = view.point.save();
setprop("/sim/current-view/field-of-view", FOV);
} else {
me.lookthrough = 0;
setprop("/sim/current-view/field-of-view",
me.old_view.getChild("field-of-view").getValue());
# view.point.restore();
me.view_angle.setValue(-90.0);
me.view_distance.setValue(2.0*VIEW_DISTANCE);
}
},
##################################################
disable : func {
me.enabled = 0;
me.lookthrough = 0;
me.display.toggle();
sextant.set_position
(STOWED.position.x,
STOWED.position.y,
STOWED.position.z);
sextant.set_orientation
(STOWED.orientation.heading,
STOWED.orientation.pitch,
STOWED.orientation.roll);
me.view_distance.setDoubleValue(0.0);
me.view_angle.setValue(0.0);
if (me.lookthrough) {
me.toggle_look_through();
}
},
##################################################
update : func {
## Move the 3d model.
if (view.current == me.source_view) {
var src = props.globals.getNode("/sim/current-view");
sextant.set_position
(src.getNode("z-offset-m").getValue() - me.offset.x,
src.getNode("x-offset-m").getValue() - me.offset.y,
src.getNode("y-offset-m").getValue() - me.offset.z);
var old = sextant.get_orientation();
sextant.set_orientation
(getprop("/sim/current-view/heading-offset-deg"),
getprop("/sim/current-view/pitch-offset-deg"),
old[2]);
me.altitude_deg.setValue(sextant.get_altitude());
}
},
##################################################
_loop_ : func(id) {
id == me.loopid and me.enabled or return;
me.update();
settimer(func { me._loop_(id); }, me.UPDATE_INTERVAL, 1);
}
};
###############################################################################
setlistener("/sim/signals/fdm-initialized", func {
handling.init();
});
###############################################################################
## Ugly matrix math as needed.
## Probably horribly inefficient matrix representation:
## M[row][col] = [[row1], [row2], [row3]]
## v[row] = [x, y, z]
var X = [1, 0, 0];
var Y = [0, 1, 0];
var Z = [0, 0, 1];
var id = [X, Y, Z];
var mulMv = func(M, v) {
return [M[0][0]*v[0] + M[0][1]*v[1] + M[0][2]*v[2],
M[1][0]*v[0] + M[1][1]*v[1] + M[1][2]*v[2],
M[2][0]*v[0] + M[2][1]*v[1] + M[2][2]*v[2]];
}
var mulMM = func(A, B) {
return [[A[0][0]*B[0][0] + A[0][1]*B[1][0] + A[0][2]*B[2][0],
A[0][0]*B[0][1] + A[0][1]*B[1][1] + A[0][2]*B[2][1],
A[0][0]*B[0][2] + A[0][1]*B[1][2] + A[0][2]*B[2][2]],
[A[1][0]*B[0][0] + A[1][1]*B[1][0] + A[1][2]*B[2][0],
A[1][0]*B[0][1] + A[1][1]*B[1][1] + A[1][2]*B[2][1],
A[1][0]*B[0][2] + A[1][1]*B[1][2] + A[1][2]*B[2][2]],
[A[2][0]*B[0][0] + A[2][1]*B[1][0] + A[2][2]*B[2][0],
A[2][0]*B[0][1] + A[2][1]*B[1][1] + A[2][2]*B[2][1],
A[2][0]*B[0][2] + A[2][1]*B[1][2] + A[2][2]*B[2][2]]];
}
var scalar = func(a, b) {
return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
}
var absV = func(a) {
return math.sqrt(scalar(a, a));
}
var crossV = func(a, b) {
return [a[1]*b[2] - a[2]*b[1],
a[2]*b[0] - a[0]*b[2],
a[0]*b[1] - a[1]*b[0]];
}
var rotateX = func (r) {
return [[1, 0, 0],
[0, math.cos(-r), -math.sin(-r)],
[0, math.sin(-r), math.cos(-r)]];
}
var rotateY = func (r) {
return [[math.cos(-r), 0, math.sin(-r)],
[0, 1, 0],
[-math.sin(-r), 0, math.cos(-r)]];
}
var rotateZ = func (r) {
return [[math.cos(r), -math.sin(r), 0],
[math.sin(r), math.cos(r), 0],
[0, 0, 1]];
}
var printMat = func (m) {
foreach (var e; m) {
if (typeof(e) == "scalar") {
print(" " ~ e);
} else {
var line = "";
foreach (var ee; e) {
line = line ~ " " ~ ee;
}
print(line);
}
}
}
var angleV = func (a, b) {
return math.acos(math.abs(scalar(a,b)) / (absV(a) * absV(b)));
}
#print("id*id=");
#printMat(mulMM(id,id));
#print("X=");
#printMat(X);
#print("RotY(45)*X=");
#printMat(mulMv(rotateY(45*math.pi/180),X));
#print("Y*X= " ~scalar(Y,X));

View file

@ -0,0 +1,520 @@
<?xml version="1.0"?>
<!--
RAF Mk9 bubble sextant.
Copyright (C) 2008 - 2010 Anders Gidenstam (anders(at)gidenstam.org)
This file is licensed under the GPL license version 2 or later.
-->
<PropertyList>
<path>RAF_Mk9_bubble_sextant.ac</path>
<!-- x/y/z == back/right/up -->
<!-- =========================================================================
Instrument function animations.
===================================================================== -->
<!-- ===================================================================== -->
<!-- Bubble movement -->
<animation>
<type>translate</type>
<object-name>bubble</object-name>
<property>instrumentation/sextant/roll-error-deg</property>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
<interpolation>
<entry>
<ind>-4</ind>
<dep>0.008</dep>
</entry>
<entry>
<ind>0</ind>
<dep>0</dep>
</entry>
<entry>
<ind>4</ind>
<dep>-0.008</dep>
</entry>
</interpolation>
</animation>
<animation>
<type>translate</type>
<object-name>bubble</object-name>
<property>instrumentation/sextant/pitch-error-deg</property>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
<interpolation>
<entry>
<ind>-4</ind>
<dep>0.008</dep>
</entry>
<entry>
<ind>0</ind>
<dep>0</dep>
</entry>
<entry>
<ind>4</ind>
<dep>-0.008</dep>
</entry>
</interpolation>
</animation>
<animation>
<type>scale</type>
<object-name>bubble</object-name>
<property>instrumentation/sextant/bubble-norm</property>
<x-factor>0.0</x-factor>
<x-offset>1.0</x-offset>
<y-factor>1.0</y-factor>
<y-offset>0.0</y-offset>
<z-factor>1.0</z-factor>
<z-offset>0.0</z-offset>
<center>
<x-m> -0.060 </x-m>
<y-m> 0.000 </y-m>
<z-m> 0.000 </z-m>
</center>
</animation>
<!-- If the bubble is gone the instrument is unserviceable. -->
<animation>
<type>select</type>
<object-name>bubble</object-name>
<condition>
<property>instrumentation/sextant/serviceable</property>
</condition>
</animation>
<!-- ===================================================================== -->
<!-- 10 deg setting knob -->
<animation>
<type>rotate</type>
<object-name>10_setting_knob</object-name>
<property>instrumentation/sextant/setting/deg10</property>
<factor>5.0</factor>
<offset-deg>-15.0</offset-deg>
<center>
<x-m> -0.057 </x-m>
<y-m> 0.035 </y-m>
<z-m> 0.038 </z-m>
</center>
<axis>
<x> 0.0 </x>
<y> 1.0 </y>
<z> 0.0 </z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>10_setting_knob_scale</object-name>
<property>instrumentation/sextant/setting/deg10</property>
<factor>5.0</factor>
<offset-deg>-15.0</offset-deg>
<center>
<x-m> -0.057 </x-m>
<y-m> 0.035 </y-m>
<z-m> 0.038 </z-m>
</center>
<axis>
<x> 0.0 </x>
<y> 1.0 </y>
<z> 0.0 </z>
</axis>
</animation>
<!-- ===================================================================== -->
<!-- Degree drum -->
<animation>
<type>rotate</type>
<object-name>degree_drum</object-name>
<property>instrumentation/sextant/setting/deg1</property>
<factor>36.0</factor>
<offset-deg>18</offset-deg>
<center>
<x-m> -0.1110 </x-m>
<y-m> 0.0150 </y-m>
<z-m> -0.0450 </z-m>
</center>
<axis>
<x> 1.0 </x>
<y> 0.0 </y>
<z> 0.0 </z>
</axis>
</animation>
<!-- ===================================================================== -->
<!-- Minute drum -->
<animation>
<type>rotate</type>
<object-name>minute_drum</object-name>
<property>instrumentation/sextant/setting/min</property>
<factor>6.0</factor>
<offset-deg>30.0</offset-deg>
<center>
<x-m> -0.1270 </x-m>
<y-m> 0.0040 </y-m>
<z-m> -0.0315 </z-m>
</center>
<axis>
<x>-1.0 </x>
<y> 0.0 </y>
<z> 0.0 </z>
</axis>
</animation>
<!-- ===================================================================== -->
<animation>
<type>rotate</type>
<object-name>slow_motion_knob</object-name>
<property>instrumentation/sextant/setting/deg1</property>
<factor>120.0</factor>
<offset-deg>0</offset-deg>
<center>
<x-m> -0.0680 </x-m>
<y-m> 0.0230 </y-m>
<z-m> 0.0090 </z-m>
</center>
<axis>
<x> 0.0 </x>
<y> 1.0 </y>
<z> 0.0 </z>
</axis>
</animation>
<!-- ===================================================================== -->
<animation>
<type>rotate</type>
<object-name>bubble_knob</object-name>
<property>instrumentation/sextant/bubble-norm</property>
<factor>360.0</factor>
<offset-deg>0</offset-deg>
<center>
<x-m> -0.0350 </x-m>
<y-m> -0.0230 </y-m>
<z-m> 0.0390 </z-m>
</center>
<axis>
<x> 0.0 </x>
<y> 1.0 </y>
<z> 0.0 </z>
</axis>
</animation>
<!-- ===================================================================== -->
<!-- Instrument control pick animations. -->
<animation>
<type>pick</type>
<object-name>10_setting_knob</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_10deg_knob(1);
</script>
</binding>
</action>
<action>
<button>1</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_10deg_knob(-1);
</script>
</binding>
</action>
<action>
<button>3</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_10deg_knob(-1);
</script>
</binding>
</action>
<action>
<button>4</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_10deg_knob(1);
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>slow_motion_knob</object-name>
<action>
<button>0</button>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.adjust_altitude_fine(0.01667);
</script>
</binding>
</action>
<action>
<button>1</button>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.adjust_altitude_fine(-0.01667);
</script>
</binding>
</action>
<action>
<button>3</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.adjust_altitude_fine(-0.01667);
</script>
</binding>
</action>
<action>
<button>4</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.adjust_altitude_fine(0.01667);
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>5_deg_knob</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_5deg_knob(0);
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>bubble_knob</object-name>
<action>
<button>0</button>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_bubble_knob(0.01);
</script>
</binding>
</action>
<action>
<button>1</button>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_bubble_knob(-0.01);
</script>
</binding>
</action>
<action>
<button>3</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_bubble_knob(-0.01);
</script>
</binding>
</action>
<action>
<button>4</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.sextant.step_bubble_knob(0.01);
</script>
</binding>
</action>
</animation>
<!-- =========================================================================
Instrument handling animations.
===================================================================== -->
<!-- ===================================================================== -->
<animation>
<type>rotate</type>
<property>instrumentation/sextant/view-angle-deg</property>
<factor>1.0</factor>
<center>
<x-m> -0.10 </x-m>
<y-m> 0.00 </y-m>
<z-m> 0.00 </z-m>
</center>
<axis>
<x> 0.0 </x>
<y> 0.3 </y>
<z> 1.0 </z>
</axis>
</animation>
<!-- ===================================================================== -->
<!-- Offset from eye position -->
<animation>
<type>translate</type>
<property>instrumentation/sextant/view-distance-m</property>
<axis>
<x>-1.0 </x>
<y> 0.0 </y>
<z> 0.0 </z>
</axis>
<factor>1.0</factor>
</animation>
<!-- ===================================================================== -->
<animation>
<type>rotate</type>
<property>instrumentation/sextant/offsets/roll-deg</property>
<factor>1.0</factor>
<center>
<x-m> 0.00 </x-m>
<y-m> 0.00 </y-m>
<z-m> 0.00 </z-m>
</center>
<axis>
<x> 1.0 </x>
<y> 0.0 </y>
<z> 0.0 </z>
</axis>
</animation>
<animation>
<type>rotate</type>
<property>instrumentation/sextant/offsets/pitch-deg</property>
<factor>1.0</factor>
<center>
<x-m> 0.00 </x-m>
<y-m> 0.00 </y-m>
<z-m> 0.00 </z-m>
</center>
<axis>
<x> 0.0 </x>
<y> 1.0 </y>
<z> 0.0 </z>
</axis>
</animation>
<animation>
<type>rotate</type>
<property>instrumentation/sextant/offsets/heading-deg</property>
<factor>1.0</factor>
<center>
<x-m> 0.00 </x-m>
<y-m> 0.00 </y-m>
<z-m> 0.00 </z-m>
</center>
<axis>
<x> 0.0 </x>
<y> 0.0 </y>
<z> 1.0 </z>
</axis>
</animation>
<!-- ===================================================================== -->
<!-- Translations for user's view. -->
<animation>
<type>translate</type>
<property>instrumentation/sextant/offsets/x-m</property>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
<factor>1.0</factor>
</animation>
<animation>
<type>translate</type>
<property>instrumentation/sextant/offsets/y-m</property>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
<factor>1.0</factor>
</animation>
<animation>
<type>translate</type>
<property>instrumentation/sextant/offsets/z-m</property>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
<factor>1.0</factor>
</animation>
<!-- ===================================================================== -->
<animation>
<type>pick</type>
<object-name>eye_piece</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.toggle_look_through();
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>left_handle</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.pick_up();
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>right_handle</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.pick_up();
</script>
</binding>
</action>
</animation>
</PropertyList>

View file

@ -0,0 +1,210 @@
Bubble sextant for Celestial Navigation in FlightGear
-----------------------------------------------------
Copyright 2007 - 2010 Anders Gidenstam
* These programs are free software; you can redistribute them and/or modify
* them under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Yes, the stars on the night sky in FlightGear can be used for navigation.
This short text gives a hint to how it is done. The references explain it
much better, though, so have a look there both for introduction and more
advanced topics.
Part 0 - Installing the tools: 3d bubble sextant model for FlightGear
---------------------------------------------------------------------
- The bubble sextant 3d model RAF_Mk9_bubble_sextant.xml need to be
loaded from the aircraft 3d model file and placed at the center of
the view it is intended to be used from. For example for a view located
2.5 meter behind and 2.0 meter above the aircraft origin:
(Note that any offsets of the main 3d model needs to be accounted for
in translating the view position to a 3d model position and that the
axes order differs.)
<!-- Star observer's instruments -->
<model>
<name>Bubble_sextant</name>
<path>Aircraft/Short_Empire/Instruments/BubbleSextant/RAF_Mk9_bubble_sextant.xml</path>
<offsets>
<x-m> 2.50 </x-m>
<y-m> 0.50 </y-m>
<z-m> 2.00 </z-m>
</offsets>
</model>
- The Nasal module needs to be loaded from the main aircraft -set file.
The name of the view in which the sextant will be used and
the stowed (= inactive) location of the instrument needs to be set.
The stored location is specified in a frame axis parallel with the
aircraft frame but centered at the location given for the sextant
3d model in the 3d model file.
For example:
<nasal>
<RAFmk9sextant>
<file>Aircraft/Short_Empire/Instruments/BubbleSextant/RAF_Mk9_bubble_sextant.nas</file>
<script>
var VIEW_NAME = "Star Observation View";
var STOWED = { position : {x:-0.3, y: 0.0, z: -0.2},
orientation : {heading : 320.0,
pitch : -45.0,
roll : 0.0}
};
</script>
</RAFmk9sextant>
</nasal>
- To allow fine control of the sextant using the mouse add the following
XML snippet to the aircraft's -set file.
It binds moves movements in mode 0/pointer mode to the sextant.
alt + move mouse - precision movement of view direction.
alt + shift + move mouse - up/down changes the altitude setting of the
sextant.
- left/right tilts the sextant to align with
the horizon.
<input>
<!-- Install the sextant controls in mouse mode 0. -->
<mice n="0">
<mouse n="0">
<mode n="0">
<x-axis>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.mouseX();
</script>
</binding>
</x-axis>
<y-axis>
<binding>
<command>nasal</command>
<script>
RAFmk9sextant.mouseY();
</script>
</binding>
</y-axis>
</mode>
</mouse>
</mice>
</input>
To correctly measure the altitude of a heavenly body the instrument
must be level, i.e. the bubble must be centered.
The instrument is configured for an aim-then-level method, i.e.
one first center the view on the desired object then change the altitude
and tilt settings until the instrument is level. (I.e. changing altitude
behaves as if the user changes the setting and rotates the instrument so
that it remains aimed in the same direction).
NOTE: Tilting of the instrument might still be somewhat buggy.
Part 1 - Taking sextant sights in FlightGear
-------------------------------------
What is needed?
- The celestial altitude (~angle from the horizon) for some (at least 2)
stars and the precise time of observation.
How?
- Pick up the sextant by clicking on either of its handles.
- Enter the sextant view by clicking on the sextant eye piece.
- Obtain a bubble by turning the bubble knob on the left side of
the instrument. It is possible to reach the bubble knob while in
sextant view.
- Aim the center of the view on the star. Alt + move mouse in pointer mode
enables high precision view rotation.
- Level the instrument. This is done by changing the altitude setting,
first in 10 degree steps by the coarse motion knob on the right side
of the instrument (reachable also while in sextant view) and then
with the slow motion knob (or alt+shift+move mouse up/down).
Tilt the instrument (alt+shift+move mouse right/left) as needed to
center the bubble.
- Time + celestial altitude constitutes a sighting. Make sure that
the instrument is level and aimed at the star when you note the time
and altitude.
But where are those bl**dy stars?
- I use the star charts around page 256 in "The American Practical Navigator",
http://www.nga.mil/MSISiteContent/StaticFiles/NAV_PUBS/APN/pub9.zip
to find some. For me the ones in Ursa Major was easiest to find (though
one should use a wider spread).
Suggestion (northern hemisphere):
* Dubhe (Right upper corner star of the Ursa Major "wagon".)
* Alkaid (Third and last (leftmost) star in the Ursa Major "wagon" handle.)
* Arcturus (Brightest star found to the "left" of Alkaid just below the
extended line between Alkaid and the star immediately to the
right in the Ursa Major "wagon" handle.
See star chart in [Bowditch] page 256.)
Part 2 - Computing a position
-----------------------------
The Intercept method
- Assume a position. It should be close to ones actual position - usually one
has a dead reckoning position to start from. (The assumed position need
not be equal to the DR one - one can choose a more convenient one e.g.
when using tables.)
- Compute the expected locations of the observed stars for
that position.
Use a program/website, like http://www.tecepe.com.br/cgi-win/cgiasvis.exe ,
or a Nautical Almenac + tables.
- Compare the observed star locations with the computed ones.
This gives a position line for each star. Plot the position
lines to (hopefully) get a fix.
Further info and plotting sheets: http://www.efalk.org/Navigation/
References
----------
http://www.celestialnavigation.net/
Good place to start.
http://www.efalk.org/Navigation/
Intercept method tutorial and downloadable plot sheets.
http://www.ludd.luth.se/users/kavli/peck_celestial/space.html
Longer tutorial and description. Focuses on the use of tables for sight
reductions.
http://www.tecepe.com.br/cgi-win/cgiasvis.exe
Computes star locations. Use instead of tables.
[Bowditch]
"The American Practical Navigator",
http://www.nga.mil/MSISiteContent/StaticFiles/NAV_PUBS/APN/pub9.zip
For those that really really want to learn it all :)
RAF Mk9 bubble sextant manuals and more information
http://www.users.bigpond.com/bgrobler/sextant/RAF_Mk9_manual.pdf
http://www.users.bigpond.com/bgrobler/sextant/sextant.html
http://www.physics.uq.edu.au/physics_museum/bblsex.html

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -108,7 +108,14 @@ Started October 23 2001 by John Check, fgpanels@rockfish.net
<int type="int">0</int>
</generic>
</multiplay>
<flight-recorder>
<replay-config type="int">0</replay-config>
<config n="0" include="/Aircraft/Generic/flightrecorder/generic-piston-propeller-1.xml">
<name type="string">C172p Flight Recorder</name>
</config>
</flight-recorder>
<menubar include="Dialogs/c172p-menu.xml"/>
</sim>

292
Docs/README.flightrecorder Normal file
View file

@ -0,0 +1,292 @@
FlightGear Flight Recorder Mini-HOWTO
Thorsten Brehm
Started in August 2011
Last revised: 2011-09-26
FlightGear provides a customizable flight recorder capable of capturing
any selection of properties described via XML configuration files.
The recorder is currently used for the replay system.
Feature Brief
-------------
* Generic recording system, adaptable to any aircraft/data, provided that
data is accessible via the property tree. No hard-coded selections or
assumptions on properties to be recorded.
* Configuration read from XML files or the property tree itself.
* Interpolation method configurable per recorded/replayed signal.
* Adaptable recording resolution per signal.
* Multiple configurations supported.
Quick Start: Basic Configuration
--------------------------------
To configure and adapt the flight recorder, add a "/sim/flight-recorder"
section to your aircraft -set.xml file.
Example:
<sim>
<!-- ... -->
<flight-recorder>
<replay-config type="int">0</replay-config>
<config n="0" include="/Aircraft/Generic/flightrecorder/generic-piston-propeller-1.xml">
<name type="string">My Aircraft's Flight Recorder</name>
<!-- Custom properties -->
<signal>
<type>float</type>
<property type="string">/controls/gear/nosegear-steering-cmd-norm</property>
<interpolation>linear</interpolation>
</signal>
<!-- More custom signals here -->
</config>
</flight-recorder>
<!-- ... -->
</sim>
Default type for each signal is "float". Default "interpolation" method
is "linear" (for float/double). Default values may be omitted. See
configuration details below.
Generic Configuration Files
---------------------------
Select one of the default configuration files to specify the basic
properties to be recorded. It's not recommended to specify all
properties to be recorded individually.
The following generic files are provided:
* /Aircraft/Generic/flightrecorder/generic-piston-propeller-4.xml
Matches propeller aircraft with 4 piston engines, 4 tanks,
3 retractable gear.
It is the same configuration that was hard-coded for the replay system
up to FlightGear 2.4.0. To provide backward compatibility this
configuration is loaded by default, unless an aircraft provides a
specific flight recorder configuration.
* /Aircraft/Generic/flightrecorder/generic-piston-propeller-1.xml
Matches propeller aircraft with 1 piston engines, 2 tanks, 3 fixed
gear.
* /Aircraft/Generic/flightrecorder/generic-turboprop-2.xml
Matches turboprop aircraft with 2 turbines/propellers, 4 tanks,
3 retractable gear.
* /Aircraft/Generic/flightrecorder/generic-jet.xml
Matches jet aircraft with 2 jet engines, 4 tanks.
* /Aircraft/Generic/flightrecorder/generic-glider.xml
Matches gliders (no engines, no tanks, single fixed gear).
* /Aircraft/Generic/flightrecorder/generic-helicopter.xml
Matches helicopters with main and tail rotor (tested with YASim).
If none of the generic files matches your aircraft, simply use a
configuration which covers more than you need. Alternatively, copy the
contents of one of these generic files to your aircraft, and adapt as
needed (see below).
FDM experts are welcome to add more generic configuration files to
/Aircraft/Generic/flightrecorder - such as YASim-/JSBSim-specific
configurations, and configurations for other types of aircraft
(balloons, airships, ...).
Generic Components
-----------------
The generic configuration files in turn include a set of generic
components. If you copy the contents of a generic file to your aircraft,
you can adapt the components to your needs. See examples.
It is not recommended to copy the contents of the _component_ files to
an aircraft though (causes too much hassle and dependencies).
Engine Selection:
* /Aircraft/Generic/flightrecorder/components/engine-jet.xml
Records properties of a single jet engine.
For multiple jet engines, use "count". Example for 4 jets:
<signals include="/Aircraft/Generic/flightrecorder/components/engine-jet.xml">
<count>4</count>
</signals>
* /Aircraft/Generic/flightrecorder/components/engine-piston.xml
Records properties of a single piston engine and propeller.
For multiple piston engines, use "count" (see "jet" example).
* /Aircraft/Generic/flightrecorder/components/rotor.xml
Records properties of a single helicopter rotor (tested with YASim).
To use this, provide the base property path to the rotor as "prefix".
Example recording the rotor below "/rotors/main":
<signals include="/Aircraft/Generic/flightrecorder/components/rotor.xml">
<prefix type="string">/rotors/main</prefix>
</signals>
Gear Selection:
* /Aircraft/Generic/flightrecorder/components/gear-fixed.xml
Records properties of a single non-retractable gear.
For multiple fixed gear, use "count" (see "jet" example).
* /Aircraft/Generic/flightrecorder/components/gear-retractable.xml
Records properties of a single retractable gear.
For multiple retractable gear, use "count" (see "jet" example).
Tanks:
* /Aircraft/Generic/flightrecorder/components/tanks.xml
Records properties of a single fuel tank.
For multiple fuel tanks, use "count" (see "jet" example).
Other:
* /Aircraft/Generic/flightrecorder/components/surfaces.xml
Records properties of flight control surfaces. Include this
for aircraft (with wings). Not useful for helicopters,
balloons, ...
* /Aircraft/Generic/flightrecorder/components/faults-engines.xml
Records fault properties of a single engine. Only include this
if your aircraft supports fault simulation.
For multiple engines, use "count" (see "jet" example). If used,
it should be compined with piston or jet engine.
* /Aircraft/Generic/flightrecorder/components/environment.xml
Records properties of environment/weather (visibility,
temperature - but _not_ cloud position...).
* /Aircraft/Generic/flightrecorder/components/position.xml
Records properties of a the aircrafts main position (latitude,
longitude, velocities, ...).
This is the most important component. Always include this.
* /Aircraft/Generic/flightrecorder/components/controls.xml
Records most important flight controls (rudder, aileron,
elevator, ...). Always include this.
Custom Properties
-----------------
When the generic or component files are not be sufficient to record or
replay aircraft-specific effects, you can add custom properties (signals
to be recorded) to the configuration.
Each signal consits of a recording type/resolution (which does _not_
need to match the actual type in the property tree!), the path to the
property and interpolation type.
Example recording some additional custom properties:
<sim>
<flight-recorder>
<config n="0" include="/Aircraft/Generic/flightrecorder/generic-piston-propeller-1.xml">
<!-- Add custom properties here -->
<signal>
<type>float</type>
<property type="string">/controls/gear/nosegear-steering-cmd-norm</property>
</signal>
<signal>
<type>double</type>
<interpolation>rotational-deg</interpolation>
<property type="string">/ai/model/carrier/alpha-angle-deg</property>
</signal>
<signal>
<type>bool</type>
<property type="string">/controls/panel/custom-switch</property>
</signal>
</config>
</flight-recorder>
</sim>
Signal Configuration
--------------------
Template:
<signal>
<type>bool</type>
<interpolation>angular-deg</interpolation>
<property type="string">/controls/panel/custom-switch</property>
</signal>
* type: The signal's type specifies the recording resolution - not the
type of the original property. The following types are supported:
- double: 8 byte/sample
- float: 4 byte/sample (default)
- int: 4 byte/sample, integer
- int16: 2 byte/sample, integer
- int8: 1 byte/sample, integer
- bool: 1 bit/sample (yes, 1 bit. 8 bools per byte).
String type is unsupported (too expensive).
* interpolation: Specifies how values are interpolated during replay, i.e.
when replay is in slow-motion mode and more frames/second are required
than recorded, or when replaying data from the medium/long term memory.
Supported methods:
- discrete: No interpolation. Default for integer/bool types.
- linear: Standard linear interpolation. Default for float/double.
- angular-rad (or angular): Angular values in radians (0-2pi).
- angular-deg: Angular values in degrees (0-360).
* property: Path to the property to be recorded.
Advanced Configuration
----------------------
- Multipe recorder configurations for a single aircraft are supported
(multiple "<config n=..>" sections for n=0,1,...).
Active configuration to be used for the replay system is selected via
/sim/flight-recorder/replay-config (= 0,1,...).
This can be useful for specific recorders for specific scenarios,
which should not be used by default. For example, a specific recorder
configuration could be provided which also records the position of
an aircraft carrier, of other AI aircraft, ...
This may also be useful for future use, i.e. to select another flight
recorded configuration for a different purpose, such as for the
multiplayer system.
- Flight recorder configuration can be adapted during run-time
(configuration is visible in the property browser below
/sim/flight-recorder). However it is necessary to reset (reinit) the
replay subsystem first - which also erases earlier recordings. It is
not possible to mix recordings of different configurations on to a
single "tape".
- Each configuration should be given a name. Useful for a (future)
selection GUI, when multiple configurations are available.
Optimizing Performance
----------------------
- Recording properties consumes memory and also CPU time. A few
additional properties don't matter much, but avoid execessive numbers.
Reduce the resolution (type) of signals to the minimum necessary to
save space.
- Use "bool" types where possible, they are most efficient.
- Avoid recording with "double" resolution (type "double"). Use "float"
instead - even if the original property in the property tree is a
"double" (almost all of them do). "float" precision is almost always
sufficient for recording/replay purposes, with few exceptions (like
latitude/longitude properties).
- Use int16/int8 for "small" integer values.
Recording/Replay Limits
-----------------------
- All properties can be recorded, however, only writable properties can
be replayed. Properties marked as read-only, or tied properties not
implementing the "set" method cannot be replayed.
- Replaying a property overwrites the property's value. However, other
sources may also write to the same property - such as Nasal code,
autopilot rules etc. When multiple sources "fight" over a property's
value then the last update "wins" - resulting in a dependency to an
unknown/random sequence. Hence, during deplay, try to disable other
sources writing to properties which were recorded and should be
replayed.
If the other source cannot be disabled, check if you're recording the
right property. It may be better to record the input properties of the
other source instead (i.e. the inputs processed by the Nasal or
autopilot rule).
__end__

View file

@ -33,3 +33,75 @@ axis definition uses the same index as the master file. The n-th
uses <number><unix> etc. Nasal blocks are properly executed in the
namespace of the master file, so you can access all its functions
and variables.
Joystick configuration from within FlightGear under Linux:
--------------------------------------------------------------------------------
This allows to set backlight brightness and LEDs from within FlightGear
without requiring any config application, by directly writing to the devices
via raw HID support.
(1) Make sure your kernel has hidraw support compiled in: check if there is at
least one file listed with
$ ls /dev/hidraw*
or if your kernel .config contains:
CONFIG_HIDRAW=y
(2) To get a reliable, persistent file name for your Warthog devices, create
a file /etc/udev/rules.d/00-local.rules and add these lines:
SUBSYSTEM=="input", ENV{ID_INPUT_JOYSTICK}!="?*", IMPORT{program}="input_id %p"
SUBSYSTEM=="hidraw", ENV{ID_SERIAL}!="?*", IMPORT{program}="usb_id --export %p"
SUBSYSTEM=="hidraw", SYMLINK+="input/hidraw/%E{ID_SERIAL}"
SUBSYSTEM=="hidraw", ENV{ID_INPUT_JOYSTICK}!="0", GROUP:="js"
If you don't have a user group "js" (for joystick hardware access) either
create one or, in the fourth line, use a group instead where all joystick
users are member, e.g. GROUP:="users". Then plug your Warthog devices out
and in again and check if this created two device links:
$ ls -l /dev/input/hidraw/*
lrwxrwxrwx 1 root root 10 Oct 2 14:23 Thrustmaster_Throttle_-_HOTAS_Warthog -> ../hidraw1
lrwxrwxrwx 1 root root 10 Oct 2 14:23 Thustmaster_Joystick_-_HOTAS_Warthog -> ../hidraw0
Also check if the linked-to hidraw devices have proper permissions (rw for "js"):
$ ls -l /dev/hidraw*
crw-rw---- 1 root js 251, 0 Oct 2 09:11 /dev/hidraw0
crw-rw---- 1 root js 251, 1 Oct 2 14:23 /dev/hidraw1
^^ ^^
(3) Allow FlightGear to write to the two devices. The best way to do this is
to edit a local copy of the global IOrules. Just copy the global file
to your FG_HOME directory:
$ mkdir -p ~/.fgfs/Nasal
$ cp $FG_ROOT/Nasal/IOrules ~/.fgfs/Nasal
Now add these two lines there:
WRITE ALLOW /dev/input/hidraw/Thustmaster_Joystick_-_HOTAS_Warthog
WRITE ALLOW /dev/input/hidraw/Thrustmaster_Throttle_-_HOTAS_Warthog
CAVE: Don't fix the bad spelling of "Thrustmaster", unless your stick
really uses that!
DISCLAIMER: Of course, you take all responsibility for any possible
damages to your hardware if you make these changes. Neither the
FlightGear project nor any of its developers and contributors are in
any way liable.

View file

@ -0,0 +1,14 @@
<?xml version="1.0"?>
<!-- fix broken seahawk speedbrake -->
<PropertyList>
<nasal>
<script>
jslistener("/controls/flight/speedbrake", func(n) {
print(n.getValue());
setprop("/controls/flight/speedbrake-lever", n.getValue());
seahawk.adjustFlaps();
});
</script>
</nasal>
</PropertyList>

View file

@ -11,12 +11,16 @@
<PropertyList>
<name>Thustmaster Joystick - HOTAS Warthog</name>
<name>Thrustmaster Joystick - HOTAS Warthog</name> <!-- in case they ever manage to fix their name -->
<nasal>
<command>nasal</command>
<script>
var this = cmdarg().getParent();
var init = !contains(caller(0)[0], "init");
if (!contains(globals, "warthog"))
io.load_nasal(getprop("/sim/fg-root") ~ "/Input/Joysticks/ThrustMaster/Warthog/warthog.nas");
var jslistener = func init and call(setlistener, arg);
var popup = func gui.popupTip(call(sprintf, arg));
var is_helicopter = (func {(var n = props.globals.getNode("rotors", 0)) != nil and n.getAttribute("children")})();
var aircraft_type = getprop("/sim/type");
@ -27,7 +31,7 @@
var file = dir ~ "/Input/Joysticks/ThrustMaster/Warthog/Stick/" ~ name ~ ".xml";
if (io.stat(file) != nil) {
printlog("info", "WARTHOG: loading overlay " ~ file);
cmdarg().getNode("script").setValue("");
cmdarg().setValues({command: "nasal", script: ""});
io.read_properties(file, this);
props.runBinding(cmdarg());
break;
@ -43,14 +47,12 @@
}
var mod = 0;
if (init) {
var n = props.globals.initNode("/devices/status/joysticks/warthog/modifier", mod, "INT");
setlistener(n, func(n) mod = n.getValue());
}
var m = props.globals.initNode("/devices/status/joysticks/warthog/modifier", mod, "INT");
jslistener(m, func(n) mod = n.getValue());
var trimstep = 0.75;
var viewstep = 0.5;
var button = { 18: { id: 0 }};
var button = {18: {id: 0}};
var reset_zoom = func setprop("/sim/current-view/field-of-view", 55);
var viewdir = props.globals.getNode("/sim").getChildren("view");
@ -160,6 +162,16 @@
<button n="2">
<name>Nosewheel Steering Button</name>
<desc>toggle nosewheel steering/tailwheel lock</desc>
<binding>
<command>nasal</command>
<script>
var i = !(getprop("/controls/gear/nose-wheel-steering") or 0);
setprop("/controls/gear/nose-wheel-steering", i);
setprop("/controls/gear/tailwheel-lock", !i);
popup("Tail Wheel %sLOCKED!", i ? "UN" : "");
</script>
</binding>
</button>
<button n="3">
@ -212,7 +224,6 @@
if (mod) {
var i = controls.applyParkingBrake(1);
popup("Parking Brake %s", i ? "ON" : "OFF");
controls.applyBrakes(0);
}
controls.applyBrakes(0)
</script>
@ -249,7 +260,6 @@
if (mod) {
var i = controls.applyParkingBrake(1);
popup("Parking Brake %s", i ? "ON" : "OFF");
controls.applyBrakes(0);
}
controls.applyBrakes(0)
</script>
@ -380,8 +390,8 @@
<binding>
<command>nasal</command>
<script>
view.resetView();
button[18].id += 1;
view.resetView();
</script>
</binding>
</mod-up>

View file

@ -9,10 +9,13 @@
<name>Thrustmaster Throttle - HOTAS Warthog</name>
<nasal>
<command>nasal</command>
<script>
var this = cmdarg().getParent();
var init = !contains(caller(0)[0], "init");
if (!contains(globals, "warthog"))
io.load_nasal(getprop("/sim/fg-root") ~ "/Input/Joysticks/ThrustMaster/Warthog/warthog.nas");
var jslistener = func init and call(setlistener, arg);
var popup = func gui.popupTip(call(sprintf, arg));
var is_helicopter = (func {(var n = props.globals.getNode("rotors", 0)) != nil and n.getAttribute("children")})();
var aircraft_type = getprop("/sim/type");
@ -23,7 +26,7 @@
var file = dir ~ "/Input/Joysticks/ThrustMaster/Warthog/Throttle/" ~ name ~ ".xml";
if (io.stat(file) != nil) {
printlog("info", "WARTHOG: loading overlay " ~ file);
cmdarg().getNode("script").setValue("");
cmdarg().setValues({command: "nasal", script: ""});
io.read_properties(file, this);
props.runBinding(cmdarg());
break;
@ -38,11 +41,21 @@
}
}
var gearcheck = func {
var agl = getprop("/position/altitude-agl-ft");
var geardown = getprop("/controls/gear/gear-down");
if (agl &lt; 500 and !geardown)
warthog.throttle.toggle_leds(1, 2, 3, 4, 5);
else
warthog.throttle.set_leds(0, 1, 2, 3, 4, 5);
settimer(gearcheck, 0.5);
};
if (init)
gearcheck();
var mod = 0;
if (init) {
var n = props.globals.initNode("/devices/status/joysticks/warthog/modifier", mod, "INT");
setlistener(n, func(n) mod = n.getValue());
}
var m = props.globals.initNode("/devices/status/joysticks/warthog/modifier", mod, "INT");
jslistener(m, func(n) mod = n.getValue());
var left_engines = [0, 2, 4, 6, 8, 10];
var right_engines = [1, 3, 5, 7, 9, 11];
@ -191,7 +204,20 @@
</button>
<button n="6">
<name>Speedbrake Forward</name>
<name>Speedbrake Forward (right throttle, top grey)</name>
<desc>apply speed brake</desc>
<binding>
<command>property-assign</command>
<property>/controls/flight/speedbrake</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/controls/flight/speedbrake</property>
<value>0</value>
</binding>
</mod-up>
</button>
<button n="7">
@ -204,14 +230,41 @@
<button n="9">
<name>Boat Switch Aft</name>
<desc>apply thrust reverser</desc>
<binding>
<command>nasal</command>
<script>props.setAll("/controls/engines/engine", "reverser", 1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>props.setAll("/controls/engines/engine", "reverser", 0)</script>
</binding>
</mod-up>
</button>
<button n="10">
<name>China Hat Forward</name>
<desc>+mod: increase LED brightness (see README)</desc>
<binding>
<command>nasal</command>
<script>
if (mod)
warthog.throttle.brighter();
</script>
</binding>
</button>
<button n="11">
<name>China Hat Aft</name>
<desc>+mod: decrease LED brightness (see README)</desc>
<binding>
<command>nasal</command>
<script>
if (mod)
warthog.throttle.darker();
</script>
</binding>
</button>
<button n="12">

View file

@ -0,0 +1,61 @@
# Hardware Interface (currently Linux/HIDRAW-only; see README)
var device = {
new: func(path, bufsize) {
var m = { parents: [device] };
m.path = path;
m.bufsize = bufsize;
m.leds = 0;
m.bright = 0;
var stat = io.stat(m.path);
if (stat == nil or stat[11] != "chr")
m.send = func { nil };
return m;
},
send: func {
var buf = bits.buf(me.bufsize);
buf[0] = 1;
forindex (var i; arg)
buf[i + 1] = arg[i];
var file = io.open(me.path, "wb");
io.write(file, buf);
io.close(file);
},
};
var joystick = {
parents: [device.new("/dev/input/hidraw/Thustmaster_Joystick_-_HOTAS_Warthog", 12)],
};
var throttle = {
parents: [device.new("/dev/input/hidraw/Thrustmaster_Throttle_-_HOTAS_Warthog", 36)],
set_leds: func(state, which...) { # on/off, list of leds (0: background, 1-5)
foreach (var w; which)
me.leds = bits.switch(me.leds, me._ledmap[w], state);
me.send(6, me.leds, me.bright);
},
toggle_leds: func(which...) {
foreach (var w; which)
me.leds = bits.toggle(me.leds, me._ledmap[w]);
me.send(6, me.leds, me.bright);
},
set_brightness: func(v) { # clamped to [0,5], where 0 is off and 5 is bright
me.send(6, me.leds, me.bright = v < 0 ? 0 : v > 5 ? 5 : v);
},
brighter: func {
me.leds = bits.set(me.leds, me._ledmap[0]);
me.set_brightness(me.bright + 1);
},
darker: func {
me.leds = bits.set(me.leds, me._ledmap[0]);
me.set_brightness(me.bright - 1);
},
_ledmap: {0: 3, 1: 2, 2: 1, 3: 4, 4: 0, 5: 6},
};
throttle.set_brightness(1); # LEDs dark (but on)
throttle.set_leds(1, 0); # backlight on
setlistener("/sim/signals/exit", func throttle.set_leds(0, 1, 2, 3, 4, 5), 1); # other LEDs off (now and at exit)

View file

@ -470,3 +470,33 @@ _setlistener("/sim/signals/fdm-initialized", func {
}
});
var replaySkip = func(skip_time)
{
var t = getprop("/sim/replay/time");
if (t != "")
{
t+=skip_time;
if (t>getprop("/sim/replay/end-time"))
t = getprop("/sim/replay/end-time");
if (t<0)
t=0;
setprop("/sim/replay/time", t);
}
}
var speedup = func(speed_up)
{
var t = getprop("/sim/speed-up");
if (speed_up < 0)
{
t = (t > 1/32) ? t/2 : 1/32;
if ((t<1)and(0==getprop("/sim/freeze/replay-state")))
t=1;
}
else
{
t = (t < 32) ? t*2 : 32;
}
setprop("/sim/speed-up", t);
}

View file

@ -1,4 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<airline include="KLM/MD11/MD11.xml"/>
</trafficlist>

View file

@ -1,10 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<traffic include="KLM/MD11/PH-KCA.xml"/>
<traffic include="KLM/MD11/PH-KCB.xml"/>
<traffic include="KLM/MD11/PH-KCC.xml"/>
<traffic include="KLM/MD11/PH-KCD.xml"/>
<traffic include="KLM/MD11/PH-KCE.xml"/>
<traffic include="KLM/MD11/PH-KCF.xml"/>
<traffic include="KLM/MD11/PH-KCG.xml"/>
</trafficlist>

View file

@ -1,231 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<model>Aircraft/MD11/Models/KLMmd11-ai.xml</model>
<livery>KLM</livery>
<airline>KLM</airline>
<actype>MD11</actype>
<offset>19</offset>
<radius>39</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>0/09:45:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>0/20:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0606</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>0/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>1/09:35:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: Amsterdam to Accra, Ghana -->
<flight>
<callsign>KLM0589</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>1/12:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>DGAA</port>
<time>1/19:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two Return Flight: Arrive the next Day -->
<flight>
<callsign>KLM0590</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DGAA</port>
<time>1/21:15:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>2/04:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: Amsterdam to Vancouver, BC, Canada -->
<flight>
<callsign>KLM0681</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>2/08:25:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>CYVR</port>
<time>2/18:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: return Flight: Arrive the next day -->
<flight>
<callsign>KLM0682</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYVR</port>
<time>2/20:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>EHAM</port>
<time>3/05:40:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: Amsterdam to Delhi, India -->
<flight>
<callsign>KLM0871</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>3/09:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>VIDP</port>
<time>3/17:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0872</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>VIDP</port>
<time>3/19:20:00</time>
</departure>
<cruise-alt>350</cruise-alt>
<arrival>
<port>EHAM</port>
<time>4/04:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: Amsterdam to Lagos, Nigeria -->
<flight>
<callsign>KLM0587</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>4/10:30:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>DNMM</port>
<time>4/16:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: Return Flight, Arrive the next day -->
<flight>
<callsign>KLM0588</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DNMM</port>
<time>4/21:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>5/06:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Six: Amsterdam to Montreal, Quebec, Canada -->
<flight>
<callsign>KLM0671</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>5/12:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>CYUL</port>
<time>5/19:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Six: Return Flight. Arrive the next day -->
<flight>
<callsign>KLM0672</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYUL</port>
<time>5/22:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>6/04:45:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Seven: Minneapolis/St. Paul, MN, USA -->
<flight>
<callsign>KLM0667</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>6/12:05:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KMSP</port>
<time>6/20:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Seven: Return Flight, Arrive the next day. -->
<flight>
<callsign>KLM0668</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KMSP</port>
<time>6/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>0/07:15:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,231 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<!-- The PH-KCB is a KLM MD-11, named Amy Johnson -->
<model>Aircraft/MD11/Models/KLMmd11-ai.xml</model>
<livery>KLM</livery>
<airline>KLM</airline>
<actype>MD11</actype>
<offset>19</offset>
<radius>39</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-KCB</registration>
<heavy>true</heavy>
<!-- Day two: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>1/09:45:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>1/20:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0606</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>1/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>2/09:35:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: Amsterdam to Accra, Ghana -->
<flight>
<callsign>KLM0589</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>2/12:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>DGAA</port>
<time>2/19:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three Return Flight: Arrive the next Day -->
<flight>
<callsign>KLM0590</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DGAA</port>
<time>2/21:15:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>3/04:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: Amsterdam to Vancouver, BC, Canada -->
<flight>
<callsign>KLM0681</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>3/08:25:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>CYVR</port>
<time>3/18:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: return Flight: Arrive the next day -->
<flight>
<callsign>KLM0682</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYVR</port>
<time>3/20:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>EHAM</port>
<time>4/05:40:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: Amsterdam to Delhi, India -->
<flight>
<callsign>KLM0871</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>4/09:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>VIDP</port>
<time>4/17:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0872</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>VIDP</port>
<time>4/19:20:00</time>
</departure>
<cruise-alt>350</cruise-alt>
<arrival>
<port>EHAM</port>
<time>5/04:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: Amsterdam to Lagos, Nigeria -->
<flight>
<callsign>KLM0587</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>5/10:30:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>DNMM</port>
<time>5/16:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: Return Flight, Arrive the next day -->
<flight>
<callsign>KLM0588</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DNMM</port>
<time>5/21:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>6/06:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Seven: Amsterdam to Montreal, Quebec, Canada -->
<flight>
<callsign>KLM0671</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>6/12:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>CYUL</port>
<time>6/19:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Seven: Return Flight. Arrive the next day -->
<flight>
<callsign>KLM0672</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYUL</port>
<time>6/22:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>0/04:45:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day One: Minneapolis/St. Paul, MN, USA -->
<flight>
<callsign>KLM0667</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>0/12:05:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KMSP</port>
<time>0/20:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day One: Return Flight, Arrive the next day. -->
<flight>
<callsign>KLM0668</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KMSP</port>
<time>0/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>1/07:15:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,230 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<model>Aircraft/MD11/Models/KLMmd11-ai.xml</model>
<livery>KLM</livery>
<airline>KLM</airline>
<actype>MD11</actype>
<offset>19</offset>
<radius>39</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-KCC</registration>
<heavy>true</heavy>
<!-- Day three: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>2/09:45:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>2/20:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0606</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>2/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>3/09:35:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: Amsterdam to Accra, Ghana -->
<flight>
<callsign>KLM0589</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>3/12:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>DGAA</port>
<time>3/19:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four Return Flight: Arrive the next Day -->
<flight>
<callsign>KLM0590</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DGAA</port>
<time>3/21:15:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>4/04:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: Amsterdam to Vancouver, BC, Canada -->
<flight>
<callsign>KLM0681</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>4/08:25:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>CYVR</port>
<time>4/18:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: return Flight: Arrive the next day -->
<flight>
<callsign>KLM0682</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYVR</port>
<time>4/20:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>EHAM</port>
<time>5/05:40:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: Amsterdam to Delhi, India -->
<flight>
<callsign>KLM0871</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>5/09:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>VIDP</port>
<time>5/17:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0872</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>VIDP</port>
<time>5/19:20:00</time>
</departure>
<cruise-alt>350</cruise-alt>
<arrival>
<port>EHAM</port>
<time>6/04:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day seven: Amsterdam to Lagos, Nigeria -->
<flight>
<callsign>KLM0587</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>6/10:30:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>DNMM</port>
<time>6/16:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day seven: Return Flight, Arrive the next day -->
<flight>
<callsign>KLM0588</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DNMM</port>
<time>6/21:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>0/06:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day One: Amsterdam to Montreal, Quebec, Canada -->
<flight>
<callsign>KLM0671</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>0/12:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>CYUL</port>
<time>0/19:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day One: Return Flight. Arrive the next day -->
<flight>
<callsign>KLM0672</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYUL</port>
<time>0/22:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>1/04:45:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Two: Minneapolis/St. Paul, MN, USA -->
<flight>
<callsign>KLM0667</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>1/12:05:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KMSP</port>
<time>1/20:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Two: Return Flight, Arrive the next day. -->
<flight>
<callsign>KLM0668</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KMSP</port>
<time>1/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>2/07:15:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,231 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<!-- The PH-KCD is a KLM MD-11, named Florence Nightingale -->
<model>Aircraft/MD11/Models/KLMmd11-ai.xml</model>
<livery>KLM</livery>
<airline>KLM</airline>
<actype>MD11</actype>
<offset>19</offset>
<radius>39</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-KCD</registration>
<heavy>true</heavy>
<!-- Day four: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>3/09:45:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>3/20:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0606</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>3/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>4/09:35:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: Amsterdam to Accra, Ghana -->
<flight>
<callsign>KLM0589</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>4/12:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>DGAA</port>
<time>4/19:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five Return Flight: Arrive the next Day -->
<flight>
<callsign>KLM0590</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DGAA</port>
<time>4/21:15:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>5/04:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: Amsterdam to Vancouver, BC, Canada -->
<flight>
<callsign>KLM0681</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>5/08:25:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>CYVR</port>
<time>5/18:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: return Flight: Arrive the next day -->
<flight>
<callsign>KLM0682</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYVR</port>
<time>5/20:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>EHAM</port>
<time>6/05:40:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day seven: Amsterdam to Delhi, India -->
<flight>
<callsign>KLM0871</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>6/09:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>VIDP</port>
<time>6/17:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day seven: Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0872</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>VIDP</port>
<time>6/19:20:00</time>
</departure>
<cruise-alt>350</cruise-alt>
<arrival>
<port>EHAM</port>
<time>0/04:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day one: Amsterdam to Lagos, Nigeria -->
<flight>
<callsign>KLM0587</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>0/10:30:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>DNMM</port>
<time>0/16:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day one: Return Flight, Arrive the next day -->
<flight>
<callsign>KLM0588</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DNMM</port>
<time>0/21:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>1/06:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: Amsterdam to Montreal, Quebec, Canada -->
<flight>
<callsign>KLM0671</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>1/12:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>CYUL</port>
<time>1/19:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: Return Flight. Arrive the next day -->
<flight>
<callsign>KLM0672</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYUL</port>
<time>1/22:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>2/04:45:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Three: Minneapolis/St. Paul, MN, USA -->
<flight>
<callsign>KLM0667</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>2/12:05:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KMSP</port>
<time>2/20:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Three: Return Flight, Arrive the next day. -->
<flight>
<callsign>KLM0668</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KMSP</port>
<time>2/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>3/07:15:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,231 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<!-- The PH-KCE is a KLM MD-11, named Audry Hepburn -->
<aircraft>
<model>Aircraft/MD11/Models/KLMmd11-ai.xml</model>
<livery>KLM</livery>
<airline>KLM</airline>
<actype>MD11</actype>
<offset>19</offset>
<radius>39</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-KCE</registration>
<heavy>true</heavy>
<!-- Day five: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>4/09:45:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>4/20:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0606</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>4/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>5/09:35:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: Amsterdam to Accra, Ghana -->
<flight>
<callsign>KLM0589</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>5/12:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>DGAA</port>
<time>5/19:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six Return Flight: Arrive the next Day -->
<flight>
<callsign>KLM0590</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DGAA</port>
<time>5/21:15:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>6/04:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day seven: Amsterdam to Vancouver, BC, Canada -->
<flight>
<callsign>KLM0681</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>6/08:25:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>CYVR</port>
<time>6/18:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day seven: return Flight: Arrive the next day -->
<flight>
<callsign>KLM0682</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYVR</port>
<time>6/20:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>EHAM</port>
<time>0/05:40:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day one: Amsterdam to Delhi, India -->
<flight>
<callsign>KLM0871</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>0/09:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>VIDP</port>
<time>0/17:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day one: Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0872</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>VIDP</port>
<time>0/19:20:00</time>
</departure>
<cruise-alt>350</cruise-alt>
<arrival>
<port>EHAM</port>
<time>1/04:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: Amsterdam to Lagos, Nigeria -->
<flight>
<callsign>KLM0587</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>1/10:30:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>DNMM</port>
<time>1/16:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: Return Flight, Arrive the next day -->
<flight>
<callsign>KLM0588</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DNMM</port>
<time>1/21:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>2/06:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: Amsterdam to Montreal, Quebec, Canada -->
<flight>
<callsign>KLM0671</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>2/12:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>CYUL</port>
<time>2/19:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: Return Flight. Arrive the next day -->
<flight>
<callsign>KLM0672</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYUL</port>
<time>2/22:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>3/04:45:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Four: Minneapolis/St. Paul, MN, USA -->
<flight>
<callsign>KLM0667</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>3/12:05:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KMSP</port>
<time>3/20:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Four: Return Flight, Arrive the next day. -->
<flight>
<callsign>KLM0668</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KMSP</port>
<time>3/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>4/07:15:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,231 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<!-- The PH-KCF is a KLM MD-11, named Annie Romijn -->
<aircraft>
<model>Aircraft/MD11/Models/KLMmd11-ai.xml</model>
<livery>KLM</livery>
<airline>KLM</airline>
<actype>MD11</actype>
<offset>19</offset>
<radius>39</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-KCF</registration>
<heavy>true</heavy>
<!-- Day six Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>5/09:45:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>5/20:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0606</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>5/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>6/09:35:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day seven amsterdam to Accra, Ghana -->
<flight>
<callsign>KLM0589</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>6/12:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>DGAA</port>
<time>6/19:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day seven: return Flight: Arrive the next Day -->
<flight>
<callsign>KLM0590</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DGAA</port>
<time>6/21:15:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>0/04:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day one: Amsterdam to Vancouver, BC, Canada -->
<flight>
<callsign>KLM0681</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>0/08:25:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>CYVR</port>
<time>0/18:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day one: return Flight: Arrive the next day -->
<flight>
<callsign>KLM0682</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYVR</port>
<time>0/20:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>EHAM</port>
<time>1/05:40:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: Amsterdam to Delhi, India -->
<flight>
<callsign>KLM0871</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>1/09:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>VIDP</port>
<time>1/17:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0872</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>VIDP</port>
<time>1/19:20:00</time>
</departure>
<cruise-alt>350</cruise-alt>
<arrival>
<port>EHAM</port>
<time>2/04:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: Amsterdam to Lagos, Nigeria -->
<flight>
<callsign>KLM0587</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>2/10:30:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>DNMM</port>
<time>2/16:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: Return Flight, Arrive the next day -->
<flight>
<callsign>KLM0588</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DNMM</port>
<time>2/21:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>3/06:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: Amsterdam to Montreal, Quebec, Canada -->
<flight>
<callsign>KLM0671</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>3/12:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>CYUL</port>
<time>3/19:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: Return Flight. Arrive the next day -->
<flight>
<callsign>KLM0672</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYUL</port>
<time>3/22:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>4/04:45:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Five: Minneapolis/St. Paul, MN, USA -->
<flight>
<callsign>KLM0667</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>4/12:05:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KMSP</port>
<time>4/20:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day Five: Return Flight, Arrive the next day. -->
<flight>
<callsign>KLM0668</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KMSP</port>
<time>4/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>5/07:15:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,231 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<!-- The PH-KCG is a KLM MD-11, named Maria Callas -->
<aircraft>
<model>Aircraft/MD11/Models/KLMmd11-ai.xml</model>
<livery>KLM</livery>
<airline>KLM</airline>
<actype>MD11</actype>
<offset>19</offset>
<radius>39</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>PH-KCG</registration>
<heavy>true</heavy>
<!-- Day seven Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>6/09:45:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>6/20:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0606</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>6/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>0/09:35:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day one amsterdam to Accra, Ghana -->
<flight>
<callsign>KLM0589</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>0/12:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>DGAA</port>
<time>0/19:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day one: return Flight: Arrive the next Day -->
<flight>
<callsign>KLM0590</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DGAA</port>
<time>0/21:15:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>1/04:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: Amsterdam to Vancouver, BC, Canada -->
<flight>
<callsign>KLM0681</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>1/08:25:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>CYVR</port>
<time>1/18:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day two: return Flight: Arrive the next day -->
<flight>
<callsign>KLM0682</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYVR</port>
<time>1/20:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>EHAM</port>
<time>2/05:40:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: Amsterdam to Delhi, India -->
<flight>
<callsign>KLM0871</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>2/09:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>VIDP</port>
<time>2/17:20:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day three: Return Flight: Arrive the next day -->
<flight>
<callsign>KLM0872</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>VIDP</port>
<time>2/19:20:00</time>
</departure>
<cruise-alt>350</cruise-alt>
<arrival>
<port>EHAM</port>
<time>3/04:00:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: Amsterdam to Lagos, Nigeria -->
<flight>
<callsign>KLM0587</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>3/10:30:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>DNMM</port>
<time>3/16:55:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day four: Return Flight, Arrive the next day -->
<flight>
<callsign>KLM0588</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>DNMM</port>
<time>3/21:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>4/06:10:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: Amsterdam to Montreal, Quebec, Canada -->
<flight>
<callsign>KLM0671</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>4/12:20:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>CYUL</port>
<time>4/19:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day five: Return Flight. Arrive the next day -->
<flight>
<callsign>KLM0672</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>CYUL</port>
<time>4/22:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>5/04:45:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: Minneapolis/St. Paul, MN, USA -->
<flight>
<callsign>KLM0667</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>5/12:05:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KMSP</port>
<time>5/20:50:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
<!-- Day six: Return Flight, Arrive the next day. -->
<flight>
<callsign>KLM0668</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KMSP</port>
<time>5/23:00:00</time>
</departure>
<cruise-alt>340</cruise-alt>
<arrival>
<port>EHAM</port>
<time>6/07:15:00</time>
</arrival>
<repeat>WEEK</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,7 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<traffic include="UAL/737/N376UA.xml"/>
<Traffic include="UAL/737/N377UA.xml"/>
<TRaffic include="UAL/737/N388UA.xml"/>
<traffic include="UAL/737/N390UA.xml"/>
</trafficlist>

View file

@ -1,90 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<model>Aircraft/737-300/Models/737-300.xml</model>
<livery>UAL</livery>
<airline>UAL</airline>
<actype>737-300</actype>
<offset>10</offset>
<radius>23</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>N376UA</registration>
<heavy>false</heavy>
<flight>
<callsign>United0309</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>16:19:00</time>
</departure>
<cruise-alt>300</cruise-alt>
<arrival>
<port>KSAN</port>
<time>17:47:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United0580</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSAN</port>
<time>18:32:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>19:55:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United07940</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>20:55:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSEA</port>
<time>22:48:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United1175</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSEA</port>
<time>00:20:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KLAX</port>
<time>02:56:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United0996</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KLAX</port>
<time>04:00:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>05:19:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,77 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<model>Aircraft/737-300/Models/737-300.xml</model>
<livery>UAL</livery>
<airline>UAL</airline>
<actype>737-300</actype>
<offset>10</offset>
<radius>23</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>N390UA</registration>
<heavy>false</heavy>
<flight>
<callsign>United0788</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>16:37:00</time>
</departure>
<cruise-alt>300</cruise-alt>
<arrival>
<port>KSEA</port>
<time>18:35:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United1053</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSEA</port>
<time>19:20:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>21:20:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United1053</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>22:10:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSAN</port>
<time>23:40:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United0992</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSAN</port>
<time>00:25:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:25:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,60 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<model>Aircraft/737-300/Models/737-300.xml</model>
<livery>UAL</livery>
<airline>UAL</airline>
<actype>737-300</actype>
<offset>10</offset>
<radius>23</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<registration>N376UA</registration>
<heavy>false</heavy>
<flight>
<callsign>United1232</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KBUR</port>
<time>15:45:00</time>
</departure>
<cruise-alt>300</cruise-alt>
<arrival>
<port>KDEN</port>
<time>17:55:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United0549</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KDEN</port>
<time>20:45:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>23:13:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United07940</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>02:30:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KBUR</port>
<time>03:35:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,89 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<model>Aircraft/737-300/Models/737-300.xml</model>
<livery>UAL</livery>
<airline>UAL</airline>
<actype>737-300</actype>
<offset>10</offset>
<radius>23</radius>
<flighttype>gate</flighttype>
<performance-class>jet_transport</performance-class>
<heavy>false</heavy>
<flight>
<callsign>United0346</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>15:00:00</time>
</departure>
<cruise-alt>300</cruise-alt>
<arrival>
<port>KSEA</port>
<time>16:52:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United1243</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSEA</port>
<time>17:45:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>19:52:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United0580</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KSFO</port>
<time>20:45:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KPDX</port>
<time>22:24:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United0459</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KPDX</port>
<time>23:10:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KLAX</port>
<time>01:27:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
<flight>
<callsign>United1214</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>KLAX</port>
<time>03:30:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>04:49:00</time>
</arrival>
<repeat>24Hr</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,4 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<airline include="UAL/737/737.xml"/>
</trafficlist>

View file

@ -1,7 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<!-- <traffic include="KLM/KLM.xml"/> -->
<traffic include="UAL/UAL.xml"/>
<!-- <traffic include="general/KSFO/c172.xml"/> -->
<!-- <traffic include="traffic.xml"/> -->
</trafficlist>

View file

@ -1,39 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<model>Aircraft/c172/Models/c172-dpm.xml</model>
<livery>UAL</livery>
<registration>C-DPM</registration>
<heavy>false</heavy>
<flight>
<callsign>C-DPM</callsign>
<fltrules>VFR</fltrules>
<departure>
<port>KSFO</port>
<time>15:00:00</time>
</departure>
<cruise-alt>300</cruise-alt>
<arrival>
<port>KOAK</port>
<time>15:30:00</time>
</arrival>
<repeat>2Hr</repeat>
</flight>
<flight>
<callsign>C-DPM</callsign>
<fltrules>VFR</fltrules>
<departure>
<port>KOAK</port>
<time>16:00:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>16:30:00</time>
</arrival>
<repeat>2Hr</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,39 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<model>Aircraft/c172/Models/c172-dpm.xml</model>
<livery>UAL</livery>
<registration>C-DPM</registration>
<heavy>false</heavy>
<flight>
<callsign>C-DPM</callsign>
<fltrules>VFR</fltrules>
<departure>
<port>KSFO</port>
<time>15:00:00</time>
</departure>
<cruise-alt>300</cruise-alt>
<arrival>
<port>KOAK</port>
<time>15:30:00</time>
</arrival>
<repeat>2Hr</repeat>
</flight>
<flight>
<callsign>C-DPM</callsign>
<fltrules>VFR</fltrules>
<departure>
<port>KOAK</port>
<time>16:00:00</time>
</departure>
<cruise-alt>310</cruise-alt>
<arrival>
<port>KSFO</port>
<time>16:30:00</time>
</arrival>
<repeat>2Hr</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,280 +0,0 @@
<?xml version="1.0"?>
<trafficlist>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:00:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:00:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:05:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:05:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:10:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:10:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:15:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:15:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:20:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:20:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:25:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:25:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:30:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:30:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:35:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:35:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:40:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:40:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:45:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:45:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:50:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:50:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
<aircraft>
<type>MD11</type>
<livery>KLM</livery>
<registration>PH-KCA</registration>
<heavy>true</heavy>
<!-- Day one: Amsterdam to San Fransisco, CA, USA -->
<flight>
<callsign>KLM0605</callsign>
<fltrules>IFR</fltrules>
<departure>
<port>EHAM</port>
<time>00:55:00</time>
</departure>
<cruise-alt>330</cruise-alt>
<arrival>
<port>KSFO</port>
<time>01:55:00</time>
</arrival>
<repeat>1Hr</repeat>
</flight>
</aircraft>
</trafficlist>

View file

@ -1,205 +1,487 @@
<?xml version="1.0"?>
<PropertyList>
<name>replay</name>
<modal>false</modal>
<layout>vbox</layout>
<name>replay</name>
<layout>vbox</layout>
<modal>false</modal>
<default-padding>1</default-padding>
<y>5</y>
<color>
<red>0.2</red>
<green>0.2</green>
<blue>0.2</blue>
<alpha>0.7</alpha>
</color>
<group>
<layout>hbox</layout>
<empty><stretch>1</stretch></empty>
<nasal>
<open><![CDATA[
var ReplayDialogController = {
<text>
<label>Instant Replay</label>
</text>
new : func( dlgRoot ) {
var obj = { parents: [ReplayDialogController] };
obj.dlgRoot = dlgRoot;
return obj;
},
<empty><stretch>1</stretch></empty>
open : func {
var replaySlider = me.findElementByName( me.dlgRoot, "replay-time-slider" );
me.maxProp = replaySlider.getChild("max");
me.minProp = replaySlider.getChild("min");
me.maxListenerId = setlistener( "/sim/speed-up", func(n) { me.updateListener(n); }, 1, 1 );
if (getprop("/sim/replay/end-time")!=nil)
{
# update max/min range of replay-time slider
me.maxProp.setValue(getprop("/sim/replay/end-time"));
me.minProp.setValue(getprop("/sim/replay/start-time"));
}
me.updateListener(1);
},
<button>
<pref-width>16</pref-width>
<pref-height>16</pref-height>
<legend></legend>
<keynum>27</keynum>
<border>2</border>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
updateListener : func( n ) {
var SpeedUp = getprop("/sim/speed-up");
if (SpeedUp<0.9)
{
SpeedUp=1/SpeedUp;
SpeedUp = "1/" ~ SpeedUp;
}
setprop("/sim/gui/dialogs/replay/time-factor","" ~ SpeedUp ~ "x");
},
<hrule/>
close : func {
#removelistener( me.maxListenerId );
},
<nasal>
<open>
# Populate the view combo box with a list of the available views
var combo = cmdarg().getChildren("group")[1].getNode("combo");
combo.removeChildren("value");
findElementByName : func(base,name) {
foreach( var child; base.getChildren() ) {
var n = child.getNode( "name" );
if( n != nil and n.getValue() == name )
return child;
var f = me.findElementByName(child,name);
if( f != nil ) return f;
}
return nil;
},
var current_view = getprop("/sim/current-view/view-number");
var i = 0;
foreach (var v; view.views) {
};
var name = "Unnamed view " ~ v.getIndex();
var controller = ReplayDialogController.new( cmdarg() );
controller.open();
]]></open>
if (v.getNode("name") != nil) {
name = v.getNode("name").getValue();
}
<close><![CDATA[
controller.close();
]]></close>
</nasal>
# Pre-populate the combo box selected value
if (v.getIndex() == current_view) {
setprop("/sim/replay/view-name", name);
}
<group>
<layout>hbox</layout>
<halign>fill</halign>
<pref-height>28</pref-height>
combo.getNode("value[" ~ i ~ "]", 1).setValue(name);
i = i + 1;
}
</open>
</nasal>
<text>
<font>
<name>SANS_12B</name>
</font>
<label>REPLAY</label>
<color>
<red>0.9</red>
<green>0.9</green>
<blue>0.9</blue>
<alpha>1</alpha>
</color>
<pref-width>70</pref-width>
</text>
<group>
<layout>table</layout>
<text>
<label>Loop:</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
</text>
<text>
<row>0</row><col>0</col>
<halign>right</halign>
<label>Duration:</label>
</text>
<checkbox>
<name>replay-looped</name>
<halign>left</halign>
<color-highlight>
<red type="float">0.6</red>
<green type="float">0.6</green>
<blue type="float">0.6</blue>
<alpha type="float">0.8</alpha>
</color-highlight>
<property>/sim/replay/looped</property>
<binding>
<command>dialog-apply</command>
<object-name>replay-looped</object-name>
</binding>
</checkbox>
<input>
<name>replay-duration</name>
<pref-width>40</pref-width>
<color>
<red>0.5</red>
<green>0.5</green>
<blue>0.5</blue>
<alpha type="float">0.8</alpha>
</color>
<property>/sim/replay/duration</property>
<binding>
<command>dialog-apply</command>
<object-name>replay-duration</object-name>
</binding>
</input>
<input>
<row>0</row><col>1</col>
<pref-width>40</pref-width>
<halign>left</halign>
<property>/sim/replay/duration</property>
</input>
<empty><pref-width>40</pref-width></empty>
<text>
<row>1</row><col>0</col>
<halign>right</halign>
<label>View:</label>
</text>
<text>
<label>Time: 99:99:99.9</label>
<format>Time: %s</format>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<live>true</live>
<property>/sim/replay/time-str</property>
</text>
<combo>
<row>1</row><col>1</col>
<halign>left</halign>
<pref-width>200</pref-width>
<property>/sim/replay/view-name</property>
<binding>
<command>dialog-apply</command>
</binding>
</combo>
<empty><pref-width>10</pref-width></empty>
<checkbox>
<row>2</row><col>1</col>
<halign>left</halign>
<property>/sim/replay/looped</property>
<label>Looped replay</label>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
</group>
<text>
<label>Size: 999.9MB</label>
<format>Size: %.1fMB</format>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<property>/sim/replay/buffer-size-mbyte</property>
</text>
<hrule/>
<empty><pref-width>40</pref-width></empty>
<text>
<halign>left</halign>
<label>During replay:</label>
</text>
<text>
<label>Speed:</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
</text>
<button>
<legend><![CDATA[-]]></legend>
<pref-width>20</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.speedup(-1);</script>
</binding>
</button>
<text>
<label>1/16x</label>
<pref-width>28</pref-width>
<format>%s</format>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<live>true</live>
<property>/sim/gui/dialogs/replay/time-factor</property>
</text>
<button>
<legend><![CDATA[+]]></legend>
<pref-width>20</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.speedup(1);</script>
</binding>
</button>
<group>
<layout>table</layout>
<empty><stretch>1</stretch></empty>
<!--
<button>
<pref-width>16</pref-width>
<pref-height>16</pref-height>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<legend></legend>
<keynum>27</keynum>
<border>2</border>
<binding>
<command>dialog-close</command>
</binding>
</button>
-->
<button>
<legend>Hide</legend>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<pref-width>40</pref-width>
<binding>
<command>nasal</command>
<script><![CDATA[
setprop("/sim/messages/copilot", "Replay active. 'Esc' to stop. 'Ctrl-R' to show replay controls.");
]]></script>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
<text>
<row>1</row><col>0</col>
<halign>center</halign>
<label>v/V</label>
</text>
<group>
<layout>hbox</layout>
<halign>center</halign>
<text>
<row>1</row><col>1</col>
<halign>left</halign>
<label>Change view</label>
</text>
<button>
<legend><![CDATA[<<]]></legend>
<pref-width>30</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.replaySkip(-30);</script>
</binding>
</button>
<text>
<row>2</row><col>0</col>
<halign>center</halign>
<label>Ctrl-v</label>
</text>
<button>
<legend><![CDATA[<]]></legend>
<pref-width>30</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.replaySkip(-5);</script>
</binding>
</button>
<text>
<row>2</row><col>1</col>
<halign>left</halign>
<label>Reset view</label>
</text>
<text>
<label>9:99:99</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<format>%8s</format>
<halign>right</halign>
<live>true</live>
<property>/sim/replay/start-time-str</property>
</text>
<text>
<row>3</row><col>0</col>
<halign>center</halign>
<label>p p</label>
</text>
<slider>
<name>replay-time-slider</name>
<border>0</border>
<color>
<red>0.4</red>
<green>0.4</green>
<blue>0.4</blue>
<alpha>1</alpha>
</color>
<halign>left</halign>
<pref-width>350</pref-width>
<min>0</min><!-- property is updated on "dialog open" -->
<max>1.0</max><!-- property is updated on "dialog open" -->
<property>/sim/replay/time</property>
<live>true</live>
<binding>
<command>dialog-apply</command>
<object-name>replay-time-slider</object-name>
</binding>
</slider>
<text>
<row>3</row><col>1</col>
<halign>left</halign>
<label>End replay</label>
</text>
</group>
<text>
<label>9:99:99</label>
<color>
<red>0.7</red>
<green>0.7</green>
<blue>0.7</blue>
<alpha>1</alpha>
</color>
<format>%s</format>
<halign>left</halign>
<live>true</live>
<property>/sim/replay/end-time-str</property>
</text>
<hrule/>
<button>
<legend><![CDATA[>]]></legend>
<pref-width>30</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.replaySkip(5);</script>
</binding>
</button>
<group>
<layout>hbox</layout>
<empty><stretch>true</stretch></empty>
<button>
<legend>Start</legend>
<default>true</default>
<equal>true</equal>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var index = view.indexof(getprop("/sim/replay/view-name"));
setprop("/sim/current-view/view-number", index);
</script>
</binding>
<binding>
<command>replay</command>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
<empty><stretch>true</stretch></empty>
<button>
<legend>Stop</legend>
<equal>true</equal>
<enable>
<greater-than>
<property>/sim/freeze/replay-state</property>
<value>0</value>
</greater-than>
</enable>
<binding>
<property>/sim/replay/disable</property>
<command>property-assign</command>
<value type="bool">true</value>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
<empty><stretch>true</stretch></empty>
<button>
<legend>Cancel</legend>
<equal>true</equal>
<key>Esc</key>
<binding>
<command>dialog-close</command>
</binding>
</button>
<empty><stretch>true</stretch></empty>
</group>
<button>
<legend><![CDATA[>>]]></legend>
<pref-width>30</pref-width>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<binding>
<command>nasal</command>
<script>controls.replaySkip(30);</script>
</binding>
</button>
</group>
<group>
<layout>hbox</layout>
<halign>center</halign>
<stretch>false</stretch>
<default-padding>3</default-padding>
<button>
<legend>Pause</legend>
<default>true</default>
<border>2</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<property>/sim/freeze/master</property>
<live>true</live>
<pref-width>47</pref-width>
<binding>
<command>property-toggle</command>
<property>/sim/freeze/clock</property>
</binding>
<binding>
<command>property-toggle</command>
<property>/sim/freeze/master</property>
</binding>
</button>
<button>
<legend>End Replay</legend>
<key>Esc</key>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<!--<pref-width>47</pref-width>-->
<binding>
<command>property-assign</command>
<property>/sim/replay/disable</property>
<value type="bool">true</value>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
<!-- Future features...
<button>
<legend>My controls!</legend>
<border>1</border>
<color>
<red>1</red>
<green>0.3</green>
<blue>0.3</blue>
<alpha>0.8</alpha>
</color>
<pref-width>80</pref-width>
<binding>
<command>property-assign</command>
<property>/sim/freeze/replay-state</property>
<value type="int">3</value>
</binding>
<binding>
<command>property-assign</command>
<property>/sim/replay/disable</property>
<value type="bool">true</value>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
<button>
<legend>Save</legend>
<border>1</border>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<pref-width>43</pref-width>
<binding>
<command>nasal</command>
<script>gui.popupTip("Not implemented yet. Comming soon.");</script>
</binding>
</button>
<button>
<legend>Load</legend>
<border>1</border>
<enable>0</enable>
<color>
<red type="float">0.3</red>
<green type="float">0.3</green>
<blue type="float">0.3</blue>
<alpha type="float">0.8</alpha>
</color>
<pref-width>40</pref-width>
<binding>
<command>nasal</command>
<script>gui.popupTip("Not implemented yet. Comming soon.");</script>
</binding>
</button>
-->
</group>
</PropertyList>

View file

@ -33,46 +33,67 @@
<halign>center</halign>
<text>
<row>0</row><col>1</col>
<label>Max. Range (m)</label>
<row>0</row><col>1</col><colspan>3</colspan>
<label>Max. Ranges (m)</label>
</text>
<text>
<row>1</row><col>0</col>
<halign>right</halign>
<row>1</row><col>1</col>
<label>Detailed</label>
</text>
<input>
<row>1</row><col>1</col>
<halign>fill</halign>
<property>/sim/rendering/static-lod/detailed</property>
</input>
<text>
<row>1</row><col>2</col>
<label>Rough</label>
</text>
<text>
<row>1</row><col>3</col>
<label>Bare</label>
</text>
<text>
<row>2</row><col>0</col>
<halign>right</halign>
<label>Rough</label>
<label>Scenery</label>
</text>
<input>
<row>2</row><col>1</col>
<halign>fill</halign>
<property>/sim/rendering/static-lod/detailed</property>
</input>
<input>
<row>2</row><col>2</col>
<halign>fill</halign>
<property>/sim/rendering/static-lod/rough</property>
</input>
<input>
<row>2</row><col>3</col>
<halign>fill</halign>
<property>/sim/rendering/static-lod/bare</property>
</input>
<text>
<row>3</row><col>0</col>
<halign>right</halign>
<label>Bare</label>
<label>AI/MP Aircraft</label>
</text>
<input>
<row>3</row><col>1</col>
<halign>fill</halign>
<property>/sim/rendering/static-lod/bare</property>
<property>/sim/rendering/static-lod/ai-detailed</property>
</input>
<!-- // meaningless for now...
<input>
<row>3</row><col>3</col>
<halign>fill</halign>
<property>/sim/rendering/static-lod/ai-bare</property>
</input>
-->
</group>
<hrule/>

View file

@ -86,10 +86,8 @@
<button>
<legend>-</legend>
<binding>
<command>property-adjust</command>
<property>/sim/speed-up</property>
<min>1</min>
<step type="double">-1</step>
<command>nasal</command>
<script>controls.speedup(-1);</script>
</binding>
</button>
<button>
@ -104,10 +102,8 @@
<button>
<legend>+</legend>
<binding>
<command>property-adjust</command>
<property>/sim/speed-up</property>
<min>1</min>
<step type="double">1</step>
<command>nasal</command>
<script>controls.speedup(1);</script>
</binding>
</button>
</group>

View file

@ -190,6 +190,9 @@
<item>
<label>Instant Replay (Ctrl-R)</label>
<binding>
<command>replay</command>
</binding>
<binding>
<command>dialog-show</command>
<dialog-name>replay</dialog-name>

View file

@ -168,6 +168,10 @@ top down before the key bindings are parsed.
<binding>
<command>replay</command>
</binding>
<binding>
<command>dialog-show</command>
<dialog-name>replay</dialog-name>
</binding>
</key>
<key n="19">
@ -268,9 +272,22 @@ top down before the key bindings are parsed.
<name>ESC</name>
<desc>Prompt and quit FlightGear</desc>
<binding>
<condition>
<not>
<property>/sim/freeze/replay-state</property>
</not>
</condition>
<command>dialog-show</command>
<dialog-name>exit</dialog-name>
</binding>
<binding>
<condition>
<property>/sim/freeze/replay-state</property>
</condition>
<command>property-assign</command>
<property>/sim/replay/disable</property>
<value type="bool">true</value>
</binding>
<mod-shift>
<desc>Reset FlightGear</desc>
<binding>
@ -1242,7 +1259,10 @@ top down before the key bindings are parsed.
<binding>
<command>nasal</command>
<script>
controls.incAileron(-0.05, -1.0)
if (getprop("/sim/freeze/replay-state"))
controls.replaySkip(-5);
else
controls.incAileron(-0.05, -1.0)
</script>
</binding>
<mod-shift>
@ -1262,7 +1282,10 @@ top down before the key bindings are parsed.
<binding>
<command>nasal</command>
<script>
controls.incElevator(0.05, -100)
if (getprop("/sim/freeze/replay-state"))
controls.speedup(1);
else
controls.incElevator(0.05, -100)
</script>
</binding>
<mod-shift>
@ -1282,7 +1305,10 @@ top down before the key bindings are parsed.
<binding>
<command>nasal</command>
<script>
controls.incAileron(0.05, 1.0)
if (getprop("/sim/freeze/replay-state"))
controls.replaySkip(5);
else
controls.incAileron(0.05, 1.0)
</script>
<step type="double">0.05</step>
</binding>
@ -1303,7 +1329,10 @@ top down before the key bindings are parsed.
<binding>
<command>nasal</command>
<script>
controls.incElevator(-0.05, 100)
if (getprop("/sim/freeze/replay-state"))
controls.speedup(-1);
else
controls.incElevator(-0.05, 100)
</script>
</binding>
<mod-shift>

View file

@ -85,13 +85,13 @@ Started September 2000 by David Megginson, david@megginson.com
DrawThreadPerContext
CullDrawThreadPerContext
CullThreadPerCameraDrawThreadPerContext
NOTE: Enabling this option currently breaks the screenshot function.
-->
<static-lod>
<detailed userarchive="y">1500</detailed>
<rough userarchive="y">9000</rough>
<bare userarchive="y">30000</bare>
<ai-detailed userarchive="y">10000</ai-detailed>
<!-- ai-bare userarchive="y">10000</ai-bare -->
</static-lod>
<random-objects type="bool"
userarchive="y">true</random-objects>
@ -677,6 +677,17 @@ Started September 2000 by David Megginson, david@megginson.com
<duration type="double">90</duration>
<view type="int">1</view>
<looped type="bool" userarchive="y">true</looped>
<buffer> <!-- replay buffer configuration -->
<!-- 1st buffer level: short term -->
<high-res-time type="double">60.0</high-res-time> <!-- 60 seconds -->
<!-- short term sample rate is as every frame (fixed) -->
<!-- 2nd buffer level: medium term -->
<medium-res-sample-dt type="double">0.5</medium-res-sample-dt>
<medium-res-time type="double">600.0</medium-res-time><!-- 10 mins -->
<!-- 3rd buffer level: long term -->
<low-res-sample-dt type="double">5.0</low-res-sample-dt>
<low-res-time type="double">3600.0</low-res-time><!-- 1 h -->
</buffer>
</replay>
<airport>
@ -729,6 +740,7 @@ Started September 2000 by David Megginson, david@megginson.com
userarchive="y">true</chat-display>
<chat-menu include="ATC/chat-menu-entries.xml"/>
<write-message-log type="bool">false</write-message-log>
<freeze-on-replay type="bool">true</freeze-on-replay>
<default-model type="string">Models/Geometry/glider.ac</default-model>
</multiplay>
@ -768,6 +780,11 @@ Started September 2000 by David Megginson, david@megginson.com
<ext-svn-utility type="string">svn</ext-svn-utility> <!-- use absolute path if "svn"
isn't on system PATH (external SVN only)-->
</terrasync>
<flight-recorder>
<default-config type="string">/Aircraft/Generic/flightrecorder/generic-piston-propeller-4.xml</default-config>
</flight-recorder>
</sim>
<!-- mouse mode -->
<devices>