1
0
Fork 0

Translation: Disable Chinese translation for in-sim menu due to lack of font support and minor translation updates

This commit is contained in:
Sidi Liang 2019-01-08 17:29:20 +08:00
commit 73b9c18057
137 changed files with 607964 additions and 56983 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74F-main.xml">
<texture-path>Textures/UPS</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74N-main.xml">
<texture-path>Textures/AirBridgeCargo</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74N-main.xml">
<texture-path>Textures/CargoLogicAir</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74N-main.xml">
<texture-path>Textures/Cargolux</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74N-main.xml">
<texture-path>Textures/CathayPacific</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74N-main.xml">
<texture-path>Textures/Default</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74N-main.xml">
<texture-path>Textures/Korean</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74N-main.xml">
<texture-path>Textures/UPS</texture-path>
</PropertyList>

View file

@ -0,0 +1,31 @@
<?xml version="1.0"?>
<PropertyList>
<description>Boeing 747-8 Freighter</description>
<author>Ian(Yves) Tolosa. Dec 2016 </author>
<path>Models/74N.ac</path>
<!-- Pitch Forward so nosewheel on ground -->
<offsets>
<pitch-deg>-0.5</pitch-deg>
</offsets>
<!-- Gear Showed only < 180 knotspeed -->
<animation>
<type>select</type>
<object-name>Gear</object-name>
<condition>
<less-than>
<property>velocities/true-airspeed-kt</property>
<value>180</value>
</less-than>
</condition>
</animation>
<!-- Tail and Windows Lightmap Effect -->
<effect>
<inherits-from>AI/Aircraft/747/Effects/74N-LightMap</inherits-from>
<object-name>74N</object-name>
<object-name>Gear</object-name>
</effect>
<!-- Add Navigation Lights Objects -->
<model>
<path>Lights/74N-NavLights.xml</path>
</model>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="74Y-main.xml">
<texture-path>Textures/UPS</texture-path>
</PropertyList>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Lighting of Tail, Flanks and Windows -->
<PropertyList>
<name>74N-LightMap</name>
<inherits-from>Effects/model-combined-deferred</inherits-from>
<parameters>
<normalmap-enabled type="int">0</normalmap-enabled>
<reflection-enabled type="int">0</reflection-enabled>
<reflection-dynamic type="int">0</reflection-dynamic>
<reflect_map-enabled type="int">0</reflect_map-enabled>
<reflection-correction type="float">0</reflection-correction>
<!-- Enable 3 colors RGB LigntMap -->
<lightmap-enabled type="int"><use>/environment/lightmap-factor</use></lightmap-enabled>
<lightmap-multi type="int">1</lightmap-multi>
<!-- Red Channel (Tail) - Night Activation and Color -->
<lightmap-factor type="float" n="0">1</lightmap-factor>
<lightmap-color type="vec3d" n="0">1.0 1.0 1.0</lightmap-color>
<!-- Green Channel (Windows) Multiplying Factor and Color -->
<lightmap-factor type="float" n="1">1.5</lightmap-factor>
<lightmap-color type="vec3d" n="1">1.0 1.0 1.0</lightmap-color>
<!-- Blue Channel (OFF) Multiplying Factor and Color -->
<lightmap-factor type="float" n="2">0</lightmap-factor>
<lightmap-color type="vec3d" n="2">1.0 1.0 1.0</lightmap-color>
<!-- Alpha Channel (OFF) Multiplying Factor and Color -->
<lightmap-factor type="float" n="3">0.0</lightmap-factor>
<lightmap-color type="vec3d" n="3">1.0 1.0 1.0</lightmap-color>
<!-- LightMap Image Location -->
<texture n="3">
<image>AI/Aircraft/747/Effects/74N-LightMap.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>
<internal-format>normalized</internal-format>
</texture>
</parameters>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

View file

@ -0,0 +1,122 @@
<?xml version="1.0"?>
<!-- Author Ian (Yves Tolosa) - DEC 2018 -->
<PropertyList>
<!-- Position ALS Navigation Lights -->
<model>
<name>nav-right</name>
<path>AI/Lights/procedural_light_nav_right.xml</path>
<offsets>
<x-m>17.1706</x-m>
<y-m>34.2893</y-m>
<z-m>7.33728</z-m>
</offsets>
</model>
<model>
<name>nav-left</name>
<path>AI/Lights/procedural_light_nav_left.xml</path>
<offsets>
<x-m>17.1706</x-m>
<y-m>-34.2893</y-m>
<z-m>7.33728</z-m>
</offsets>
</model>
<model>
<name>nav-tail</name>
<path>AI/Lights/procedural_light_nav_tail.xml</path>
<offsets>
<x-m>36.7564</x-m>
<y-m>0</y-m>
<z-m>8.78049</z-m>
</offsets>
</model>
<!-- Position ALS Strobes -->
<model>
<name>strobe-right</name>
<path>AI/Lights/procedural_light_strobe_right.xml</path>
<offsets>
<x-m>18.2081</x-m>
<y-m>34.2893</y-m>
<z-m>7.33728</z-m>
</offsets>
</model>
<model>
<name>strobe-left</name>
<path>AI/Lights/procedural_light_strobe_left.xml</path>
<offsets>
<x-m>18.2081</x-m>
<y-m>-34.2893</y-m>
<z-m>7.33728</z-m>
</offsets>
</model>
<model>
<name>strobe-tail</name>
<path>AI/Lights/procedural_light_strobe_tail.xml</path>
<offsets>
<x-m>36.2309</x-m>
<y-m>0</y-m>
<z-m>9.19356</z-m>
</offsets>
</model>
<!-- Position Beacons -->
<model>
<name>beacon-top</name>
<path>AI/Lights/procedural_light_beacon_top.xml</path>
<offsets>
<x-m>-25.176</x-m>
<y-m>0</y-m>
<z-m>10.1285</z-m>
</offsets>
</model>
<model>
<name>beacon-bottom</name>
<path>AI/Lights/procedural_light_beacon_bottom.xml</path>
<offsets>
<x-m>-9.59593</x-m>
<y-m>0</y-m>
<z-m>2.0173</z-m>
</offsets>
</model>
<!-- Group Lights for Shared Animations -->
<animation>
<name>StaticGrouped</name>
<object-name>nav-right</object-name>
<object-name>nav-left</object-name>
<object-name>nav-tail</object-name>
</animation>
<animation>
<name>StrobeGrouped</name>
<object-name>strobe-right</object-name>
<object-name>strobe-left</object-name>
<object-name>strobe-tail</object-name>
</animation>
<animation>
<name>BeaconGrouped</name>
<object-name>beacon-top</object-name>
<object-name>beacon-bottom</object-name>
</animation>
<!-- Show Static Lights & Beacons when aircraft is moving -->
<animation>
<type>select</type>
<object-name>StaticGrouped</object-name>
<object-name>BeaconGrouped</object-name>
<nopreview />
<condition>
<greater-than>
<property>transponder-id</property>
<value type="string">0</value>
</greater-than>
</condition>
</animation>
<!-- Show Strobes when Aircraft on runway or airborne -->
<animation>
<type>select</type>
<object-name>StrobeGrouped</object-name>
<nopreview />
<condition>
<greater-than>
<property>velocities/true-airspeed-kt</property>
<value>40</value>
</greater-than>
</condition>
</animation>
</PropertyList>

65584
AI/Aircraft/747/Models/74N.ac Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="76Y-main.xml">
<texture-path>Textures/UPS</texture-path>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="ABY-main.xml">
<texture-path>Textures/Default</texture-path>
</PropertyList>

View file

@ -0,0 +1,31 @@
<?xml version="1.0"?>
<PropertyList>
<description>Airbus A300-600 Freighter (A300F4-600) </description>
<author>Ian(Yves) Tolosa. Dec 2018 </author>
<path>Models/ABY.ac</path>
<!-- Pitch Forward so nosewheel on ground -->
<offsets>
<pitch-deg>-1.1</pitch-deg>
</offsets>
<!-- Gear Showed only < 180 knotspeed -->
<animation>
<type>select</type>
<object-name>Gear</object-name>
<condition>
<less-than>
<property>velocities/true-airspeed-kt</property>
<value>180</value>
</less-than>
</condition>
</animation>
<!-- Tail and Windows Lightmap Effect -->
<effect>
<inherits-from>AI/Aircraft/ABY/Effects/ABY-LightMap</inherits-from>
<object-name>ABY</object-name>
<object-name>Gear</object-name>
</effect>
<!-- Add Navigation Lights Objects -->
<model>
<path>Lights/ABY-NavLights.xml</path>
</model>
</PropertyList>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Lighting of Tail, Flanks and Windows -->
<PropertyList>
<name>ABY-LightMap</name>
<inherits-from>Effects/model-combined-deferred</inherits-from>
<parameters>
<normalmap-enabled type="int">0</normalmap-enabled>
<reflection-enabled type="int">0</reflection-enabled>
<reflection-dynamic type="int">0</reflection-dynamic>
<reflect_map-enabled type="int">0</reflect_map-enabled>
<reflection-correction type="float">0</reflection-correction>
<!-- Enable 3 colors RGB LigntMap -->
<lightmap-enabled type="int"><use>/environment/lightmap-factor</use></lightmap-enabled>
<lightmap-multi type="int">1</lightmap-multi>
<!-- Red Channel (Tail) - Night Activation and Color -->
<lightmap-factor type="float" n="0">1</lightmap-factor>
<lightmap-color type="vec3d" n="0">1.0 1.0 1.0</lightmap-color>
<!-- Green Channel (Windows) Multiplying Factor and Color -->
<lightmap-factor type="float" n="1">1.0</lightmap-factor>
<lightmap-color type="vec3d" n="1">1.0 1.0 1.0</lightmap-color>
<!-- Blue Channel (OFF) Multiplying Factor and Color -->
<lightmap-factor type="float" n="2">0</lightmap-factor>
<lightmap-color type="vec3d" n="2">1.0 1.0 1.0</lightmap-color>
<!-- Alpha Channel (OFF) Multiplying Factor and Color -->
<lightmap-factor type="float" n="3">0.0</lightmap-factor>
<lightmap-color type="vec3d" n="3">1.0 1.0 1.0</lightmap-color>
<!-- LightMap Image Location -->
<texture n="3">
<image>AI/Aircraft/ABY/Effects/ABY-LightMap.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>
<internal-format>normalized</internal-format>
</texture>
</parameters>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

View file

@ -0,0 +1,122 @@
<?xml version="1.0"?>
<!-- Author Ian (Yves Tolosa) - AUG 2018 -->
<PropertyList>
<!-- Position ALS Navigation Lights -->
<model>
<name>nav-right</name>
<path>AI/Lights/procedural_light_nav_right.xml</path>
<offsets>
<x-m>4.53724</x-m>
<y-m>22.3162</y-m>
<z-m>5.83779</z-m>
</offsets>
</model>
<model>
<name>nav-left</name>
<path>AI/Lights/procedural_light_nav_left.xml</path>
<offsets>
<x-m>4.53724</x-m>
<y-m>-22.3162</y-m>
<z-m>5.83779</z-m>
</offsets>
</model>
<model>
<name>nav-tail</name>
<path>AI/Lights/procedural_light_nav_tail.xml</path>
<offsets>
<x-m>28</x-m>
<y-m>0</y-m>
<z-m>7.40789</z-m>
</offsets>
</model>
<!-- Position ALS Strobes -->
<model>
<name>strobe-right</name>
<path>AI/Lights/procedural_light_strobe_right.xml</path>
<offsets>
<x-m>7.3405</x-m>
<y-m>22.3162</y-m>
<z-m>6.11534</z-m>
</offsets>
</model>
<model>
<name>strobe-left</name>
<path>AI/Lights/procedural_light_strobe_left.xml</path>
<offsets>
<x-m>7.3405</x-m>
<y-m>-22.3162</y-m>
<z-m>6.11534</z-m>
</offsets>
</model>
<model>
<name>strobe-tail</name>
<path>AI/Lights/procedural_light_strobe_tail.xml</path>
<offsets>
<x-m>28.5</x-m>
<y-m>0</y-m>
<z-m>7.40789</z-m>
</offsets>
</model>
<!-- Position Beacons -->
<model>
<name>beacon-top</name>
<path>AI/Lights/procedural_light_beacon_top.xml</path>
<offsets>
<x-m>-3.58606</x-m>
<y-m>0</y-m>
<z-m>7.84224</z-m>
</offsets>
</model>
<model>
<name>beacon-bottom</name>
<path>AI/Lights/procedural_light_beacon_bottom.xml</path>
<offsets>
<x-m>8.80994</x-m>
<y-m>0</y-m>
<z-m>2.1917</z-m>
</offsets>
</model>
<!-- Group Lights for Shared Animations -->
<animation>
<name>StaticGrouped</name>
<object-name>nav-right</object-name>
<object-name>nav-left</object-name>
<object-name>nav-tail</object-name>
</animation>
<animation>
<name>StrobeGrouped</name>
<object-name>strobe-right</object-name>
<object-name>strobe-left</object-name>
<object-name>strobe-tail</object-name>
</animation>
<animation>
<name>BeaconGrouped</name>
<object-name>beacon-top</object-name>
<object-name>beacon-bottom</object-name>
</animation>
<!-- Show Static Lights & Beacons when aircraft is moving -->
<animation>
<type>select</type>
<object-name>StaticGrouped</object-name>
<object-name>BeaconGrouped</object-name>
<nopreview />
<condition>
<greater-than>
<property>transponder-id</property>
<value type="string">0</value>
</greater-than>
</condition>
</animation>
<!-- Show Strobes when Aircraft on runway or airborne -->
<animation>
<type>select</type>
<object-name>StrobeGrouped</object-name>
<nopreview />
<condition>
<greater-than>
<property>velocities/true-airspeed-kt</property>
<value>40</value>
</greater-than>
</condition>
</animation>
</PropertyList>

36738
AI/Aircraft/ABY/Models/ABY.ac Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,228 @@
<PropertyList>
<path>F-18-model.ac</path>
<animation>
<type>select</type>
<object-name>FrontDoor</object-name>
<object-name>LeftDoor</object-name>
<object-name>RightDoor</object-name>
<object-name>FrontWheel</object-name>
<object-name>LeftWheel</object-name>
<object-name>RightWheel</object-name>
<condition>
<greater-than>
<property>gear/gear[0]/position-norm</property>
<value>0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FrontDoor_TopLeft</object-name>
<object-name>FrontDoor_TopRight</object-name>
<object-name>LeftDoor_RearLeft</object-name>
<object-name>LeftDoor_RearRight</object-name>
<object-name>RightDoor_RearLeft</object-name>
<object-name>RightDoor_RearRight</object-name>
<condition>
<greater-than>
<property>gear/gear[0]/position-norm</property>
<value>0.8</value>
</greater-than>
</condition>
</animation>
<animation>
<type>rotate</type>
<object-name>FrontWheel</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>90</factor>
<min-deg>-50</min-deg>
<max-deg>0</max-deg>
<offset-deg>-90</offset-deg>
<center>
<x-m>-1.40</x-m>
<y-m>0.0</y-m>
<z-m>-0.6</z-m>
</center>
<axis>
<x>0</x>
<y>-1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>FrontDoor</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>90</factor>
<offset-deg>-90</offset-deg>
<center>
<x-m>-3.88</x-m>
<y-m>0.16</y-m>
<z-m>-0.4</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>LeftWheel</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>90</factor>
<offset-deg>-90</offset-deg>
<min-deg>-60</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>1.21208</x-m>
<y-m>-0.927292</y-m>
<z-m>-0.498899</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>-0.4</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>RightWheel</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>90</factor>
<offset-deg>-90</offset-deg>
<min-deg>-60</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>1.21208</x-m>
<y-m>0.927292</y-m>
<z-m>-0.498899</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0.4</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>LeftDoor</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>90</factor>
<offset-deg>-90</offset-deg>
<center>
<x-m>1.20195</x-m>
<y-m>-0.45533</y-m>
<z-m>-0.54</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>RightDoor</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>90</factor>
<offset-deg>-90</offset-deg>
<center>
<x-m>1.20195</x-m>
<y-m>0.45533</y-m>
<z-m>-0.54</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>AileronLeft</object-name>
<property>surface-positions/left-aileron-pos-norm</property>
<factor>-30</factor>
<axis>
<x1-m>2.67178</x1-m>
<y1-m>-3.74241</y1-m>
<z1-m>0.470943</z1-m>
<x2-m>2.67178</x2-m>
<y2-m>-5.42703</y2-m>
<z2-m>0.470943</z2-m>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>AileronRight</object-name>
<property>surface-positions/left-aileron-pos-norm</property>
<factor>-30</factor>
<axis>
<x1-m>2.67178</x1-m>
<y1-m>3.74241</y1-m>
<z1-m>0.470943</z1-m>
<x2-m>2.67178</x2-m>
<y2-m>5.42703</y2-m>
<z2-m>0.470943</z2-m>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>RudderLeft</object-name>
<property>surface-positions/rudder-pos-norm</property>
<factor>30</factor>
<axis>
<x1-m>4.46901</x1-m>
<y1-m>-1.03207</y1-m>
<z1-m>0.670875</z1-m>
<x2-m>4.84972</x2-m>
<y2-m>-1.39064</y2-m>
<z2-m>1.71914</z2-m>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>RudderRight</object-name>
<property>surface-positions/rudder-pos-norm</property>
<factor>30</factor>
<axis>
<x1-m>4.46901</x1-m>
<y1-m>1.03207</y1-m>
<z1-m>0.670875</z1-m>
<x2-m>4.84972</x2-m>
<y2-m>1.39064</y2-m>
<z2-m>1.71914</z2-m>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>ElevatorLeft</object-name>
<object-name>ElevatorRight</object-name>
<property>surface-positions/elevator-pos-norm</property>
<factor>25</factor>
<center>
<x-m>5.22371</x-m>
<y-m>0</y-m>
<z-m>-0.0314742</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

15
AI/Aircraft/F-4/F-4.xml Normal file
View file

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<PropertyList>
<path>F-4_lowpoly.ac</path>
<animation>
<type>select</type>
<object-name>landing-gear</object-name>
<condition>
<greater-than>
<property>gear/gear[0]/position-norm</property>
<value>0.6</value>
</greater-than>
</condition>
</animation>
</PropertyList>

104341
AI/Aircraft/F-4/F-4_lowpoly.ac Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,96 @@
<?xml version = '1.0' encoding = 'UTF-8' ?>
<PropertyList>
<entry>
<ind>1.000</ind>
<dep>0.000</dep>
</entry>
<entry>
<ind>0.9</ind>
<dep>5.963</dep>
</entry>
<entry>
<ind>0.8</ind>
<dep>11.415</dep>
</entry>
<entry>
<ind>0.7</ind>
<dep>16.510</dep>
</entry>
<entry>
<ind>0.6</ind>
<dep>21.344</dep>
</entry>
<entry>
<ind>0.5</ind>
<dep>25.983</dep>
</entry>
<entry>
<ind>0.4</ind>
<dep>30.477</dep>
</entry>
<entry>
<ind>0.3</ind>
<dep>34.865</dep>
</entry>
<entry>
<ind>0.2</ind>
<dep>39.176</dep>
</entry>
<entry>
<ind>0.1</ind>
<dep>43.440</dep>
</entry>
<entry>
<ind>0.000</ind>
<dep>47.681</dep>
</entry>
</PropertyList>

View file

@ -0,0 +1,173 @@
<?xml version = '1.0' encoding = 'UTF-8' ?>
<PropertyList>
<entry>
<ind>0.000</ind>
<dep>0.000</dep>
</entry>
<entry>
<ind>0.050</ind>
<dep>3.058</dep>
</entry>
<entry>
<ind>0.100</ind>
<dep>5.963</dep>
</entry>
<entry>
<ind>0.150</ind>
<dep>8.742</dep>
</entry>
<entry>
<ind>0.200</ind>
<dep>11.415</dep>
</entry>
<entry>
<ind>0.250</ind>
<dep>14.001</dep>
</entry>
<entry>
<ind>0.300</ind>
<dep>16.510</dep>
</entry>
<entry>
<ind>0.350</ind>
<dep>18.955</dep>
</entry>
<entry>
<ind>0.400</ind>
<dep>21.344</dep>
</entry>
<entry>
<ind>0.450</ind>
<dep>23.685</dep>
</entry>
<entry>
<ind>0.500</ind>
<dep>25.983</dep>
</entry>
<entry>
<ind>0.550</ind>
<dep>28.246</dep>
</entry>
<entry>
<ind>0.600</ind>
<dep>30.477</dep>
</entry>
<entry>
<ind>0.650</ind>
<dep>32.682</dep>
</entry>
<entry>
<ind>0.700</ind>
<dep>34.865</dep>
</entry>
<entry>
<ind>0.750</ind>
<dep>37.028</dep>
</entry>
<entry>
<ind>0.800</ind>
<dep>39.176</dep>
</entry>
<entry>
<ind>0.850</ind>
<dep>41.313</dep>
</entry>
<entry>
<ind>0.900</ind>
<dep>43.440</dep>
</entry>
<entry>
<ind>0.950</ind>
<dep>45.562</dep>
</entry>
<entry>
<ind>1.000</ind>
<dep>47.681</dep>
</entry>
</PropertyList>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Lighting of Tail, Flanks and Windows -->
<PropertyList>
<name>M1F-LightMap</name>
<inherits-from>Effects/model-combined-deferred</inherits-from>
<parameters>
<normalmap-enabled type="int">0</normalmap-enabled>
<reflection-enabled type="int">0</reflection-enabled>
<reflection-dynamic type="int">0</reflection-dynamic>
<reflect_map-enabled type="int">0</reflect_map-enabled>
<reflection-correction type="float">0</reflection-correction>
<!-- Enable 3 colors RGB LigntMap -->
<lightmap-enabled type="int"><use>/environment/lightmap-factor</use></lightmap-enabled>
<lightmap-multi type="int">1</lightmap-multi>
<!-- Red Channel (Tail) - Night Activation and Color -->
<lightmap-factor type="float" n="0">1</lightmap-factor>
<lightmap-color type="vec3d" n="0">1.0 1.0 1.0</lightmap-color>
<!-- Green Channel (Windows) Multiplying Factor and Color -->
<lightmap-factor type="float" n="1">1.3</lightmap-factor>
<lightmap-color type="vec3d" n="1">1.0 1.0 1.0</lightmap-color>
<!-- Blue Channel (OFF) Multiplying Factor and Color -->
<lightmap-factor type="float" n="2">0</lightmap-factor>
<lightmap-color type="vec3d" n="2">1.0 1.0 1.0</lightmap-color>
<!-- Alpha Channel (OFF) Multiplying Factor and Color -->
<lightmap-factor type="float" n="3">0.0</lightmap-factor>
<lightmap-color type="vec3d" n="3">1.0 1.0 1.0</lightmap-color>
<!-- LightMap Image Location -->
<texture n="3">
<image>AI/Aircraft/M11/Effects/M1F-LightMap.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>
<internal-format>normalized</internal-format>
</texture>
</parameters>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,121 @@
<?xml version="1.0"?>
<PropertyList>
<!-- Position ALS Navigation Lights -->
<model>
<name>nav-right</name>
<path>AI/Lights/procedural_light_nav_right.xml</path>
<offsets>
<x-m>8.76227</x-m>
<y-m>25.2622</y-m>
<z-m>5.05602</z-m>
</offsets>
</model>
<model>
<name>nav-left</name>
<path>AI/Lights/procedural_light_nav_left.xml</path>
<offsets>
<x-m>8.76227</x-m>
<y-m>-25.2622</y-m>
<z-m>5.05602</z-m>
</offsets>
</model>
<model>
<name>nav-tail</name>
<path>AI/Lights/procedural_light_nav_tail.xml</path>
<offsets>
<x-m>25.6177</x-m>
<y-m>0</y-m>
<z-m>6.51922</z-m>
</offsets>
</model>
<!-- Position ALS Strobes -->
<model>
<name>strobe-right</name>
<path>AI/Lights/procedural_light_strobe_right.xml</path>
<offsets>
<x-m>12.1482</x-m>
<y-m>25.8989</y-m>
<z-m>7.158</z-m>
</offsets>
</model>
<model>
<name>strobe-left</name>
<path>AI/Lights/procedural_light_strobe_left.xml</path>
<offsets>
<x-m>12.1482</x-m>
<y-m>-25.8989</y-m>
<z-m>7.158</z-m>
</offsets>
</model>
<model>
<name>strobe-tail</name>
<path>AI/Lights/procedural_light_strobe_tail.xml</path>
<offsets>
<x-m>27.5</x-m>
<y-m>0</y-m>
<z-m>6.51922</z-m>
</offsets>
</model>
<!-- Position Beacons -->
<model>
<name>beacon-top</name>
<path>AI/Lights/procedural_light_beacon_top.xml</path>
<offsets>
<x-m>-8.11963</x-m>
<y-m>0</y-m>
<z-m>8.31134</z-m>
</offsets>
</model>
<model>
<name>beacon-bottom</name>
<path>AI/Lights/procedural_light_beacon_bottom.xml</path>
<offsets>
<x-m>10.4795</x-m>
<y-m>0</y-m>
<z-m>2.23712</z-m>
</offsets>
</model>
<!-- Group Lights for Shared Animations -->
<animation>
<name>StaticGrouped</name>
<object-name>nav-right</object-name>
<object-name>nav-left</object-name>
<object-name>nav-tail</object-name>
</animation>
<animation>
<name>StrobeGrouped</name>
<object-name>strobe-right</object-name>
<object-name>strobe-left</object-name>
<object-name>strobe-tail</object-name>
</animation>
<animation>
<name>BeaconGrouped</name>
<object-name>beacon-top</object-name>
<object-name>beacon-bottom</object-name>
</animation>
<!-- Show Static Lights & Beacons when aircraft is moving -->
<animation>
<type>select</type>
<object-name>StaticGrouped</object-name>
<object-name>BeaconGrouped</object-name>
<nopreview />
<condition>
<greater-than>
<property>transponder-id</property>
<value type="string">0</value>
</greater-than>
</condition>
</animation>
<!-- Show Strobes when Aircraft on runway or airborne -->
<animation>
<type>select</type>
<object-name>StrobeGrouped</object-name>
<nopreview />
<condition>
<greater-than>
<property>velocities/true-airspeed-kt</property>
<value>40</value>
</greater-than>
</condition>
</animation>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="M1F-main.xml">
<texture-path>Textures/Default</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="M1F-main.xml">
<texture-path>Textures/FedEx</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="M1F-main.xml">
<texture-path>Textures/LufthansaCargo</texture-path>
</PropertyList>

View file

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<PropertyList include="M1F-main.xml">
<texture-path>Textures/UPS</texture-path>
</PropertyList>

View file

@ -0,0 +1,27 @@
<?xml version="1.0"?>
<PropertyList>
<description>McDonnell Douglas MD-11</description>
<author>Ian (Yves) Tolosa, Nov 2018 - with parts of FDM model by jormapaappa1235, tikibar, and Joshua Davidson</author>
<path>Models/M1F.ac</path>
<!-- Gear Showed only < 170 knotspeed -->
<animation>
<type>select</type>
<object-name>Gear</object-name>
<condition>
<less-than>
<property>velocities/true-airspeed-kt</property>
<value>170</value>
</less-than>
</condition>
</animation>
<!-- Tail and Windows Lightmap Effect -->
<effect>
<inherits-from>AI/Aircraft/M11/Effects/M1F-LightMap</inherits-from>
<object-name>M1F</object-name>
<object-name>Gear</object-name>
</effect>
<!-- Add Navigation Lights Objects -->
<model>
<path>Lights/M11-NavLights.xml</path>
</model>
</PropertyList>

74469
AI/Aircraft/M11/Models/M1F.ac Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,594 @@
<!-- A wrapper file for the T-38 3D model -->
<PropertyList>
<path>T38.ac</path>
<!-- no shadows -->
<animation>
<type>noshadow</type>
<object-name>markings</object-name>
<object-name>left_flame</object-name>
<object-name>left_internal_flame</object-name>
<object-name>right_flame</object-name>
<object-name>right_internal_flame</object-name>
<object-name>red_light</object-name>
<object-name>green_light</object-name>
<object-name>lhcondensation cone</object-name>
<object-name>rhcondensation cone</object-name>
</animation>
<animation>
<type>select</type>
<!--<object-name>left_flame</object-name>-->
<object-name>left_internal_flame</object-name>
<condition>
<property>engines/engine[0]/augmentation</property>
</condition>
</animation>
<animation>
<type>select</type>
<!--<object-name>right_flame</object-name>-->
<object-name>right_internal_flame</object-name>
<condition>
<property>engines/engine[1]/augmentation</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>nose_wheel</object-name>
<object-name>front_lower_strut</object-name>
<object-name>front_upper_strut</object-name>
<object-name>front_fwd_strut</object-name>
<condition>
<greater-than>
<property>gear/gear[0]/position-norm</property>
<value>0</value>
</greater-than>
</condition>
</animation>
<!-- oleo hack -->
<animation>
<condition>
<equals>
<property>gear/gear[0]/position-norm</property>
<value>1</value>
</equals>
</condition>
<type>translate</type>
<object-name>nose_wheel</object-name>
<object-name>front_lower_strut</object-name>
<property>gear/gear[0]/compression-norm</property>
<factor>0.3048</factor> <!-- feet to meters -->
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>nose_wheel</object-name>
<object-name>front_lower_strut</object-name>
<property>surface-positions/rudder-pos-norm</property>
<factor>-25</factor>
<center>
<x-m>-6.26</x-m>
<y-m>0.0</y-m>
<z-m>0.03</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>nose_wheel</object-name>
<object-name>front_lower_strut</object-name>
<object-name>front_upper_strut</object-name>
<object-name>front_fwd_strut</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>-130</factor>
<offset-deg>130</offset-deg>
<min-deg>0</min-deg>
<max-deg>90</max-deg>
<center>
<x-m>-6.26</x-m>
<y-m>0</y-m>
<z-m>0.03</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>front_fwd_strut</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>150</factor>
<offset-deg>-150</offset-deg>
<center>
<x-m>-6.28</x-m>
<y-m>0</y-m>
<z-m>-0.38</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>front_door_aft</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>-88</factor>
<offset-deg>88</offset-deg>
<center>
<x-m>-6.19</x-m>
<y-m>0.0</y-m>
<z-m>-0.19</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>front_door_fwd</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>200</factor>
<offset-deg>-90</offset-deg>
<min-deg>-90</min-deg>
<max-deg>2</max-deg>
<center>
<x-m>-6.945</x-m>
<y-m>0.11</y-m>
<z-m>-0.16</z-m>
</center>
<axis>
<x>0.999115</x>
<y>0</y>
<z>-0.042068</z>
</axis>
</animation>
<animation>
<type>select</type>
<object-name>leftgear</object-name>
<object-name>left_lower_strut</object-name>
<object-name>left_upper_strut</object-name>
<object-name>left_inner_strut</object-name>
<condition>
<greater-than>
<property>gear/gear[1]/position-norm</property>
<value>0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>rotate</type>
<object-name>leftgear</object-name>
<object-name>left_lower_strut</object-name>
<object-name>left_upper_strut</object-name>
<object-name>left_inner_strut</object-name>
<property>gear/gear[1]/position-norm</property>
<factor>130</factor>
<offset-deg>-100</offset-deg>
<min-deg>-90</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>0.385</x-m>
<y-m>-1.6</y-m>
<z-m>-0.08</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>left_inner_strut</object-name>
<property>gear/gear[1]/position-norm</property>
<factor>195</factor>
<offset-deg>-130</offset-deg>
<min-deg>-140</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>0.445</x-m>
<y-m>-1.54</y-m>
<z-m>-0.26</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<!-- oleo hack -->
<animation>
<condition>
<equals>
<property>gear/gear[1]/position-norm</property>
<value>1</value>
</equals>
</condition>
<type>translate</type>
<object-name>leftgear</object-name>
<object-name>left_lower_strut</object-name>
<object-name>left_inner_strut</object-name>
<property>gear/gear[1]/compression-norm</property>
<factor>0.3048</factor> <!-- feet to meters -->
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftgeardoor</object-name>
<property>gear/gear[1]/position-norm</property>
<factor>-450</factor>
<offset-deg>90</offset-deg>
<min-deg>0</min-deg>
<max-deg>90</max-deg>
<center>
<x-m>0.390</x-m>
<y-m>-0.15</y-m>
<z-m>-0.17</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftgeardoor2</object-name>
<object-name>leftgeardoor2_inside</object-name>
<property>gear/gear[1]/position-norm</property>
<factor>130</factor>
<offset-deg>-95</offset-deg>
<min-deg>-90</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>0.385</x-m>
<y-m>-1.7</y-m>
<z-m>-0.03</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>select</type>
<object-name>rightgear</object-name>
<object-name>right_lower_strut</object-name>
<object-name>right_upper_strut</object-name>
<object-name>right_inner_strut</object-name>
<condition>
<greater-than>
<property>gear/gear[2]/position-norm</property>
<value>0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>rotate</type>
<object-name>rightgear</object-name>
<object-name>right_lower_strut</object-name>
<object-name>right_upper_strut</object-name>
<object-name>right_inner_strut</object-name>
<property>gear/gear[2]/position-norm</property>
<factor>-130</factor>
<offset-deg>100</offset-deg>
<min-deg>0</min-deg>
<max-deg>90</max-deg>
<center>
<x-m>0.385</x-m>
<y-m>1.6</y-m>
<z-m>-0.01</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>right_inner_strut</object-name>
<property>gear/gear[2]/position-norm</property>
<factor>-195</factor>
<offset-deg>135</offset-deg>
<min-deg>0</min-deg>
<max-deg>140</max-deg>
<center>
<x-m>0.445</x-m>
<y-m>1.54</y-m>
<z-m>-0.26</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<!-- oleo hack -->
<animation>
<condition>
<equals>
<property>gear/gear[2]/position-norm</property>
<value>1</value>
</equals>
</condition>
<type>translate</type>
<object-name>rightgear</object-name>
<object-name>right_lower_strut</object-name>
<object-name>right_inner_strut</object-name>
<property>gear/gear[2]/compression-norm</property>
<factor>0.3048</factor> <!-- feet to meters -->
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightgeardoor</object-name>
<property>gear/gear[2]/position-norm</property>
<factor>450</factor>
<offset-deg>-100</offset-deg>
<min-deg>-90</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>0.390</x-m>
<y-m>0.15</y-m>
<z-m>-0.17</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightgeardoor2</object-name>
<property>gear/gear[2]/position-norm</property>
<factor>-130</factor>
<offset-deg>95</offset-deg>
<min-deg>0</min-deg>
<max-deg>90</max-deg>
<center>
<x-m>0.385</x-m>
<y-m>1.7</y-m>
<z-m>-0.03</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftelevator</object-name>
<property>surface-positions/elevator-pos-norm</property>
<factor>15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>3.11</x-m>
<y-m>-1.515</y-m>
<z-m>-0.07</z-m>
</center>
<axis>
<x>-0.176858</x>
<y>0.979034</y>
<z>0.101062</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightelevator</object-name>
<property>surface-positions/elevator-pos-norm</property>
<factor>-15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>3.31</x-m>
<y-m>1.515</y-m>
<z-m>-0.07</z-m>
</center>
<axis>
<x>-0.176858</x>
<y>-0.979034</y>
<z>0.101062</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftaileron</object-name>
<property>surface-positions/left-aileron-pos-norm</property>
<factor>15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0.75</x-m>
<y-m>-2.555</y-m>
<z-m>0.02</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightaileron</object-name>
<property>surface-positions/right-aileron-pos-norm</property>
<factor>15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0.75</x-m>
<y-m>2.555</y-m>
<z-m>0.02</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rudder</object-name>
<property>surface-positions/rudder-pos-norm</property>
<factor>15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>3.65</x-m>
<y-m>0</y-m>
<z-m>1.285</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftflap</object-name>
<property>surface-positions/flap-pos-norm</property>
<factor>40</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0.75</x-m>
<y-m>-1.44</y-m>
<z-m>0.02</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightflap</object-name>
<property>surface-positions/flap-pos-norm</property>
<factor>40</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0.75</x-m>
<y-m>1.44</y-m>
<z-m>0.02</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>select</type>
<object-name>lhcondensation cone</object-name>
<condition>
<greater-than>
<property>orientation/alpha-deg</property>
<value>9.0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>rhcondensation cone</object-name>
<condition>
<greater-than>
<property>orientation/alpha-deg</property>
<value>9.0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>rotate</type>
<object-name>rhspeedbrake</object-name>
<object-name>rhspeedbrake_ext</object-name>
<property>surface-positions/speedbrake-pos-norm</property>
<factor>70</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>-0.66</x-m>
<y-m>-0.535</y-m>
<z-m>-0.14</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>lhspeedbrake</object-name>
<object-name>lhspeedbrake_ext</object-name>
<property>surface-positions/speedbrake-pos-norm</property>
<factor>70</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>-0.66</x-m>
<y-m>0.535</y-m>
<z-m>-0.14</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
</PropertyList>

View file

@ -0,0 +1,594 @@
<!-- A wrapper file for the T-38 3D model -->
<PropertyList>
<path>T38.ac</path>
<!-- no shadows -->
<animation>
<type>noshadow</type>
<object-name>markings</object-name>
<object-name>left_flame</object-name>
<object-name>left_internal_flame</object-name>
<object-name>right_flame</object-name>
<object-name>right_internal_flame</object-name>
<object-name>red_light</object-name>
<object-name>green_light</object-name>
<object-name>lhcondensation cone</object-name>
<object-name>rhcondensation cone</object-name>
</animation>
<animation>
<type>select</type>
<!--<object-name>left_flame</object-name>-->
<object-name>left_internal_flame</object-name>
<condition>
<property>engines/engine[0]/augmentation</property>
</condition>
</animation>
<animation>
<type>select</type>
<!--<object-name>right_flame</object-name>-->
<object-name>right_internal_flame</object-name>
<condition>
<property>engines/engine[1]/augmentation</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>nose_wheel</object-name>
<object-name>front_lower_strut</object-name>
<object-name>front_upper_strut</object-name>
<object-name>front_fwd_strut</object-name>
<condition>
<greater-than>
<property>gear/gear[0]/position-norm</property>
<value>0</value>
</greater-than>
</condition>
</animation>
<!-- oleo hack -->
<animation>
<condition>
<equals>
<property>gear/gear[0]/position-norm</property>
<value>1</value>
</equals>
</condition>
<type>translate</type>
<object-name>nose_wheel</object-name>
<object-name>front_lower_strut</object-name>
<property>gear/gear[0]/compression-norm</property>
<factor>0.3048</factor> <!-- feet to meters -->
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>nose_wheel</object-name>
<object-name>front_lower_strut</object-name>
<property>surface-positions/rudder-pos-norm</property>
<factor>-25</factor>
<center>
<x-m>-6.26</x-m>
<y-m>0.0</y-m>
<z-m>0.03</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>nose_wheel</object-name>
<object-name>front_lower_strut</object-name>
<object-name>front_upper_strut</object-name>
<object-name>front_fwd_strut</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>-130</factor>
<offset-deg>130</offset-deg>
<min-deg>0</min-deg>
<max-deg>90</max-deg>
<center>
<x-m>-6.26</x-m>
<y-m>0</y-m>
<z-m>0.03</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>front_fwd_strut</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>150</factor>
<offset-deg>-150</offset-deg>
<center>
<x-m>-6.28</x-m>
<y-m>0</y-m>
<z-m>-0.38</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>front_door_aft</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>-88</factor>
<offset-deg>88</offset-deg>
<center>
<x-m>-6.19</x-m>
<y-m>0.0</y-m>
<z-m>-0.19</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>front_door_fwd</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>200</factor>
<offset-deg>-90</offset-deg>
<min-deg>-90</min-deg>
<max-deg>2</max-deg>
<center>
<x-m>-6.945</x-m>
<y-m>0.11</y-m>
<z-m>-0.16</z-m>
</center>
<axis>
<x>0.999115</x>
<y>0</y>
<z>-0.042068</z>
</axis>
</animation>
<animation>
<type>select</type>
<object-name>leftgear</object-name>
<object-name>left_lower_strut</object-name>
<object-name>left_upper_strut</object-name>
<object-name>left_inner_strut</object-name>
<condition>
<greater-than>
<property>gear/gear[1]/position-norm</property>
<value>0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>rotate</type>
<object-name>leftgear</object-name>
<object-name>left_lower_strut</object-name>
<object-name>left_upper_strut</object-name>
<object-name>left_inner_strut</object-name>
<property>gear/gear[1]/position-norm</property>
<factor>130</factor>
<offset-deg>-100</offset-deg>
<min-deg>-90</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>0.385</x-m>
<y-m>-1.6</y-m>
<z-m>-0.08</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>left_inner_strut</object-name>
<property>gear/gear[1]/position-norm</property>
<factor>195</factor>
<offset-deg>-130</offset-deg>
<min-deg>-140</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>0.445</x-m>
<y-m>-1.54</y-m>
<z-m>-0.26</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<!-- oleo hack -->
<animation>
<condition>
<equals>
<property>gear/gear[1]/position-norm</property>
<value>1</value>
</equals>
</condition>
<type>translate</type>
<object-name>leftgear</object-name>
<object-name>left_lower_strut</object-name>
<object-name>left_inner_strut</object-name>
<property>gear/gear[1]/compression-norm</property>
<factor>0.3048</factor> <!-- feet to meters -->
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftgeardoor</object-name>
<property>gear/gear[1]/position-norm</property>
<factor>-450</factor>
<offset-deg>90</offset-deg>
<min-deg>0</min-deg>
<max-deg>90</max-deg>
<center>
<x-m>0.390</x-m>
<y-m>-0.15</y-m>
<z-m>-0.17</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftgeardoor2</object-name>
<object-name>leftgeardoor2_inside</object-name>
<property>gear/gear[1]/position-norm</property>
<factor>130</factor>
<offset-deg>-95</offset-deg>
<min-deg>-90</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>0.385</x-m>
<y-m>-1.7</y-m>
<z-m>-0.03</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>select</type>
<object-name>rightgear</object-name>
<object-name>right_lower_strut</object-name>
<object-name>right_upper_strut</object-name>
<object-name>right_inner_strut</object-name>
<condition>
<greater-than>
<property>gear/gear[2]/position-norm</property>
<value>0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>rotate</type>
<object-name>rightgear</object-name>
<object-name>right_lower_strut</object-name>
<object-name>right_upper_strut</object-name>
<object-name>right_inner_strut</object-name>
<property>gear/gear[2]/position-norm</property>
<factor>-130</factor>
<offset-deg>100</offset-deg>
<min-deg>0</min-deg>
<max-deg>90</max-deg>
<center>
<x-m>0.385</x-m>
<y-m>1.6</y-m>
<z-m>-0.01</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>right_inner_strut</object-name>
<property>gear/gear[2]/position-norm</property>
<factor>-195</factor>
<offset-deg>135</offset-deg>
<min-deg>0</min-deg>
<max-deg>140</max-deg>
<center>
<x-m>0.445</x-m>
<y-m>1.54</y-m>
<z-m>-0.26</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<!-- oleo hack -->
<animation>
<condition>
<equals>
<property>gear/gear[2]/position-norm</property>
<value>1</value>
</equals>
</condition>
<type>translate</type>
<object-name>rightgear</object-name>
<object-name>right_lower_strut</object-name>
<object-name>right_inner_strut</object-name>
<property>gear/gear[2]/compression-norm</property>
<factor>0.3048</factor> <!-- feet to meters -->
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightgeardoor</object-name>
<property>gear/gear[2]/position-norm</property>
<factor>450</factor>
<offset-deg>-100</offset-deg>
<min-deg>-90</min-deg>
<max-deg>0</max-deg>
<center>
<x-m>0.390</x-m>
<y-m>0.15</y-m>
<z-m>-0.17</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightgeardoor2</object-name>
<property>gear/gear[2]/position-norm</property>
<factor>-130</factor>
<offset-deg>95</offset-deg>
<min-deg>0</min-deg>
<max-deg>90</max-deg>
<center>
<x-m>0.385</x-m>
<y-m>1.7</y-m>
<z-m>-0.03</z-m>
</center>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftelevator</object-name>
<property>surface-positions/elevator-pos-norm</property>
<factor>15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>3.11</x-m>
<y-m>-1.515</y-m>
<z-m>-0.07</z-m>
</center>
<axis>
<x>-0.176858</x>
<y>0.979034</y>
<z>0.101062</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightelevator</object-name>
<property>surface-positions/elevator-pos-norm</property>
<factor>-15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>3.31</x-m>
<y-m>1.515</y-m>
<z-m>-0.07</z-m>
</center>
<axis>
<x>-0.176858</x>
<y>-0.979034</y>
<z>0.101062</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftaileron</object-name>
<property>surface-positions/left-aileron-pos-norm</property>
<factor>15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0.75</x-m>
<y-m>-2.555</y-m>
<z-m>0.02</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightaileron</object-name>
<property>surface-positions/right-aileron-pos-norm</property>
<factor>15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0.75</x-m>
<y-m>2.555</y-m>
<z-m>0.02</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rudder</object-name>
<property>surface-positions/rudder-pos-norm</property>
<factor>15</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>3.65</x-m>
<y-m>0</y-m>
<z-m>1.285</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>leftflap</object-name>
<property>surface-positions/flap-pos-norm</property>
<factor>40</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0.75</x-m>
<y-m>-1.44</y-m>
<z-m>0.02</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>rightflap</object-name>
<property>surface-positions/flap-pos-norm</property>
<factor>40</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0.75</x-m>
<y-m>1.44</y-m>
<z-m>0.02</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>select</type>
<object-name>lhcondensation cone</object-name>
<condition>
<greater-than>
<property>orientation/alpha-deg</property>
<value>9.0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>rhcondensation cone</object-name>
<condition>
<greater-than>
<property>orientation/alpha-deg</property>
<value>9.0</value>
</greater-than>
</condition>
</animation>
<animation>
<type>rotate</type>
<object-name>rhspeedbrake</object-name>
<object-name>rhspeedbrake_ext</object-name>
<property>surface-positions/speedbrake-pos-norm</property>
<factor>70</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>-0.66</x-m>
<y-m>-0.535</y-m>
<z-m>-0.14</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>lhspeedbrake</object-name>
<object-name>lhspeedbrake_ext</object-name>
<property>surface-positions/speedbrake-pos-norm</property>
<factor>70</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>-0.66</x-m>
<y-m>0.535</y-m>
<z-m>-0.14</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
</PropertyList>

12648
AI/Aircraft/T-38/Models/T38.ac Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 KiB

After

Width:  |  Height:  |  Size: 119 KiB

View file

@ -4,7 +4,7 @@
<path>f-16_lowpoly.ac</path>
<animation>
<type>select</type>
<object-name>gear</object-name>
<object-name>landing-gear</object-name>
<condition>
<greater-than>
<property>gear/gear[0]/position-norm</property>

File diff suppressed because it is too large Load diff

View file

@ -95,8 +95,9 @@
<model n="219" type="string">AI/Aircraft/MD80/MD80-Iberia.xml</model>
<model n="220" type="string">AI/Aircraft/MD90/MD90-JAL.xml</model>
<model n="221" type="string">AI/Aircraft/tu154b/Model/tu154b-model.xml</model>
<model n="222" type="string">AI/Aircraft/727/Models/727-200.xml</model>
<!-- 251-300 Twin engined wide body jet airliners -->
<!-- 251-300 Twin engined wide body jet airliners -->
<model n="251" type="string">AI/Aircraft/767/767-JAL.xml</model>
<model n="252" type="string">AI/Aircraft/777/777-AirFrance.xml</model>
<model n="253" type="string">AI/Aircraft/787/788-Qatar.xml</model>
@ -140,6 +141,12 @@
<model n="514" type="string">AI/Aircraft/f-14b/Models/f-14b.xml</model>
<model n="515" type="string">AI/Aircraft/F-15/Models/F-15.xml</model>
<model n="516" type="string">AI/Aircraft/f16/Models/f-16.xml</model>
<model n="518" type="string">AI/Aircraft/F-18/Models/F-18.xml</model>
<model n="519" type="string">AI/Aircraft/F-4/F-4.xml</model>
<model n="520" type="string">AI/Aircraft/T-38/Models/T38-model.xml</model> <!-- T-38 is 520-->
<model n="521" type="string">AI/Aircraft/MiG-21bis/Models/MiG-21bis.xml</model>
<model n="522" type="string">AI/Aircraft/JA37/Models/JA-37.xml</model>
<model n="525" type="string">AI/Aircraft/T-38/Models/F-5.xml</model>
<!-- 551-600 Military large aircraft (tankers, transports) -->
<model n="551" type="string">AI/Aircraft/E-2C/Models/E-2C-model.xml</model>

View file

@ -184,6 +184,7 @@
</aircraft>
<alias>
<match>74</match>
<match>74N</match>
<match>Boeing_74</match>
<alias>747</alias>
</alias>
@ -339,6 +340,7 @@
</aircraft>
<alias>
<match>MD11</match>
<match>MF1</match>
<alias>M11</alias>
</alias>
<!-- McDonnell Douglas 80 all versions -->

View file

@ -1,5 +1,5 @@
<?xml version="1.0"?>
<!-- Author Ian (Yves) Tolosa - Timetable Week of 14 MAY 2018 - 747-8F mapped to 747-400ERF -->
<!-- Author Ian (Yves) Tolosa - Timetable Week of 14 MAY 2018 -->
<trafficlist>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
@ -100,7 +100,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -114,7 +114,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -128,7 +128,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -142,7 +142,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -156,7 +156,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -170,7 +170,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -184,7 +184,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -198,7 +198,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -212,7 +212,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -226,7 +226,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>
@ -240,7 +240,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-AirBridgeCargo.xml</model>
<model>Aircraft/747/74N-AirBridgeCargo.xml</model>
<livery>ABW</livery>
<airline>ABW</airline>
<home-port>UUEE</home-port>

View file

@ -1,5 +1,5 @@
<?xml version="1.0"?>
<!-- Author Ian (Yves) Tolosa - Weekly Timetable of 16 MAY 2018 - 747-8F mapped to 747-400F -->
<!-- Author Ian (Yves) Tolosa - Weekly Timetable of 16 MAY 2018 -->
<trafficlist>
<aircraft>
<model>Aircraft/747/74Y-CargoLogicAir.xml</model>
@ -30,7 +30,7 @@
<heavy>Yes</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-CargoLogicAir.xml</model>
<model>Aircraft/747/74N-CargoLogicAir.xml</model>
<livery>CLU</livery>
<airline>CLU</airline>
<home-port>UUEE</home-port>

View file

@ -1,8 +1,8 @@
<?xml version="1.0"?>
<!-- Author Ian (Yves) Tolosa - timetable of AUG18 - Incl. CargoluxAlitalia - 74N mapped to 74Y -->
<!-- Author Ian (Yves) Tolosa - timetable of AUG18 - Incl. CargoluxAlitalia -->
<trafficlist>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -16,7 +16,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -30,7 +30,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -44,7 +44,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -58,7 +58,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -72,7 +72,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -86,7 +86,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -100,7 +100,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -114,7 +114,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -128,7 +128,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -142,7 +142,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -156,7 +156,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -170,7 +170,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>
@ -184,7 +184,7 @@
<heavy>true</heavy>
</aircraft>
<aircraft>
<model>Aircraft/747/74Y-Cargolux.xml</model>
<model>Aircraft/747/74N-Cargolux.xml</model>
<livery>CLX</livery>
<airline>CLX</airline>
<home-port>ELLX</home-port>

View file

@ -1,9 +1,5 @@
<?xml version="1.0"?>
<!-- Author Marcin Kuzniar - Fleet & Timetable of NOV and DEC 2017 -->
<trafficlist>
<aircraft>
<model>Aircraft/738/738-Norwegian.xml</model>
@ -541,7 +537,7 @@
<model>Aircraft/738/738-Norwegian.xml</model>
<livery>NAX</livery>
<airline>NAX</airline>
<home-port>ENGM</home-port>
<home-port>TFFR</home-port>
<required-aircraft>NAX-738</required-aircraft>
<actype>738</actype>
<offset>0</offset>
@ -555,7 +551,7 @@
<model>Aircraft/738/738-Norwegian.xml</model>
<livery>NAX</livery>
<airline>NAX</airline>
<home-port>ENGM</home-port>
<home-port>TFFR</home-port>
<required-aircraft>NAX-738</required-aircraft>
<actype>738</actype>
<offset>0</offset>
@ -47298,7 +47294,7 @@
<required-aircraft>NAX-738</required-aircraft>
<fltrules>IFR</fltrules>
<departure>
<port>KFJK</port>
<port>KJFK</port>
<time>18:10:00</time>
</departure>
<cruise-alt>370</cruise-alt>
@ -56039,5 +56035,3 @@
<repeat>24Hr</repeat>
</flight>
</trafficlist>

View file

@ -3,7 +3,7 @@
Hydrodynamics section for JSBSim.
Copyright (C) 2008 - 2017 Anders Gidenstam (anders(at)gidenstam.org)
Copyright (C) 2008 - 2018 Anders Gidenstam (anders(at)gidenstam.org)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -38,7 +38,7 @@
- Fbz - local up (the same as -Z in the local frame).
- Drag - opposing the relative water flow.
- Side - 90 degrees right from the relative water flow in the surface plane.
The moments are split into the hydrodynamic body frame channels
The moments are split into the body frame channels
(with the same sense as the normal body frame moments):
- Pitch
- Yaw
@ -78,12 +78,13 @@
Unused properties also have to be declared (and set to zero).
- Functions computing the moments in the hydrodynamic body frame.
FIXME: Yaw is applied in the standard body frame.
FIXME(?): All moments are applied in the standard body frame.
- hydro/yaw-moment-lbsft
- hydro/pitch-moment-lbsft
- hydro/roll-moment-lbsft
Define the following external forces in the main FDM file of your aircraft:
Define the following external forces and moments in the main FDM file of
your aircraft:
<force name="hydro-X" frame="LOCAL">
<location unit="M">
@ -116,6 +117,31 @@
</direction>
</force>
<moment name="hydro-pitch" frame="BODY" unit="LBSFT">
<direction>
<x> 0.0 </x>
<y> 1.0 </y>
<z> 0.0 </z>
</direction>
</moment>
<moment name="hydro-roll" frame="BODY" unit="LBSFT">
<direction>
<x> 1.0 </x>
<y> 0.0 </y>
<z> 0.0 </z>
</direction>
</moment>
<moment name="hydro-yaw" frame="BODY" unit="LBSFT">
<direction>
<x> 0.0 </x>
<y> 0.0 </y>
<z> 1.0 </z>
</direction>
</moment>
The old deprecated force based external moment implementation below is still
supported. Beware of reference frame differences for the moments.
<force name="hydro-pitch[0]" frame="LOCAL">
<location unit="M">
<x> HRP X - 0.3048 </x>
@ -919,6 +945,11 @@
<channel name="Implementation Pitch Moment">
<pure_gain name="hydro/pitch-moment/moment-lbsft">
<input>hydro/pitch-moment-lbsft</input>
<gain>1.0</gain>
<output>external_reactions/hydro-pitch/magnitude-lbsft</output>
</pure_gain>
<pure_gain name="hydro/pitch-moment/force-lbs[0]">
<input> hydro/pitch-moment-lbsft </input>
<gain> 0.5</gain>
@ -934,6 +965,11 @@
<channel name="Implementation Roll Moment">
<pure_gain name="hydro/roll-moment/moment-lbsft">
<input>hydro/roll-moment-lbsft</input>
<gain>1.0</gain>
<output>external_reactions/hydro-roll/magnitude-lbsft</output>
</pure_gain>
<pure_gain name="hydro/roll-moment/force-lbs[0]">
<input> hydro/roll-moment-lbsft </input>
<gain> 0.5</gain>
@ -949,6 +985,11 @@
<channel name="Implementation Yaw Moment">
<pure_gain name="hydro/yaw-moment/moment-lbsft">
<input>hydro/yaw-moment-lbsft</input>
<gain>1.0</gain>
<output>external_reactions/hydro-yaw/magnitude-lbsft</output>
</pure_gain>
<pure_gain name="hydro/yaw-moment/force-lbs[0]">
<input> hydro/yaw-moment-lbsft </input>
<gain> 0.5</gain>

View file

@ -59,9 +59,9 @@ var update_loop = func {
contactN.setBoolValue(refueling);
if (fuel_freeze)
return settimer(update_loop, UPDATE_PERIOD);
if (fuel_freeze){
return;
}
# sum up consumed fuel
var consumed = 0;
@ -174,7 +174,6 @@ var update_loop = func {
foreach (var e; engines)
e.getNode("out-of-fuel", 1).setBoolValue(out_of_fuel);
aarTimer.restart(UPDATE_PERIOD);
}
var aarTimer = maketimer(UPDATE_PERIOD, update_loop);

View file

@ -156,7 +156,7 @@ displayGUI : func(index, scale=1.0) {
}
var mfd_canvas = me.displays[index].getCanvas();
mfd_canvas.getCanvas().set("visible", visible);
mfd_canvas.set("visible", 1);
var gui = fg1000.GUI.new(me.displays[index], mfd_canvas, index, scale);
},

View file

@ -103,7 +103,8 @@ var GUI =
device_id : device_id,
};
obj.window = canvas.Window.new([obj.scale*obj.width,obj.scale*obj.height],"dialog").set('title',"FG1000 MFD" ~ device_id);
obj.window = canvas.Window.new([obj.scale*obj.width,obj.scale*obj.height],"dialog");
obj.window.set('title',"FG1000 Device " ~ device_id ~ " (" ~ int(scale * 100) ~ "%)");
obj.window.del = func() {
# Over-ride the window.del function so we clean up when the user closes the window

View file

@ -0,0 +1,636 @@
var nasal_dir = getprop("/sim/fg-root") ~ "/Aircraft/Instruments-3d/ISFD/";
io.load_nasal(nasal_dir ~ 'ISFD_gui.nas', "isfd");
io.load_nasal(nasal_dir ~ 'ISFDGenericController.nas', "isfd");
# main wrapper object
var ISFD = {
baseSize: 512,
halfSize: 256,
hsiHeight: 358,
hsiWidth: 306,
speedTapeWidth: 92,
altTapeWidth: 114,
pitchLadderDegreeSpacing: 8,
rollBaseRadius: 160,
roseRadius: 512,
boxHeight: 48,
new : func() {
var obj = {
parents : [ISFD],
_mode : ''
};
ISFD.hsiLeft = ISFD.speedTapeWidth - ISFD.halfSize;
ISFD.hsiXCenter = ISFD.hsiLeft + ISFD.hsiWidth/2;
ISFD.hsiRight = ISFD.halfSize - ISFD.altTapeWidth;
ISFD.hsiBottom = ISFD.hsiHeight/2;
ISFD.modeBoxHeight = (ISFD.baseSize - ISFD.hsiHeight)/2;
obj.canvas = canvas.new({
"name" : "ISFD Canvas",
"size" : [ISFD.baseSize, ISFD.baseSize],
"view" : [ISFD.baseSize, ISFD.baseSize],
"mipmapping": 0,
});
obj.root = obj.canvas.createGroup();
# centering transform
obj.root.setTranslation(ISFD.halfSize, ISFD.halfSize);
obj._controller = isfd.GenericController.new();
obj.createContents();
obj._updateTimer = maketimer(0.05, func obj.update(); );
obj._updateTimer.start();
return obj;
},
del: func()
{
print('Deleting ISFD');
me._updateTimer.stop();
},
# display the ISFD canvas on the specified object
display : func(target_object) {
me.canvas.addPlacement({"node": target_object});
},
displayGUI : func(my_isfd, scale=1.0) {
var gui = isfd.GUI.new(my_isfd, my_isfd.canvas, scale);
},
createContents : func()
{
me.createPitchLadder();
me.createRollTicks();
me.createCompassRose();
me.createAltitudeTape();
me.createSpeedTape();
me.createSpeedBox();
me.createAltitudeBox();
me.createAltimeterSetting();
# mach readout - not on the B737 model?
me.createModeText();
# if ILS is tuned!
# glideslope marker
# localizer marker
me.createAirplaneMarker();
},
createAirplaneMarker : func()
{
var markerGroup = me.root.createChild("group", "airplane-indicator-group");
markerGroup.setTranslation(ISFD.hsiXCenter, 0);
var m = markerGroup.createChild("path", "airplane-indicator");
m.setColorFill(0, 0, 0);
m.setStrokeLineWidth(2);
m.setColor(1, 1, 1);
var markerWidth = 8;
var hw = markerWidth / 2;
var horWidth = 80;
var vertExtension = markerWidth * 1.5;
m.moveTo(-hw, -hw);
m.line(markerWidth, 0);
m.line(0, markerWidth);
m.line(-markerWidth, 0);
m.close();
# left L
m.moveTo(-hw - markerWidth, -hw);
m.line(-horWidth, 0);
m.line(0, markerWidth);
m.line(horWidth - markerWidth, 0);
m.line(0, vertExtension);
m.line(markerWidth, 0);
m.close();
# right L
m.moveTo(hw + markerWidth, -hw);
m.line(horWidth, 0);
m.line(0, markerWidth);
m.line(markerWidth - horWidth, 0);
m.line(0, vertExtension);
m.line(-markerWidth, 0);
m.close();
},
# add a single radially aligned tick mark between radiui one and two
addPolarTick : func(path, angle, r1, r2)
{
var horAngle = angle + 90; # angle from +ve X axis
var sa = math.sin(horAngle * D2R);
var ca = math.cos(horAngle * D2R);
path.moveTo(ca * r1, sa * r1);
path.lineTo(ca * r2, sa * r2);
return path;
},
addHorizontalSymmetricPolarTick : func(path, angle, r1, r2)
{
var horAngle = angle + 90; # angle from +ve X axis
var sa = -math.sin(horAngle * D2R);
var ca = math.cos(horAngle * D2R);
path.moveTo(ca * r1, sa * r1);
path.lineTo(ca * r2, sa * r2);
path.moveTo(-ca * r1, sa * r1);
path.lineTo(-ca * r2, sa * r2);
return path;
},
addHorizontalSymmetricLine : func(path, positiveLength, y)
{
path.moveTo(-positiveLength, y);
path.lineTo(positiveLength, y);
return path;
},
createDigitTape : func(parent, name, suffix = nil)
{
var t = parent.createChild('text', name);
# 'top' zero (above 9)
var s = '0' ~ chr(10);
if (suffix != nil) {
s = '0' ~ suffix ~ chr(10);
}
for (var i=9; i>=0; i-=1) {
if (suffix != nil) {
s = s ~ i ~ suffix ~ chr(10);
} else {
s = s ~ i ~ chr(10);
}
}
t.setText(s);
t.setFont("LiberationFonts/LiberationMono-Regular.ttf");
t.setFontSize(44);
# t.set('line-height', 0.9);
t.setAlignment("left-bottom");
return t;
},
createRollTicks : func()
{
# these don't move!
# center filled white arrow pointing down
# large tick at 30 deg
# minor tick at 10, 20 deg
# minor tick at 45?
# and major tick at 60 by the looks of it
me._rollGroup = me.root.createChild("group", "roll-group");
me._rollGroup.setTranslation(ISFD.hsiXCenter, 0);
me._rollGroup.set("clip-frame", canvas.Element.GLOBAL);
me._rollGroup.set("clip", "rect(77px, 398px, 435px, 92px)");
var rollScale = me.root.createChild("path", "roll-scale");
rollScale.setTranslation(ISFD.hsiXCenter, 0);
rollScale.setStrokeLineWidth(2);
rollScale.setColor(1, 1, 1);
var baseR = ISFD.rollBaseRadius;
var minorTick = 16;
var majorTick = 30;
me.addHorizontalSymmetricPolarTick(rollScale, 10, baseR, baseR + minorTick);
me.addHorizontalSymmetricPolarTick(rollScale, 20, baseR, baseR + minorTick);
me.addHorizontalSymmetricPolarTick(rollScale, 30, baseR, baseR + majorTick);
me.addHorizontalSymmetricPolarTick(rollScale, 45, baseR, baseR + minorTick);
# we cap the length of these to avoid sticking into the speed/alt tapes
me.addHorizontalSymmetricPolarTick(rollScale, 60, baseR, baseR + minorTick);
rollScale.close();
# add filled path for the zero arrow
rollZeroArrow = me.root.createChild("path", "roll-zero-mark");
rollZeroArrow.setColorFill(1, 1, 1);
rollZeroArrow.setTranslation(ISFD.hsiXCenter, 0);
# arrow extends from the roll radius to the top of HSI
var arrowHeight = (ISFD.hsiHeight / 2) - ISFD.rollBaseRadius;
var arrowHWidth = arrowHeight * (2/3);
rollZeroArrow.moveTo(0, -baseR);
rollZeroArrow.line(arrowHWidth, -arrowHeight);
rollZeroArrow.line(-arrowHWidth * 2, 0);
rollZeroArrow.close();
# and the moving arrow
var rollMarker = me._rollGroup.createChild("path", "roll-indicator");
rollMarker.setColorFill(0, 0, 0);
rollMarker.setStrokeLineWidth(2);
rollMarker.setColor(1, 1, 1);
rollMarker.moveTo(0, -baseR);
rollMarker.line(arrowHWidth, arrowHeight);
rollMarker.line(-arrowHWidth * 2, 0);
rollMarker.close();
},
createPitchLadder : func()
{
# sky rect
var box = me.root.rect(ISFD.hsiLeft, -ISFD.hsiHeight/2,
ISFD.hsiWidth, ISFD.hsiHeight);
box.setColorFill('#69B3F4');
me._pitchRotation = me.root.createChild("group", "pitch-rotation");
me.pitchGroup = me._pitchRotation.createChild("group", "pitch-group");
var bkGroup = me.root.createChild("group", "hsi-clip-group");
# ground rect
var box = me.pitchGroup.rect(-1000, 0, 2000, 2000);
box.setColorFill('#8F9552');
box.set("clip-frame", canvas.Element.GLOBAL);
box.set("clip", "rect(77px, 398px, 435px, 92px)");
var ladderGroup = me.pitchGroup.createChild("group", "pitch-ladder");
ladderGroup.set("clip-frame", canvas.Element.GLOBAL);
ladderGroup.set("clip", "rect(140px, 368px, 435px, 122px)");
var pitchLadder = ladderGroup.createChild("path", "pitch-ladder-ticks");
pitchLadder.setStrokeLineWidth(2);
pitchLadder.setColor(1, 1, 1);
var sp = ISFD.pitchLadderDegreeSpacing; # shorthand
var tenDegreeWidth = 64;
var fiveDegreeWidth = 32;
var twoFiveDegreeWidth = 24;
# add line at zero
me.addHorizontalSymmetricLine(pitchLadder, ISFD.halfSize, 0);
for (var i=1; i<=9; i+=1)
{
var d = i * 10;
me.addHorizontalSymmetricLine(pitchLadder, tenDegreeWidth, d * sp);
me.addHorizontalSymmetricLine(pitchLadder, tenDegreeWidth, -d * sp);
me.addHorizontalSymmetricLine(pitchLadder, fiveDegreeWidth, (d - 5) * sp);
me.addHorizontalSymmetricLine(pitchLadder, fiveDegreeWidth, (5 - d) * sp);
# 2.5 and 7.5 degree lines
me.addHorizontalSymmetricLine(pitchLadder, twoFiveDegreeWidth, (d - 2.5) * sp);
me.addHorizontalSymmetricLine(pitchLadder, twoFiveDegreeWidth, (2.5 - d) * sp);
me.addHorizontalSymmetricLine(pitchLadder, twoFiveDegreeWidth, (d - 7.5) * sp);
me.addHorizontalSymmetricLine(pitchLadder, twoFiveDegreeWidth, (7.5 - d) * sp);
# add text as well
var textUp = ladderGroup.createChild("text", "pitch-ladder-legend-" ~ d);
textUp.setText(d);
textUp.setAlignment("right-center");
textUp.setTranslation(-tenDegreeWidth, d * sp);
textUp.setFontSize(36);
textUp.setFont("LiberationFonts/LiberationMono-Bold.ttf");
var textDown = ladderGroup.createChild("text", "pitch-ladder-legend-" ~ d);
textDown.setText(d);
textDown.setAlignment("right-center");
textDown.setTranslation(-tenDegreeWidth, -d * sp);
textDown.setFontSize(36);
textDown.setFont("LiberationFonts/LiberationMono-Bold.ttf");
}
},
createSpeedTape : func()
{
# background box
var box = me.root.rect(0, -ISFD.halfSize, ISFD.speedTapeWidth - 1, ISFD.baseSize);
box.setColorFill('#738A7E');
box.setTranslation(-256, 0);
box.set('z-index', -1);
# short lines for text
# long lines for 'odd' tens
# 3 digit monospace text fits exactly between left side and short tick
# maximum 5 (6?) visible text pieces
me._speedTapeGroup = me.root.createChild("group", "speed-tape-group");
me._speedTapeGroup.setTranslation(ISFD.hsiLeft, 0);
me._speedTapeGroup.set('z-index', 2);
var tapePath = me._speedTapeGroup.createChild("path", "speed-tape");
tapePath.setStrokeLineWidth(2);
tapePath.setColor(1, 1, 1);
var knotSpacing = 4;
var tenKnotWidth = 16;
var twentyKnotWidth = 8;
for (var i=0; i<=25; i+=1)
{
var tenKnotY = ((i * 20) + 10) * knotSpacing;
var twentyKnot = ((i+1) * 20);
tapePath.moveTo(0, -tenKnotY).line(-tenKnotWidth, 0);
tapePath.moveTo(0, -twentyKnot * knotSpacing).line(-twentyKnotWidth, 0);
var text = me._speedTapeGroup.createChild("text", "speed-tape-legend-" ~ twentyKnot);
text.setText(twentyKnot);
text.setAlignment("right-center");
text.setFont("LiberationFonts/LiberationMono-Bold.ttf");
text.setFontSize(36);
text.setTranslation(-twentyKnotWidth-2, -twentyKnot * knotSpacing);
}
},
updateSpeedTape : func()
{
# special case when speed is close to zero (show 'bottom' only)
# translate based on start value
# update digits in text
# given it's a 100kt range, maybe fixed graphic for the tape reduces updates?
var yOffset = 4 * me._controller.getIndicatedAirspeedKnots();
me._speedTapeGroup.setTranslation(ISFD.hsiLeft, yOffset);
},
createAltitudeTape : func()
{
# tick every 50' interval
# text, monospace, 5 digits, ever 100'
# background box
var box = me.root.rect(ISFD.hsiRight + 1, -ISFD.halfSize,
ISFD.altTapeWidth, ISFD.baseSize);
box.setColorFill('#738A7E');
box.set('z-index', -1);
me._altTapeGroup = me.root.createChild("group", "altitude-tape-group");
me._altTapeGroup.setTranslation(ISFD.hsiRight, 0);
var tapePath = me._altTapeGroup.createChild("path", "altitude-tape");
tapePath.setStrokeLineWidth(2);
tapePath.setColor(1, 1, 1);
var hundredFtSpacing = 64;
var twoHundredFtSpacing = hundredFtSpacing * 2;
var twoHundredFtWidth = 20;
# empty array to hold altitude tape texts for easy updating
me._altitudeTapeTexts = [];
for (var i=0; i<=12; i+=1)
{
var y = (i - 6) * twoHundredFtSpacing;
var tickY = y + hundredFtSpacing;
tapePath.moveTo(0, -tickY).line(twoHundredFtWidth, 0);
var text = me._altTapeGroup.createChild("text", "altitude-tape-legend-" ~ i);
text.setText(text);
text.setFontSize(36);
text.setAlignment("left-center");
text.setFont("LiberationFonts/LiberationMono-Regular.ttf");
text.setTranslation(2, -y);
# we will update the text very often, ensure we only do
# real work if it actually changes
text.enableUpdate();
# save for later updating
append(me._altitudeTapeTexts, text);
}
},
updateAltitudeTape : func()
{
var altFt = me._controller.getAltitudeFt();
var alt200 = int(altFt/200);
var altMod200 = altFt - (alt200 * 200);
var offset = 128 * (altMod200 / 200.0);
me._altTapeGroup.setTranslation(ISFD.hsiRight, offset);
# compute this as current alt - half altitude range
var lowestAlt = (alt200 - 6) * 200;
for (var i=0; i<=12; i+=1)
{
var alt = lowestAlt + (i * 200);
# printf with 5 digits
var s = sprintf("%05i", alt);
me._altitudeTapeTexts[i].updateText(s);
}
# compute transform on group to put the actual altitude on centre
},
createCompassRose : func()
{
# clip group for numerals
var clipGroup = me.root.createChild("group", "rose-clip-group");
clipGroup.set("clip-frame", canvas.Element.LOCAL);
clipGroup.set("clip", "rect(176px, 142px, 256px, -164px)");
clipGroup.set('z-index', 2);
var roseBoxHeight = ISFD.modeBoxHeight;
var hh = roseBoxHeight / 2;
# background of the compass
var p = clipGroup.createChild('path', 'rose-background');
p.moveTo(ISFD.hsiXCenter - ISFD.roseRadius, ISFD.hsiBottom + 12 + ISFD.roseRadius);
p.arcSmallCW(ISFD.roseRadius, ISFD.roseRadius, 0,
ISFD.roseRadius * 2, 0);
p.close();
p.setColorFill('#738A7E');
# add path for the heading arrow
var arrow = me.root.createChild("path", "rose-arrow");
arrow.setTranslation(ISFD.hsiXCenter, ISFD.hsiBottom);
arrow.setStrokeLineWidth(2);
arrow.setColor(1, 1, 1);
# same size as the roll arrow
var arrowHeight = (ISFD.hsiHeight / 2) - ISFD.rollBaseRadius;
var arrowHWidth = arrowHeight * (2/3);
arrow.moveTo(0, arrowHeight);
arrow.line(arrowHWidth, -arrowHeight);
arrow.line(-arrowHWidth * 2, 0);
arrow.close();
arrow.set('z-index', 4);
me._roseGroup = clipGroup.createChild('group', 'rose-group');
me._roseGroup.setTranslation(ISFD.hsiXCenter, ISFD.hsiBottom + 12 + ISFD.roseRadius);
var roseTicks = me._roseGroup.createChild('path', 'rose-ticks');
roseTicks.setStrokeLineWidth(2);
roseTicks.setColor(1, 1, 1);
roseTicks.set('z-index', 2);
var textR = (ISFD.roseRadius) - 16;
for (var i=0; i<36; i+=1) {
# create ten degree text
# TODO: 30 degree sizes should be bigger
var text = me._roseGroup.createChild("text", "compass-rose-" ~ i);
text.setText(i);
text.setFontSize(36);
text.setAlignment("center-top");
text.setFont("LiberationFonts/LiberationMono-Bold.ttf");
var horAngle = 90 - (i * 10); # angle from +ve X axis
var sa = math.sin(horAngle * D2R);
var ca = math.cos(horAngle * D2R);
text.setTranslation(ca * textR, -sa * textR);
text.setRotation(i * 10 * D2R);
me.addPolarTick(roseTicks, i * 10, ISFD.roseRadius, ISFD.roseRadius - 8);
me.addPolarTick(roseTicks, (i * 10) + 5, ISFD.roseRadius, ISFD.roseRadius - 16);
}
roseTicks.close();
},
createAltitudeBox : func()
{
var halfBoxHeight = ISFD.boxHeight / 2;
var box = me.root.rect(ISFD.hsiRight - 10, -halfBoxHeight,
ISFD.altTapeWidth + 10, ISFD.boxHeight);
box.setColorFill('#000000');
box.setColor('#ffffff');
box.setStrokeLineWidth(2);
box.set('z-index', 2);
var clipGroup = me.root.createChild('group', 'altitude-box-clip');
clipGroup.set("clip-frame", canvas.Element.LOCAL);
clipGroup.set("clip", "rect(-24px," ~ (ISFD.altTapeWidth + 10) ~ "px, 24px, 0px)");
clipGroup.setTranslation(ISFD.hsiRight - 10, 0);
clipGroup.set('z-index', 3);
var text = clipGroup.createChild('text', 'altitude-box-text');
me._altitudeBoxText = text;
text.setText('88 ');
text.setFontSize(44);
text.setAlignment("left-center");
text.setFont("LiberationFonts/LiberationMono-Regular.ttf");
me._altitudeDigits00 = me.createDigitTape(clipGroup, 'altitude-digits00', '0');
me._altitudeDigits00.setFontSize(32);
me._altitudeDigits00.set('z-index', 4);
},
createSpeedBox : func()
{
var halfBoxHeight = ISFD.boxHeight / 2;
var box = me.root.rect(-ISFD.halfSize - 2, -halfBoxHeight,
ISFD.speedTapeWidth + 4, ISFD.boxHeight);
box.setColorFill('#000000');
box.setColor('#ffffff');
box.setStrokeLineWidth(2);
box.set('z-index', 2);
var clipGroup = me.root.createChild('group', 'speed-box-clip');
clipGroup.set("clip-frame", canvas.Element.LOCAL);
clipGroup.set("clip", "rect(-24px," ~ (ISFD.speedTapeWidth + 4) ~ "px, 24px, 0px)");
clipGroup.setTranslation(-ISFD.halfSize, 0);
clipGroup.set('z-index', 3);
var text = clipGroup.createChild('text', 'speed-box-text');
me._speedBoxText = text;
text.setText('88 ');
text.setFontSize(44);
text.setAlignment("left-center");
text.setFont("LiberationFonts/LiberationMono-Regular.ttf");
me._speedDigit0 = me.createDigitTape(clipGroup, 'speed-digit0');
me._speedDigit0.set('z-index', 4);
},
createAltimeterSetting: func()
{
me._altimeterText = me.root.createChild('text', 'altimeter-setting-text');
me._altimeterText.setText('1013');
me._altimeterText.setFontSize(44);
me._altimeterText.setAlignment("right-center");
me._altimeterText.setFont("LiberationFonts/LiberationMono-Regular.ttf");
me._altimeterText.setColor('#00ff00');
var midTextY = -ISFD.halfSize + (ISFD.modeBoxHeight * 0.5);
me._altimeterText.setTranslation(ISFD.hsiRight - 2, midTextY);
},
createModeText : func()
{
me._modeText = me.root.createChild('text', 'mode-text');
me._modeText.setFontSize(44);
me._modeText.setText('APP');
me._modeText.setAlignment("left-center");
me._modeText.setFont("LiberationFonts/LiberationMono-Regular.ttf");
me._modeText.setColor('#00ff00');
var midTextY = -ISFD.halfSize + (ISFD.modeBoxHeight * 0.5);
me._modeText.setTranslation(ISFD.hsiLeft + 2, midTextY);
},
pressButtonAPP : func()
{
if (me._mode == 'app') {
me._mode = '';
me._modeText.setVisible(0);
} else {
me._mode = 'app';
me._modeText.setText('APP');
me._modeText.setVisible(1);
}
},
update : func()
{
# read LOC/GS deviation
# read Mach for some options
me._controller.update();
# pitch and roll
var roll = me._controller.getBankAngleDeg() * D2R;
var pitch = me._controller.getPitchDeg();
me.pitchGroup.setTranslation(ISFD.hsiXCenter, pitch * me.pitchLadderDegreeSpacing);
me._pitchRotation.setRotation(-roll);
me._rollGroup.setRotation(-roll);
# heading
me._roseGroup.setRotation(-me._controller.getHeadingDeg() * D2R);
me.updateAltitudeTape();
me.updateSpeedTape();
# speed box
var spd = me._controller.getIndicatedAirspeedKnots();
var spdDigit0 = math.mod(spd, 10);
me._speedDigit0.setTranslation(53, 16 + spdDigit0 * 44);
var s = sprintf("%02i ", math.floor(spd / 10));
me._speedBoxText.setText(s);
# altitude box
var alt = me._controller.getAltitudeFt();
var altDigits00 = math.mod(alt / 10, 10);
me._altitudeDigits00.setTranslation(80, 16 + altDigits00 * 32);
var s = sprintf("%03i ", math.floor(alt / 100));
me._altitudeBoxText.setText(s);
}
};

View file

@ -0,0 +1,70 @@
var GenericController =
{
# COLORS : {
# green : [0, 1, 0],
# white : [1, 1, 1],
# black : [0, 0, 0],
# lightblue : [0, 1, 1],
# darkblue : [0, 0, 1],
# red : [1, 0, 0],
# magenta : [1, 0, 1],
# },
new : func ()
{
var obj = {
parents : [GenericController],
};
# IFSD does its own barometric altititde independant of the acft ADIRUs
#me.altitudeProp = props.globals.getNode('/instruments/')
return obj;
},
update : func()
{
},
getAltitudeFt : func()
{
return getprop("/position/altitude-ft");
},
getIndicatedAirspeedKnots : func()
{
return getprop("/velocities/airspeed-kt");
},
getHeadingDeg : func()
{
# compass / gyro source for this?
return getprop("/orientation/heading-deg");
},
getPitchDeg : func()
{
return getprop("/orientation/pitch-deg");
#return getprop("/instrumentation/attitude-indicator/indicated-pitch-deg");
# obj.addPropMap("ADCTurnRate", "/instrumentation/turn-indicator/indicated-turn-rate");
# obj.addPropMap("ADCSlipSkid", "/instrumentation/slip-skid-ball/indicated-slip-skid");
},
getBankAngleDeg : func()
{
return getprop("/orientation/roll-deg");
# return getprop("/instrumentation/attitude-indicator/indicated-roll-deg");
},
getBarometricPressureSetting : func()
{
}
# also a setter
# set inHg / hPA units
}

View file

@ -0,0 +1,52 @@
var GUI =
{
new : func(isfd, isfd_canvas, scale = 1.0)
{
var obj = {
parents : [ GUI ],
isfd : isfd,
width : 528,
height : 528,
scale : scale
};
obj.window = canvas.Window.new([obj.scale*obj.width,obj.scale*obj.height],"dialog").set('title',"ISFD");
obj.window.del = func() {
# Over-ride the window.del function so we clean up when the user closes the window
# Use call method to ensure we have the correct closure.
call(obj.cleanup, [], obj);
};
# creating the top-level/root group which will contain all other elements/group
obj.myCanvas = obj.window.createCanvas();
obj.myCanvas.set("name", "ISFD");
obj.root = obj.myCanvas.createGroup();
# Project the canvas onto the dialog
var mfd_child = obj.root.createChild("image")
.setFile(isfd_canvas.getPath())
.set("z-index", 150)
.setTranslation(obj.scale*8,obj.scale*8)
.setSize(obj.scale*512, obj.scale*512);
# Create the surround fascia, which is just a PNG image;
var child = obj.root.createChild("image")
.setFile("Aircraft/Instruments-3d/ISFD/fascia.png")
.set("z-index", 100)
.setTranslation(0, 0)
.setSize(obj.scale*obj.width,obj.scale*obj.height);
return obj;
},
cleanup : func()
{
me.isfd.del();
# Clean up the window itself
call(canvas.Window.del, [], me.window);
},
};

View file

View file

@ -605,6 +605,7 @@ var CDU = {
m._oleoSwitchNode = props.globals.getNode('instrumentation/fmc/discretes/oleo-switch-flight', 1);
m._setupCanvas(placement);
m._setupCommands();
m._page = nil;
m._model = nil;
@ -680,6 +681,50 @@ var CDU = {
}
},
_buttonCallbackTable: {
'exec': func() { Boeing.cdu.button_exec(); },
'prog': func() { Boeing.cdu.displayPageByTag('progress'); },
'hold': func() { print("Not implemented yet");},
'cruise': func() { Boeing.cdu.displayPageByTag('cruise'); },
'dep-arr': func() { Boeing.cdu.button_dep_arr(); },
'legs': func() { Boeing.cdu.button_legs(); },
'menu': func() { Boeing.cdu.displayPageByTag('menu'); },
'climb': func() { Boeing.cdu.displayPageByTag('climb'); },
'fix': func() { Boeing.cdu.displayPageByTag('fix'); },
'n1-limit': func() { print("Not implemented yet");},
'route': func() { Boeing.cdu.button_route(); },
'next-page': func() { Boeing.cdu.next_page(); },
'prev-page': func() { Boeing.cdu.prev_page(); },
'descent': func() { Boeing.cdu.displayPageByTag('descent'); },
'init-ref': func() { Boeing.cdu.displayPageByTag('index'); },
'clear': func() { Boeing.cdu.clear(); },
'delete': func() { Boeing.cdu.delete(); },
'plus-minus': func() { Boeing.cdu.plusminus(); }
},
_keyCommandCallback: func(node)
{
var k = node.getChild("key").getValue();
Boeing.cdu.input(chr(k));
},
_lskCommandCallback: func(node)
{
var keyName = node.getChild("lsk").getValue();
Boeing.cdu.lsk(keyName);
},
# register commands used for interfacing external CDU hardware
_setupCommands: func()
{
addcommand('cdu-key', me._keyCommandCallback);
addcommand('cdu-lsk', me._lskCommandCallback);
foreach(var b; keys(me._buttonCallbackTable)) {
addcommand('cdu-button-' ~ b , me._buttonCallbackTable[b]);
}
},
rowForLine: func(line)
{
return (line * 2) + 2;

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

File diff suppressed because it is too large Load diff

View file

@ -17,6 +17,19 @@
</condition>
</animation>
<animation>
<type>select</type>
<condition>
<property>/sim/model/display-grid</property>
</condition>
<object-name>GridBottom</object-name>
<object-name>GridFront</object-name>
<object-name>GridPort</object-name>
<object-name>GridRear</object-name>
<object-name>GridStarboard</object-name>
<object-name>GridTop</object-name>
</animation>
<animation>
<type>blend</type>
<object-name>body</object-name>

View file

@ -223,6 +223,10 @@
<name>=</name>
<desc>open/close cursor dialog</desc>
</key>
<key>
<name>Ctrl + G</name>
<desc>Show/hide 8x8x8m box grid around ufo for screen alignment</desc>
</key>
<line>Pre-select initial model (path relative to $FG_ROOT):</line>
<line>&#32;&#32;&#45;&#45;prop:cursor=Model/path.xml</line>
@ -255,15 +259,9 @@
<name>Ctrl-G</name>
<desc>Gear Up.</desc>
<binding>
<command>nasal</command>
<script>controls.gearDown(-1)</script>
<command>property-toggle</command>
<property>/sim/model/display-grid</property>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.gearDown(0)</script>
</binding>
</mod-up>
</key>
<key n="61">

View file

@ -35,6 +35,8 @@ Contents
9. Nasal API
10. Add-on development; in-sim reload of Nasal code
Introduction
------------
@ -827,6 +829,48 @@ Read-only data members (attributes) of addons.Maintainer objects:
to a web page from which people can subscribe to
that mailing-list (string)
10. Add-on development; in-sim reload of Nasal code
---------------------------------------------------
!!! WARNING:
!!! The reload feature is meant for developers only, it should not be made
!!! visible to end users. Unexpected side effects may occur due to reload,
!!! if not implemented correctly.
!!! We really don't want users to send bug reports due to reload going wrong.
To make development of add-ons less time consuming, you can reload the
Nasal part of your add-on without having to restart FlightGear. When an
add-on is loaded, setlistener() and maketimer() wrappers are installed
in the add-on's own namespace; these wrappers shadow and call themselves
the standard setlistener() and maketimer() functions. The setlistener()
and maketimer() wrapper functions keep track of every listener and timer
they create. When the add-on is removed (e.g., as part of its reload
sequence), removelistener() is called for each of these listeners, and
each timer has its stop() method called.
_
For the time being, you have to track any other resources outside the
namespace of your add-on by yourself and clean them up in the unload()
function, e.g. delete canvas or close any files you opened.
You can define this unload() function in the addon-main.nas file. When
your add-on is reloaded, its unload() function, if defined, will be
called with one argument: the addons.Addon object (a Nasal ghost)
corresponding to your add-on. unload() is run in the add-on's own
namespace.
The reload is triggered by setting the property
/addon/by-id/ADDON_ID/reload to true (replace ADDON_ID with your
particular add-on identifier). A listener will react to that property,
reset it to false and attempt to reload the addon-main.nas file for your
add-on (doing the aforementioned cleanup before). You can add a menu
item to trigger the reload easily, but it should be removed before
publishing your add-on to users (see the above warning).
Please have a look at the skeleton add-on at
https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Addons/Skeleton/
Footnotes
---------

View file

@ -12,9 +12,13 @@ Contents ----------------------------------------------------------------------
3 stg files
3.1 OBJECT_BASE
3.2 OBJECT
3.4 OBJECT_SHARED
3.3 OBJECT_STATIC
3.5 OBJECT_SIGN
3.4 OBJECT_SHARED / OBJECT_SHARED_AGL
3.3 OBJECT_STATIC / OBJECT_STATIC_AGL
3.5 OBJECT_SIGN /OBJECT_SIGN_AGL
3.6 BUILDING_ROUGH / BUILDING_DETAILED
3.7 ROAD_ROUGH / ROAD_DETAILED
3.8 RAILWAY_ROUGH / RAILWAY_DETAILED
3.9 BUILDING_LIST
4 model manager ("/models/model")
4.1 static objects
@ -194,8 +198,8 @@ so you'll find that file stored as KSFO.btg.gz.
3.3 OBJECT_SHARED
------------------
3.3 OBJECT_SHARED / OBJECT_SHARED_AGL
--------------------------------------
add static object to the tile.
@ -216,11 +220,11 @@ the /orientation/heading-deg entry in the property system, which is clockwise.
OBJECT_SHARED models are cached and reused. They are only once in memory
and never freed. (See also the next section.)
OBJECT_SHARED_AGL places the object relative to the ground elevation. Note that
this is an expensive operation and is strongly discouraged.
3.4 OBJECT_STATIC
------------------
3.4 OBJECT_STATIC / OBJECT_STATIC_AGL
--------------------------------------
add static objects to the tile, just like OBJECT_SHARED. There are three
differences to OBJECT_SHARED (apart from the name):
@ -241,10 +245,12 @@ Example:
OBJECT_STATIC ggb-fb.xml -122.4760494 37.81876042 0 105 0.00 0.00
OBJECT_STATIC_AGL places the object relative to the ground elevation. Note that
this is an expensive operation and is strongly discouraged.
3.5 OBJECT_SIGN
---------------
3.5 OBJECT_SIGN / OBJECT_SIGN_AGL
---------------------------------
defines taxiway or runway sign. The syntax is much like that of OBJECT_SHARED
entries, except that the path is replaced with a sign contents specification
@ -333,9 +339,82 @@ group. You can use this command line to filter out such messages:
$ fgfs --log-level=debug 2>&1|grep OBJECT_SIGN
OBJECT_SIGN_AGL places the sign relative to the ground elevation. Note that
this is an expensive operation and is strongly discouraged.
3.6 BUILDING_ROUGH / BUILDING_DETAILED
---------------------------------------
defines building meshes, typically based on OSM data.
Example:
BUILDING_ROUGH buildings.ac -122.501090 37.514830 15.5 0.00 0.00 0.00
Syntax:
BUILDING_ROUGH <object-path> <lon> <lat> <elev-m> <hdg-deg> <pitch-deg> <roll-deg>
Note that only bare .ac files should be referenced. The material definition for
"OSM_Building" will be used to determine the texture and Effects.
BUILDING_ROUGH uses the "rough" LOD range, while BUILDING_DETAILED uses the
"detailed" LOD range. Some randomness is applied so that building meshes
gradually fade in
3.7 ROAD_ROUGH / ROAD_DETAILED
-------------------------------
Identical to BUILDING_ROUGH / BIULDING_DETAILED above, except used for roads.
the material definition "OSM_Road" is applied.
3.8 RAILWAY_ROUGH / RAILWAY_DETAILED
-------------------------------
Identical to BUILDING_ROUGH / BIULDING_DETAILED above, except used for roads.
the material definition "OSM_Railway" is applied.
3.9 BUILDING_LIST
------------------
Defines a file containing building coordinates that should be rendered using
the building shader (aka Random Buildings).
Example:
BUILDING_LIST buildings.txt OSM_Building -2.72943543 56.00080606 36.1
Syntax
BUILDING_LIST <filename> <material name> <lon> <lat> <elev>
Where:
- <filename> is the name of a file containing building positions
- <material name> is the name of the material that will be referenced to find
random building parameters.
- <lat>, <lon>, <elev> defines the center of the set of buildings, and also
the point at which the material definition will be evaluated (for regional
materials).
See README.materials for details on configuring the random building parameters.
The referenced <filename> (in the example buildings.txt) contains lines of the form
<x> <y> <z> <rot> <type>
where :
- (<x>,<y>,<z>) define the bottom left corner of the building in cartesian space (+X is North, +Y is East, +Z is up), with (0,0,0) being the position referenced above
- <rot> is the clockwise rotation around the Z-axis in degrees, rotating around the bottom left (SW) corner of the building
- <type> is {0,1,2} which map to small, medium and large buildings respectively, as per random buildings.
For example, the following entries generates 3 small, 2 medium and 2 large buildings in an easterly line:
0 0 0 0 0
0 100 0 0 0
0 200 0 0 0
0 300 0 0 1
0 400 0 0 1
0 500 0 0 2
4 model manager ("/models/model") --------------------------------------------
@ -575,6 +654,3 @@ are:
<load>print("my data are under ", cmdarg().getPath())</load>
<unload>print("Currently I'm only called at fgfs exit!")</unload>
</nasal>

View file

@ -1,23 +1,70 @@
<PropertyList>
<name>GoFlight GF EFIS</name>
<debug-events type="bool">true</debug-events>
<debug-events type="bool">false</debug-events>
<nasal>
<open>
<![CDATA[
var basePath = "/instrumentation/efis[0]/";
# value is 0..8 for the konb on 738, GF only goes to 10
var efisRangeKnobNode = props.globals.getNode(basePath ~ "inputs/range-knob");
efisRangeKnobNode.setIntValue(0);
# value is absolute integer for each click, hmmmm
var efisBaroKnobNode = props.globals.getNode(basePath ~ "inputs/baro-knob");
var setRangeBit = func(bit) {
var b = efisRangeKnobNode.getValue() - 1;
efisRangeKnobNode.setIntValue(bits.set(b, bit) + 1);
}
var clearRangeBit = func(bit) {
var b = efisRangeKnobNode.getValue() - 1;
efisRangeKnobNode.setIntValue(bits.clear(b, bit) + 1);
}
var efisNDModeNode = props.globals.getNode(basePath ~ "mfd/mode-num");
var setModeBit = func(bit) {
var mode = efisNDModeNode.getValue();
efisNDModeNode.setIntValue(bits.set(mode, bit));
}
var clearModeBit = func(bit) {
var mode = efisNDModeNode.getValue();
efisNDModeNode.setIntValue(bits.clear(mode, bit));
}
]]>
</open>
</nasal>
<hid-descriptor>
<report>
<type>input</type>
<id>1</id>
<unused-bits><size type="int">16</size></unused-bits>
<rel-dial-0>
<size type="int">8</size>
<count type="int">2</count>
<is-signed type="bool">true</is-signed>
</rel-dial-0>
<button-0>
<count type="int">24</count>
</button-0>
</report>
</hid-descriptor>
<event>
<name>rel-dial-4</name>
<name>rel-dial-0</name>
<binding>
<command>property-adjust</command>
<property>/input/goflight/efis/height</property>
<min type="double">0.0</min>
</binding>
<interpolater>
<mirrored type="bool">true</mirrored>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>2</dep></entry>
@ -26,146 +73,17 @@
</interpolater>
</event>
<event>
<name>rel-dial-5</name>
<event>
<name>rel-dial-1</name>
<binding>
<command>property-adjust</command>
<property>/input/goflight/efis/baro</property>
<min type="double">108.0</min>
<max type="double">117.95</max>
<wrap type="bool">true</wrap>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>2</dep></entry>
<entry><ind>3</ind><dep>4</dep></entry>
<entry><ind>4</ind><dep>8</dep></entry>
</interpolater>
</event>
<!--
<event>
<name>led-misc</name>
<setting>
<value>4</value>
<condition>
<equals>
<property>/input/goflight/mfr/active</property>
<value>0</value>
</equals>
</condition>
</setting>
<setting>
<value>7</value>
<condition>
<not-equals>
<property>/input/goflight/mfr/active</property>
<value>0</value>
</not-equals>
</condition>
</setting>
</event>
<event>
<name>led-misc-1</name>
<setting>
<value>7</value>
<condition>
<equals>
<property>/input/goflight/mfr/active</property>
<value>1</value>
</equals>
</condition>
</setting>
<setting>
<value>0</value>
<condition>
<not-equals>
<property>/input/goflight/mfr/active</property>
<value>1</value>
</not-equals>
</condition>
</setting>
</event>
-->
<event>
<desc>STA Button</desc>
<name>button-1</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/sta</property>
</binding>
</event>
<event>
<desc>WXR Button</desc>
<name>button-2</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/wxr</property>
<property>/instrumentation/efis[0]/inputs/baro-knob</property>
</binding>
</event>
<event>
<desc>TERR Button</desc>
<name>button-3</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 3");</script>
</binding>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-4</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/arpt</property>
</binding>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-5</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 5");</script>
</binding>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-6</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 6");</script>
</binding>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-7</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 7");</script>
</binding>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-8</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 8");</script>
</binding>
</event>
<event>
<desc>TERR Button</desc>
<name>button-9</name>
<name>button-0</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/terr</property>
@ -174,7 +92,7 @@
<event>
<desc>POS Button</desc>
<name>button-10</name>
<name>button-1</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/pos</property>
@ -183,7 +101,7 @@
<event>
<desc>DATA Button</desc>
<name>button-11</name>
<name>button-2</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/data</property>
@ -192,7 +110,7 @@
<event>
<desc>ARPT Button</desc>
<name>button-12</name>
<name>button-3</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/arpt</property>
@ -201,7 +119,7 @@
<event>
<desc>WPT Button</desc>
<name>button-13</name>
<name>button-4</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/wpt</property>
@ -210,7 +128,7 @@
<event>
<desc>STA Button</desc>
<name>button-14</name>
<name>button-5</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/sta</property>
@ -219,7 +137,7 @@
<event>
<desc>WXR Button</desc>
<name>button-15</name>
<name>button-6</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/wxr</property>
@ -227,44 +145,56 @@
</event>
<event>
<desc>ARPT Button</desc>
<name>button-16</name>
<desc></desc>
<name>button-7</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 16");</script>
<script>debug.dump("Button 7");</script>
</binding>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-17</name>
<desc></desc>
<name>button-8</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 17");</script>
<script>setModeBit(0)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>clearModeBit(0)</script>
</binding>
</mod-up>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-18</name>
<desc></desc>
<name>button-9</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 18");</script>
<script>setModeBit(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>clearModeBit(1)</script>
</binding>
</mod-up>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-19</name>
<desc></desc>
<name>button-10</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 19");</script>
<script>debug.dump("Button 10");</script>
</binding>
</event>
<event>
<desc>in/HPA toggle</desc>
<name>button-20</name>
<name>button-11</name>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/kpa-mode</property>
@ -272,48 +202,71 @@
</event>
<event>
<desc>ARPT Button</desc>
<name>button-21</name>
<desc>DH/MCA knob push</desc>
<name>button-12</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 21");</script>
<script>debug.dump("DH/MCA toggle");</script>
</binding>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/minimums-mode</property>
</binding>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-22</name>
<desc></desc>
<name>button-13</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 22");</script>
<script>setRangeBit(0)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>clearRangeBit(0)</script>
</binding>
</mod-up>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-23</name>
<desc></desc>
<name>button-14</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 23");</script>
<script>setRangeBit(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>clearRangeBit(1)</script>
</binding>
</mod-up>
</event>
<event>
<desc>ARPT Button</desc>
<name>button-24</name>
<desc></desc>
<name>button-15</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button 24");</script>
<script>setRangeBit(2)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>clearRangeBit(2)</script>
</binding>
</mod-up>
</event>
<event>
<desc>ADF-L switch</desc>
<name>button-25</name>
<name>button-16</name>
<binding>
<command>property-assign</command>
<property>/instrumentation/efis/inputs/lh-vor-adf</property>
<value>2</value>
<value>-1</value>
</binding>
<mod-up>
<binding>
@ -327,7 +280,7 @@
<event>
<desc>VOR-L switch</desc>
<name>button-26</name>
<name>button-17</name>
<binding>
<command>property-assign</command>
<property>/instrumentation/efis/inputs/lh-vor-adf</property>
@ -344,11 +297,11 @@
<event>
<desc>ADF-R switch</desc>
<name>button-27</name>
<name>button-18</name>
<binding>
<command>property-assign</command>
<property>/instrumentation/efis/inputs/rh-vor-adf</property>
<value>2</value>
<value>-1</value>
</binding>
<mod-up>
<binding>
@ -361,7 +314,7 @@
<event>
<desc>VOR-R switch</desc>
<name>button-28</name>
<name>button-19</name>
<binding>
<command>property-assign</command>
<property>/instrumentation/efis/inputs/rh-vor-adf</property>
@ -378,7 +331,7 @@
<event>
<desc>MTRS Button</desc>
<name>button-29</name>
<name>button-20</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button MTRS");</script>
@ -391,8 +344,8 @@
</event>
<event>
<desc>MTRS Button</desc>
<name>button-30</name>
<desc>FPV Button</desc>
<name>button-21</name>
<binding>
<command>nasal</command>
<script>debug.dump("Button FPV");</script>
@ -404,17 +357,4 @@
</binding>
</event>
<event>
<desc>DH/MCA knob push</desc>
<name>button-21</name>
<binding>
<command>nasal</command>
<script>debug.dump("DH/MCA toggle");</script>
</binding>
<binding>
<command>property-toggle</command>
<property>/instrumentation/efis/inputs/minimums-mode</property>
</binding>
</event>
</PropertyList>

View file

@ -0,0 +1,175 @@
<PropertyList>
<name>GoFlight GF-46</name>
<debug-events type="bool">false</debug-events>
<nasal>
<open>
<![CDATA[
var transponderNode = props.globals.getNode("/instrumentation/transponder/id-code", 1);
var modeNode = props.globals.getNode("/instrumentation/transponder/inputs/knob-mode", 1);
var identNode = props.globals.getNode("/instrumentation/transponder/inputs/ident-btn", 1);
var brightnessNode = props.globals.getNode("/input/goflight/gf46/brightness", 8);
var formatTransponder = func(squawk)
{
var s = sprintf("%04d ", squawk);
return goflight.reverseBytes(goflight.bytesForString(s, 6));
}
var displaySevenSegment = func() {
if (modeNode.getValue() == 0) {
# OFF, blank display
return goflight.bytesForString(" ", 6);
}
return formatTransponder(transponderNode.getValue());
}
var modeNames = ['OFF ', 'STBY', 'TEST', 'XPDR', ' TA ', 'TARA'];
var displayFourteenSegment = func() {
var mode = modeNode.getValue();
return goflight.formatFourteenSegment(modeNames[mode], 4);
}
var powerOfTen = [1, 10, 100, 1000];
var powerOfEight = [1, 8, 64, 512];
# adapted from gui/dialogs/radios.xml
var extractDigit = func(code, index) {
return math.mod(code / powerOfTen[index], 10);
}
var extractOctal = func(code, index) {
return math.mod(code / powerOfEight[index], 8);
}
var adjustIdCode = func(offset) {
var code = transponderNode.getValue();
# convert ID code to decimal
var decCode = 0;
for (var i=0; i<3; i +=1) {
decCode += extractDigit(code, i) * powerOfEight[i];
}
# apply offset and clamp
decCode = math.clamp(decCode + offset, 0, 4095);
# convert back to octal-as-decimal
code = 0;
for (var i=0; i<3; i +=1) {
code += extractOctal(decCode, i) * powerOfTen[i];
}
transponderNode.setIntValue(code);
}
]]>
</open>
</nasal>
<!--
adding item:rel-dial, bits: 0:8, report=1
adding item:rel-dial-1, bits: 8:8, report=1
adding item:button-1, bits: 16:1, report=1
adding item:undefined-0, bits: 17:1, report=1
adding item:undefined-0-1, bits: 18:1, report=1
adding item:undefined-0-2, bits: 19:1, report=1
adding item:undefined-0-3, bits: 20:1, report=1
adding item:undefined-0-4, bits: 21:1, report=1
adding item:undefined-0-5, bits: 22:1, report=1
adding item:undefined-0-6, bits: 23:1, report=1
adding item:undefined-0-5, bits: 22:1, report=1
adding item:undefined-0-6, bits: 23:1, report=1
Unhandled HID alphanumeric usage:54
adding item:unknown, bits: 0:4, report=2
Unhandled HID alphanumeric usage:53
adding item:unknown-1, bits: 4:4, report=2
Unhandled HID alphanumeric usage:69
adding item:unknown-2, bits: 8:1, report=2
adding item:undefined-0-7, bits: 9:1, report=2
adding item:undefined-0-8, bits: 10:1, report=2
adding item:undefined-0-9, bits: 11:1, report=2
adding item:undefined-0-10, bits: 12:1, report=2
adding item:undefined-0-11, bits: 13:1, report=2
adding item:undefined-0-12, bits: 14:1, report=2
adding item:undefined-0-13, bits: 15:1, report=2
adding item:display-data, bits: 0:16, report=3
adding item:display-data-1, bits: 16:16, report=3
adding item:display-data-2, bits: 32:16, report=3
adding item:display-data-3, bits: 48:16, report=3
Unhandled HID alphanumeric usage:54
adding item:unknown-3, bits: 0:4, report=4
Unhandled HID alphanumeric usage:53
adding item:unknown-4, bits: 4:4, report=4
Unhandled HID alphanumeric usage:67
adding item:unknown-5, bits: 8:1, report=4
-->
<event>
<name>rel-dial-0</name>
<binding>
<command>nasal</command>
<script>adjustIdCode(cmdarg().getNode("setting").getValue())</script>
</binding>
<interpolater>
<mirrored type="bool">true</mirrored>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>10</dep></entry>
<entry><ind>3</ind><dep>100</dep></entry>
<entry><ind>4</ind><dep>1000</dep></entry>
</interpolater>
</event>
<event>
<name>rel-dial-1</name>
<binding>
<command>property-adjust</command>
<property>/instrumentation/transponder/inputs/knob-mode</property>
<min>0</min>
<max>5</max>
</binding>
</event>
<report>
<report-id type="int">3</report-id>
<watch>/instrumentation/transponder/inputs/knob-mode</watch>
<nasal-function>displayFourteenSegment</nasal-function>
</report>
<report>
<report-id type="int">5</report-id>
<watch>/instrumentation/transponder/id-code</watch>
<watch>/instrumentation/transponder/inputs/knob-mode</watch>
<nasal-function>displaySevenSegment</nasal-function>
</report>
<event>
<name>display-brightness</name>
<setting>
<property>/input/goflight/gf46/brightness</property>
</setting>
</event>
<event>
<desc>Ident</desc>
<name>button-1</name>
<binding>
<command>nasal</command>
<script>identNode.setBoolValue(1);</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>identNode.setBoolValue(0);</script>
</binding>
</mod-up>
</event>
</PropertyList>

View file

@ -1,102 +1,34 @@
<PropertyList>
<name>GoFlight MCP Pro</name>
<debug-events type="bool">true</debug-events>
<name>MCP Pro</name>
<debug-events type="bool">false</debug-events>
<nasal>
<open>
<![CDATA[
# map decimal digits 0..9 to standard 7-segment LCD pattern
# 2 should be 5b
# 3 should be 4f
var translateDigitToSevenSegment = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67];
var encodeString = func(s, fieldWidth, padChar = nil)
{
var padCount = fieldWidth - size(s);
var r = "";
if (padChar == nil) padChar = chr(0);
var altitudeAlphanumeric = func() { return goflight.mcp.altitudeData(); }
var headingAlphanumeric = func() { return goflight.mcp.headingData(); }
var courseAlphanumeric = func() { return goflight.mcp.course1Data(); }
var course2Alphanumeric = func() { return goflight.mcp.course2Data(); }
var speedAlphanumeric = func() { return goflight.mcp.speedData(); }
var vspeedAlphanumeric = func() { return goflight.mcp.vsData(); }
while (padCount > 0) {
r ~= padChar;
padCount -=1;
}
for (var i=0; i < size(s); i += 1) {
if (s[i] == `.`) {
# set the high bit to correspond to the decimal
var lastIndex = size(r) - 1;
r[lastIndex] = r[lastIndex] + 0x80;
} elsif (s[i] == `-`) {
r ~= chr(0x40);
} else {
var digitCode = s[i] - `0`;
r ~= chr(translateDigitToSevenSegment[digitCode]);
}
}
return r;
}
var altitudeAlphanumeric = func() {
var alt = getprop("/autopilot/settings/target-altitude-ft");
var altStr = sprintf("%d", alt);
return encodeString(altStr, 5);
}
var headingAlphanumeric = func() {
var hdg = getprop("/autopilot/settings/heading-bug-deg");
return encodeString(sprintf("%d", hdg), 3);
}
var courseAlphanumeric = func() {
var crs = getprop("/instrumentation/nav[0]/radials/selected-deg");
return encodeString(sprintf("%d", crs), 3);
}
var course2Alphanumeric = func() {
var crs = getprop("/instrumentation/nav[1]/radials/selected-deg");
return encodeString(sprintf("%d", crs), 3);
}
var speedAlphanumeric = func() {
var spd = getprop("/autopilot/settings/target-speed-kt");
return encodeString(sprintf("%d", spd), 5);
}
var vspeedAlphanumeric = func() {
var vs = getprop("/autopilot/settings/vertical-speed-fpm");
return encodeString(sprintf("%d", vs), 5);
}
var ledState = func()
{
if (activeChannel == 1) return chr(0x04);
return chr(0x2);
}
]]>
</open>
</nasal>
<event>
<name>rel-dial</name>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>5</dep></entry>
<entry><ind>3</ind><dep>10</dep></entry>
<entry><ind>4</ind><dep>20</dep></entry>
</interpolater>
<binding>
<command>property-adjust</command>
<property>/autopilot/settings/target-altitude-ft</property>
<factor type="double">100</factor>
<min>0</min>
</binding>
<name>display-brightness</name>
<setting>
<property>/input/goflight/mcp/brightness</property>
</setting>
</event>
<event>
<name>rel-dial-1</name>
<event>
<name>rel-dial-0</name>
<binding>
<command>property-adjust</command>
<property>/autopilot/settings/heading-bug-deg</property>
@ -105,16 +37,32 @@
<max>359</max>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>5</dep></entry>
<entry><ind>3</ind><dep>10</dep></entry>
<entry><ind>4</ind><dep>20</dep></entry>
<mirrored type="bool">true</mirrored>
<entry>
<ind>0</ind>
<dep>0</dep>
</entry>
<entry>
<ind>1</ind>
<dep>1</dep>
</entry>
<entry>
<ind>2</ind>
<dep>5</dep>
</entry>
<entry>
<ind>3</ind>
<dep>10</dep>
</entry>
<entry>
<ind>4</ind>
<dep>30</dep>
</entry>
</interpolater>
</event>
</event>
<event>
<name>rel-dial-2</name>
<event>
<name>rel-dial-1</name>
<binding>
<command>property-adjust</command>
<property>/instrumentation/nav[0]/radials/selected-deg</property>
@ -123,47 +71,100 @@
<max>359</max>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>5</dep></entry>
<entry><ind>3</ind><dep>10</dep></entry>
<entry><ind>4</ind><dep>20</dep></entry>
<mirrored type="bool">true</mirrored>
<entry>
<ind>0</ind>
<dep>0</dep>
</entry>
<entry>
<ind>1</ind>
<dep>1</dep>
</entry>
<entry>
<ind>2</ind>
<dep>5</dep>
</entry>
<entry>
<ind>3</ind>
<dep>10</dep>
</entry>
<entry>
<ind>4</ind>
<dep>30</dep>
</entry>
</interpolater>
</event>
<event>
<name>rel-dial-3</name>
</event>
<event>
<name>rel-dial-2</name>
<binding>
<command>property-adjust</command>
<property>/autopilot/settings/vertical-speed-fpm</property>
<factor type="double">10</factor>
<factor type="double">-50</factor>
<min>-8000</min>
<max>12000</max>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>5</dep></entry>
<entry><ind>3</ind><dep>10</dep></entry>
<entry><ind>4</ind><dep>20</dep></entry>
</interpolater>
</event>
<mirrored type="bool">true</mirrored>
<event>
<name>rel-dial-4</name>
<entry>
<ind>0</ind>
<dep>0</dep>
</entry>
<entry>
<ind>1</ind>
<dep>1</dep>
</entry>
<entry>
<ind>2</ind>
<dep>2</dep>
</entry>
<entry>
<ind>3</ind>
<dep>4</dep>
</entry>
<entry>
<ind>4</ind>
<dep>10</dep>
</entry>
</interpolater>
</event>
<event>
<name>rel-dial-3</name>
<binding>
<command>property-adjust</command>
<property>/autopilot/settings/target-speed-kt</property>
<min>0</min>
<command>nasal</command>
<script>goflight.mcp.adjustSpeed(cmdarg().getNode("offset").getValue())</script>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>5</dep></entry>
<entry><ind>3</ind><dep>10</dep></entry>
<entry><ind>4</ind><dep>20</dep></entry>
</interpolater>
</event>
<mirrored type="bool">true</mirrored>
<event>
<name>rel-dial-5</name>
<entry>
<ind>0</ind>
<dep>0</dep>
</entry>
<entry>
<ind>1</ind>
<dep>1</dep>
</entry>
<entry>
<ind>2</ind>
<dep>5</dep>
</entry>
<entry>
<ind>3</ind>
<dep>10</dep>
</entry>
<entry>
<ind>4</ind>
<dep>20</dep>
</entry>
</interpolater>
</event>
<event>
<name>rel-dial-4</name>
<binding>
<command>property-adjust</command>
<property>/instrumentation/nav[1]/radials/selected-deg</property>
@ -172,80 +173,131 @@
<max>359</max>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>5</dep></entry>
<entry><ind>3</ind><dep>10</dep></entry>
<entry><ind>4</ind><dep>20</dep></entry>
<mirrored type="bool">true</mirrored>
<entry>
<ind>0</ind>
<dep>0</dep>
</entry>
<entry>
<ind>1</ind>
<dep>1</dep>
</entry>
<entry>
<ind>2</ind>
<dep>5</dep>
</entry>
<entry>
<ind>3</ind>
<dep>10</dep>
</entry>
<entry>
<ind>4</ind>
<dep>30</dep>
</entry>
</interpolater>
</event>
</event>
<report>
<report-id type="int">9</report-id>
<watch>/autopilot/settings/target-altitude-ft</watch>
<nasal-function>altitudeAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">7</report-id>
<watch>/autopilot/settings/heading-bug-deg</watch>
<nasal-function>headingAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">3</report-id>
<watch>/instrumentation/nav[0]/radials/selected-deg</watch>
<nasal-function>courseAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">11</report-id>
<watch>/autopilot/settings/vertical-speed-fpm</watch>
<nasal-function>vspeedAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">5</report-id>
<watch>/autopilot/settings/target-speed-kt</watch>
<nasal-function>speedAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">13</report-id>
<watch>/instrumentation/nav[1]/radials/selected-deg</watch>
<nasal-function>course2Alphanumeric</nasal-function>
</report>
<!-- set LED from nose gear indicator -->
<event>
<name>led-misc</name>
<name>rel-dial-5</name>
<interpolater>
<mirrored type="bool">true</mirrored>
<entry>
<ind>0</ind>
<dep>0</dep>
</entry>
<entry>
<ind>1</ind>
<dep>1</dep>
</entry>
<entry>
<ind>2</ind>
<dep>10</dep>
</entry>
<entry>
<ind>3</ind>
<dep>20</dep>
</entry>
<entry>
<ind>4</ind>
<dep>40</dep>
</entry>
</interpolater>
<binding>
<command>nasal</command>
<script>
var x = cmdarg().getNode("offset").getValue();
goflight.mcp.adjustAltitude(x * 50);
</script>
</binding>
</event>
<report>
<report-id type="int">9</report-id>
<watch>/input/goflight/mcp/refresh</watch>
<nasal-function>altitudeAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">7</report-id>
<watch>/input/goflight/mcp/refresh-headings</watch>
<nasal-function>headingAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">3</report-id>
<watch>/input/goflight/mcp/refresh-headings</watch>
<nasal-function>courseAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">11</report-id>
<watch>/input/goflight/mcp/refresh</watch>
<nasal-function>vspeedAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">5</report-id>
<watch>/input/goflight/mcp/refresh</watch>
<nasal-function>speedAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">13</report-id>
<watch>/input/goflight/mcp/refresh-headings</watch>
<nasal-function>course2Alphanumeric</nasal-function>
</report>
<!-- LED driver properties - these are generated from individual
bool properties by the LEDWatcher helper class above -->
<event>
<name>led-misc-0</name>
<setting>
<value>1</value>
<condition>
<property>/gear/gear[0]/indicator-servicable</property>
<greater-than>
<property>/gear/gear[0]/position-norm</property>
<value>0.9</value>
</greater-than>
</condition>
</setting>
<setting>
<value>0</value>
<condition>
<not>
<and>
<property>/gear/gear[0]/indicator-servicable</property>
<greater-than>
<property>/gear/gear[0]/position-norm</property>
<value>0.9</value>
</greater-than>
</and>
</not>
</condition>
<property>/input/goflight/mcp/led[0]</property>
</setting>
</event>
<event>
<name>led-misc-1</name>
<setting>
<property>/input/goflight/mcp/led[1]</property>
</setting>
</event>
<event>
<name>led-misc-2</name>
<setting>
<property>/input/goflight/mcp/led[2]</property>
</setting>
</event>
<event>
<name>led-misc-3</name>
<setting>
<property>/input/goflight/mcp/led[3]</property>
</setting>
</event>
<event>
<name>button-1</name>
@ -260,7 +312,7 @@
<binding>
<command>nasal</command>
<script>print("Button 2")</script>
</binding>
</binding>enable
</event>
<event>
@ -315,8 +367,8 @@
<desc>Speed</desc>
<name>button-9</name>
<binding>
<command>nasal</command>
<script>print("SPD")</script>
<command>goflight-mcp-button</command>
<button>speed</button>
</binding>
</event>
@ -324,8 +376,8 @@
<name>button-10</name>
<desc>Level Change</desc>
<binding>
<command>nasal</command>
<script>print("LVL CHG")</script>
<command>goflight-mcp-button</command>
<button>level-change</button>
</binding>
</event>
@ -333,8 +385,8 @@
<name>button-11</name>
<desc>Heading</desc>
<binding>
<command>nasal</command>
<script>print("HDG")</script>
<command>goflight-mcp-button</command>
<button>heading</button>
</binding>
</event>
@ -342,8 +394,8 @@
<name>button-12</name>
<desc>Approach</desc>
<binding>
<command>nasal</command>
<script>print("APP")</script>
<command>goflight-mcp-button</command>
<button>approach</button>
</binding>
</event>
@ -351,8 +403,8 @@
<name>button-13</name>
<desc>Altitude</desc>
<binding>
<command>nasal</command>
<script>print("ALT")</script>
<command>goflight-mcp-button</command>
<button>altitude-hold</button>
</binding>
</event>
@ -360,8 +412,8 @@
<name>button-14</name>
<desc>Vertical Speed</desc>
<binding>
<command>nasal</command>
<script>print("VS")</script>
<command>goflight-mcp-button</command>
<button>vs</button>
</binding>
</event>
@ -369,9 +421,17 @@
<name>button-15</name>
<desc>Disengage Bar</desc>
<binding>
<command>nasal</command>
<script>print("Disengage")</script>
<command>property-assign</command>
<property>/input/goflight/mcp/ap-disengage</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/input/goflight/mcp/ap-disengage</property>
<value>0</value>
</binding>
</mod-up>
</event>
@ -379,17 +439,25 @@
<name>button-16</name>
<desc>F/O FD Enable</desc>
<binding>
<command>nasal</command>
<script>print("F/O FD")</script>
<command>property-assign</command>
<property>/input/goflight/mcp/fo-fd-enabled</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/input/goflight/mcp/fo-fd-enabled</property>
<value>0</value>
</binding>
</mod-up>
</event>
<event>
<name>button-17</name>
<desc>Altitude Intervention</desc>
<binding>
<command>nasal</command>
<script>print("ALT INTV")</script>
<command>goflight-mcp-button</command>
<button>altitude-intervention</button>
</binding>
</event>
@ -397,8 +465,8 @@
<name>button-18</name>
<desc>CWS-A</desc>
<binding>
<command>nasal</command>
<script>print("CWS-A")</script>
<command>goflight-mcp-button</command>
<button>cws-a</button>
</binding>
</event>
@ -406,8 +474,8 @@
<name>button-19</name>
<desc>CWS-B</desc>
<binding>
<command>nasal</command>
<script>print("CWS-B")</script>
<command>goflight-mcp-button</command>
<button>cws-b</button>
</binding>
</event>
@ -415,8 +483,8 @@
<name>button-20</name>
<desc>IAS knob push</desc>
<binding>
<command>nasal</command>
<script>print("IAS push")</script>
<command>goflight-mcp-button</command>
<button>speed-push</button>
</binding>
</event>
@ -424,8 +492,8 @@
<name>button-21</name>
<desc>HDG knob push</desc>
<binding>
<command>nasal</command>
<script>print("HDG push")</script>
<command>goflight-mcp-button</command>
<button>heading-push</button>
</binding>
</event>
@ -433,8 +501,8 @@
<name>button-22</name>
<desc>Altitude Knob Push</desc>
<binding>
<command>nasal</command>
<script>print("ALT SEL")</script>
<command>goflight-mcp-button</command>
<button>altitude-select</button>
</binding>
</event>
@ -442,17 +510,25 @@
<name>button-23</name>
<desc>Captain's FD Enable</desc>
<binding>
<command>nasal</command>
<script>print("CAP FD")</script>
<command>property-assign</command>
<property>/input/goflight/mcp/captain-fd-enabled</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/input/goflight/mcp/captain-fd-enabled</property>
<value>0</value>
</binding>
</mod-up>
</event>
<event>
<name>button-24</name>
<desc>N1 select</desc>
<binding>
<command>nasal</command>
<script>print("N1")</script>
<command>goflight-mcp-button</command>
<button>n1</button>
</binding>
</event>
@ -460,8 +536,8 @@
<name>button-25</name>
<desc>VNAV</desc>
<binding>
<command>nasal</command>
<script>print("VNAV")</script>
<command>goflight-mcp-button</command>
<button>vnav</button>
</binding>
</event>
@ -469,8 +545,8 @@
<name>button-26</name>
<desc>LNAV</desc>
<binding>
<command>nasal</command>
<script>print("LNAV")</script>
<command>goflight-mcp-button</command>
<button>lnav</button>
</binding>
</event>
@ -478,8 +554,8 @@
<name>button-27</name>
<desc>CMD A</desc>
<binding>
<command>nasal</command>
<script>print("CMD A")</script>
<command>goflight-mcp-button</command>
<button>command-a</button>
</binding>
</event>
@ -487,8 +563,8 @@
<name>button-28</name>
<desc>CMD B</desc>
<binding>
<command>nasal</command>
<script>print("CMD B")</script>
<command>goflight-mcp-button</command>
<button>command-b</button>
</binding>
</event>
@ -496,17 +572,25 @@
<name>button-29</name>
<desc>AT arm</desc>
<binding>
<command>nasal</command>
<script>print("A/T ARM")</script>
<command>property-assign</command>
<property>/input/goflight/mcp/autothrottle-armed</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/input/goflight/mcp/autothrottle-armed</property>
<value>0</value>
</binding>
</mod-up>
</event>
<event>
<name>button-30</name>
<desc>Soeed crossover</desc>
<binding>
<command>nasal</command>
<script>print("SPD C/O")</script>
<command>goflight-mcp-button</command>
<button>speed-crossover</button>
</binding>
</event>
@ -514,8 +598,8 @@
<name>button-31</name>
<desc>Speed intervention</desc>
<binding>
<command>nasal</command>
<script>print("SPD INTV")</script>
<command>goflight-mcp-button</command>
<button>speed-intervention</button>
</binding>
</event>
@ -523,8 +607,8 @@
<name>button-32</name>
<desc>VOR / Localizer</desc>
<binding>
<command>nasal</command>
<script>print("VOR/LOC")</script>
<command>goflight-mcp-button</command>
<button>vor</button>
</binding>
</event>
</PropertyList>

View file

@ -0,0 +1,137 @@
<PropertyList>
<!-- yes, the name is crazy. -->
<name>Microchip Technology Inc. Multi Media Keyboard Demo</name>
<debug-events type="bool">false</debug-events>
<!-- presents as a mouse and keyboard as well :/ -->
<device-number typ="int">0</device-number>
<nasal>
<open>
<![CDATA[
for (var i=0; i < 8; i+=1) {
var n = props.globals.getNode('/input/goflight/rp48/led[' ~ i ~ ']', 1);
n.setBoolValue(0);
}
]]>
</open>
</nasal>
<event>
<name>rel-dial-0</name>
<binding>
<command>property-adjust</command>
<property>/input/goflight/rp48/value[0]</property>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>2</dep></entry>
<entry><ind>3</ind><dep>4</dep></entry>
<entry><ind>4</ind><dep>8</dep></entry>
</interpolater>
</event>
<event>
<name>rel-dial-1</name>
<binding>
<command>property-adjust</command>
<property>/input/goflight/rp48/value[1]</property>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>2</dep></entry>
<entry><ind>3</ind><dep>4</dep></entry>
<entry><ind>4</ind><dep>8</dep></entry>
</interpolater>
</event>
<event>
<name>rel-dial-2</name>
<binding>
<command>property-adjust</command>
<property>/input/goflight/rp48/value[2]</property>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>2</dep></entry>
<entry><ind>3</ind><dep>4</dep></entry>
<entry><ind>4</ind><dep>8</dep></entry>
</interpolater>
</event>
<event>
<desc>Button</desc>
<name>button-1</name>
<binding>
<command>nasal</command>
<script>print('RP48 button');</script>
</binding>
</event>
<event>
<desc>Button</desc>
<name>button-2</name>
<binding>
<command>nasal</command>
<script>print('RP48 button 2');</script>
</binding>
</event>
<event>
<desc>Button</desc>
<name>button-3</name>
<binding>
<command>nasal</command>
<script>print('RP48 button 3');</script>
</binding>
</event>
<event>
<name>led-misc-0</name>
<setting>
<property>/input/goflight/rp48/led[0]</property>
</setting>
</event>
<event>
<name>led-misc-1</name>
<setting>
<property>/input/goflight/rp48/led[1]</property>
</setting>
</event>
<event>
<name>led-misc-2</name>
<setting>
<property>/input/goflight/rp48/led[2]</property>
</setting>
</event>
<event>
<name>led-misc-3</name>
<setting>
<property>/input/goflight/rp48/led[3]</property>
</setting>
</event>
<event>
<name>led-misc-4</name>
<setting>
<property>/input/goflight/rp48/led[4]</property>
</setting>
</event>
<event>
<name>led-misc-5</name>
<setting>
<property>/input/goflight/rp48/led[5]</property>
</setting>
</event>
</PropertyList>

View file

@ -0,0 +1,144 @@
<PropertyList>
<name>GoFlight GoFlight GF-T8 control module</name>
<debug-events type="bool">false</debug-events>
<nasal>
<open>
<![CDATA[
]]>
</open>
</nasal>
<event>
<name>led-misc-1</name>
<setting>
<value>1</value>
<condition>
<equals>
<property>/input/goflight/mfr/active</property>
<value>0</value>
</equals>
</condition>
</setting>
<setting>
<value>0</value>
<condition>
<not-equals>
<property>/input/goflight/mfr/active</property>
<value>0</value>
</not-equals>
</condition>
</setting>
</event>
<event>
<name>led-misc-2</name>
<setting>
<value>1</value>
<condition>
<equals>
<property>/input/goflight/mfr/active</property>
<value>1</value>
</equals>
</condition>
</setting>
<setting>
<value>0</value>
<condition> <command>property-swap</command>
<property>/input/goflight/mfr/standby-mhz</property>
<property>/input/goflight/mfr/selected-mhz</property>
<not-equals>
<property>/input/goflight/mfr/active</property>
<value>1</value>
</not-equals>
</condition>
</setting>
</event>
<event>
<name>led-misc-6</name>
<setting>
<property>/controls/flight/autospeedbrake</property>
</setting>
</event>
<event>
<name>led-misc-7</name>
<setting>
<property>/controls/gear/brake-parking</property>
</setting>
</event>
<event>
<name>display-brightness</name>
<setting>
<property>/input/goflight/tf8/brightness</property>
</setting>
</event>
<event>
<desc>Transfer Button</desc>
<name>button-1</name>
<binding>
</binding>
</event>
<event>
<desc>Nav 1 Button</desc>
<name>button-2</name>
<binding>
<command>nasal</command>
<script>print('TF8 button2')</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>print('TF8 button 2 down')</script>
</binding>
</mod-up>
</event>
<event>
<desc>Button 3</desc>
<name>button-3</name>
<binding>
<command>nasal</command>
<script>print('TF8 button 3')</script>
</binding>
</event>
<event>
<desc>Button 4</desc>
<name>button-4</name>
<binding>
<command>nasal</command>
<script>print('TF8 button 4 up')</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>print('TF8 button 4 down')</script>
</binding>
</mod-up>
</event>
<event>
<desc>Parking brake toggle</desc>
<name>button-8</name>
<binding>
<command>property-assign</command>
<property>/controls/gear/brake-parking</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/controls/gear/brake-parking</property>
<value>0</value>
</binding>
</mod-up>
</event>
</PropertyList>

View file

@ -0,0 +1,42 @@
<PropertyList>
<name>DISABLED Leo Bodnar BU0836A Interface</name>
<debug-events type="bool">false</debug-events>
<event>
<desc>Aileron</desc>
<name>abs-x-rotate</name>
<binding>
<command>property-scale</command>
<property>/controls/flight/aileron</property>
<offset>-1.0</offset>
<factor>-1.0</factor>
</binding>
</event>
<event>
<desc>Elevator</desc>
<name>abs-y-rotate</name>
<binding>
<command>property-scale</command>
<property>/controls/flight/elevator</property>
<offset>-1.0</offset>
<factor>-1.0</factor>
</binding>
</event>
<!--
<event>
<desc>Rudder</desc>
<name>abs-z-translate</name>
<binding>
<command>property-scale</command>
<property>/controls/flight/rudder</property>
<offset>-0.5</offset>
<factor>-2.0</factor>
<power type="double">1.0</power>
</binding>
</event>
-->
</PropertyList>

View file

@ -143,9 +143,9 @@
<command>nasal</command>
<script>
setprop("/sim/current-view/view-number", 0);
setprop("/sim/current-view/goal-pitch-offset-deg", getprop("/sim/view[0]/config/pitch-offset-deg"));
setprop("/sim/current-view/goal-pitch-offset-deg", getprop("/sim/view[0]/config/pitch-offset-deg") or 0);
setprop("/sim/current-view/goal-heading-offset-deg", 0.0);
#setprop("/sim/current-view/field-of-view", getprop("/sim/view/config/default-field-of-view-deg"));
#setprop("/sim/current-view/field-of-view", getprop("/sim/view/config/default-field-of-view-deg") or 60.0);
</script>
</binding>
</button>

Some files were not shown because too many files have changed in this diff Show more