1
0
Fork 0

Merge branch 'master' of git://gitorious.org/fg/fgdata

This commit is contained in:
BARANGER Emmanuel 2010-06-05 03:38:52 +02:00
commit c42a219ead
142 changed files with 3603 additions and 86414 deletions

View file

@ -7,7 +7,7 @@
<body> <body>
<h1>Local Weather Package - v0.5</h1> <h1>Local Weather Package - v0.61</h1>
<h2>1. Introduction</h2> <h2>1. Introduction</h2>
@ -15,13 +15,13 @@ The aim of a local weather system is to simulate weather phenomena tied to speci
This is in contrast to the current (v.2.0.0) weather system of Flightgear where weather changes affect the weather everywhere in the simulated world and are (with few exceptions) not tied to specific locations. In such a system, it is impossible to observe e.g. the approach of a rainfront while flying in sunshine.<p> This is in contrast to the current (v.2.0.0) weather system of Flightgear where weather changes affect the weather everywhere in the simulated world and are (with few exceptions) not tied to specific locations. In such a system, it is impossible to observe e.g. the approach of a rainfront while flying in sunshine.<p>
The local weather package ultimately aims to provide the functionality to simulate such local phenomena. In version 0.5, the package supplies various cloud placement algorithms, as well as local control over most major weather parameters (visibility, pressure, temperature, rain, snow, thermal lift...) through interpolation routines and event volumes. However, basically all features currently present can and will eventually be improved.<p> The local weather package ultimately aims to provide the functionality to simulate such local phenomena. In version 0.61, the package supplies various cloud placement algorithms, as well as local control over most major weather parameters (visibility, pressure, temperature, rain, snow, thermal lift...) through interpolation routines and event volumes. For long-range flights, it automatically provides transitions between different weather patterns. However, basically all features currently present can and will eventually be improved.<p>
As of version 0.5, the system does not contain dynamics (development of convective clouds, wind displacement of clouds...). Since wind and dynamics are closely related, any wind parameters can currently <i>not</i> be controlled from the local weather algorithms.<p> As of version 0.61, the system does not contain dynamics (development of convective clouds, wind displacement of clouds...). Since wind and dynamics are closely related, any wind parameters can currently <i>not</i> be controlled from the local weather algorithms.<p>
<h2>2. Installation</h2> <h2>2. Installation</h2>
The package needs to be unpacked in the Flightgear root directory. It writes content into the <i>Nasal/, gui/, gui/dialogs/, Shaders, Effects/</i>, and <i>Models/Weather/</i> subdirectories. The installation does not overwrite any of the default Flightgear files, but to be accessible from the menu, one must copy <i>gui/menubar.xml.alt</i> to the default <i>menubar.xml</i> or copy the last two lines of the environemnt menu calling <i>local_weather</i> and <i>local_weather_tiles</i> into the default file.<p> The package needs to be unpacked in the Flightgear root directory. It writes content into the <i>Nasal/, gui/, gui/dialogs/, Shaders, Effects/, Docs/</i>, and <i>Models/Weather/</i> subdirectories. The installation does not overwrite any of the default Flightgear files, but to be accessible from the menu, one must copy <i>gui/menubar.xml.alt</i> to the default <i>menubar.xml</i> or copy the last two lines of the environemnt menu calling <i>local_weather</i> and <i>local_weather_tiles</i> into the default file.<p>
This adds the items <i>Local Weather</i> and <i>Local weather tiles</i> to the <i>Environment</i> menu when Flightgear is up. The central functionality is contained in <i>local_weather.nas</i> which is loaded at startup and identifies itself with a message, but does not start any functions unless called from the GUI.<p> This adds the items <i>Local Weather</i> and <i>Local weather tiles</i> to the <i>Environment</i> menu when Flightgear is up. The central functionality is contained in <i>local_weather.nas</i> which is loaded at startup and identifies itself with a message, but does not start any functions unless called from the GUI.<p>
@ -29,7 +29,7 @@ This adds the items <i>Local Weather</i> and <i>Local weather tiles</i> to the <
The general rule is that the gui is not hardened against problematic user input, for example it will not reject meaningless input. It is recommended to watch the console, because some level of warnings and errors are passed to the console. Placement calls may sometimes take a significant time to execute especially for large numbers of clouds tied in a complicated way to the terrain. Placing 500 barrier clouds against a small barrier may take a minute to compute.<p> The general rule is that the gui is not hardened against problematic user input, for example it will not reject meaningless input. It is recommended to watch the console, because some level of warnings and errors are passed to the console. Placement calls may sometimes take a significant time to execute especially for large numbers of clouds tied in a complicated way to the terrain. Placing 500 barrier clouds against a small barrier may take a minute to compute.<p>
The first menu contains the low level cloud placement functions. Currently four options are supported: <i>Place a single cloud</i>, <i>Place a cloud streak</i>, <i>Start the convective system</i>, <i>Create barrier clouds</i> and <i>Place a cloud layer</i>.<p> The first menu contains the low level cloud placement functions. Its purpose is mainly for developing cloud patterns without having to resort to re-type the underlying Nasal code every time. Currently four options are supported: <i>Place a single cloud</i>, <i>Place a cloud streak</i>, <i>Start the convective system</i>, <i>Create barrier clouds</i> and <i>Place a cloud layer</i>.<p>
<center> <center>
<img src="menu1.jpg"> <img src="menu1.jpg">
@ -83,31 +83,47 @@ The picture illustrates the result of a layer generation call for Nimbostratus c
<h3>Tile placement</h3> <h3>Tile placement</h3>
The second menu is used to place complete weather tiles based on low-level calls. Currently it contains several demo tiles indicating what can be done. <p> The second menu is used to place complete weather tiles based on low-level calls. It is intended for the user to automatically create the various weather patterns during flight. <p>
<center> <center>
<img src="menu2.jpg"> <img src="menu2.jpg">
</center><p> </center><p>
The dropdown menu is used to select the type of weather tile to build. In addition, two parameters can be entered. The first is the tile orientation. Some tiles, most notably incoming fronts, have a direction along which the weather changes. The tiles are set up in such a way that fronts come from north, changing orientation rotates the whole tile to the specified direction. As soon as wind is implemented in the local weather system, the tile orientation will essentially also govern the wind direction (clearly, there is a relation between from where a front comes and the wind direction).<p> The dropdown menu is used to select the type of weather tile to build. The menu contains two groups of tiles - the first six are classified by airmass, whereas the last two are scenarios intended for soaring. In addition, two parameters can be entered. The first is the tile orientation. Some tiles, most notably incoming fronts, have a direction along which the weather changes. The tiles are set up in such a way that fronts come from north, changing orientation rotates the whole tile to the specified direction. As soon as wind is implemented in the local weather system, the tile orientation will essentially also govern the wind direction (clearly, there is a relation between from where a front comes and the wind direction). Currently, the functionality of tile orientation is there, but mostly untested and at the moment not particularly useful.<p>
The second parameter, the altitude offset, is as of now a provisorium. Cloud layer placement calls are specified for absolute altitudes and calibrated at sea level. As a result, layers are placed too low in mountainous terrain. Eventually, the system is to receive a terrain presampling function to determine just where exactly low cloud layers should be placed when a weather tile is set up. Until this is in place, the user must manually specify a suitable altitude offset for all cloud layers.<p> The second parameter, the altitude offset, is as of now a provisorium. Cloud layer placement calls are specified for absolute altitudes and calibrated at sea level. As a result, layers are placed too low in mountainous terrain. Eventually, the system is to receive a terrain presampling function to determine just where exactly low cloud layers should be placed when a weather tile is set up. Until this is in place, the user must manually specify a suitable altitude offset for all cloud layers.<p>
The following pictures show the results of tile setups 'Incoming rainfront' and 'Summer rain':<p> The dropdown menu for the tile selection mode controls the long-range behaviour of weather. It specifies according to what rules tiles are automatically generated once the aircraft reaches the border of the original tile. The option 'single tile' creates a single weather tile as specified without automatic generation of further tiles. The option 'repeat tile' creates new tiles of the same type as the originally selected tile. This does not mean that weather will be unchanged during flight, as both parameters like pressure, temperature and visibility as well as the positioning of cloud banks are randomized to some degree. In addition, each tile typically contains 2-5 different cloud scenarios, so five repeated generations of 'low-pressure-border' tiles may never result in the same arrangement of cloud layers. Necertheless, the option will keep weather conditions roughly the same. This is different with the (somewhat optimistically named) 'realistic weather'. This option allows transitions between different airmasses, thus one may select 'low-pressure-core' initially, but as the flight goes on, eventually a region of high pressure and clear skies may be reached. Currently this change between airmasses does not include transitions across fronts. Moreover, it does not cover arctic or tropical weather conditions - those will be covered in a future release. Note that 'realistic weather' does not work for the two soaring scenarios.<p>
The menu then contains four options. 'Terrain presampling' is currently not yet functional. 'Worker threads' is an option to distribute the work flow. Usually, the local weather package will compute a task till it is done before starting the next. Thus, creating a new weather tile may lead to a few seconds freeze, before Flightgear continues normally. With 'worker threads' selected, computations will be split across several frames. The advantage is that Flightgear stays responsive during loading and unloading of weather tiles, and in general the flight continues smoothly, albeit with reduced framerate. However, selecting this option does not guarantee that an operation is finished by the time another is beginning - thus there may be situations in which the loading of a new tile blocks unloading of an old one and so on, in essence leading to processes competing for access to the weather array, resulting in an extended period of very low framerates. Dependent on system performance, this may or may not be acceptable to the user. 'asymmetric range' is an experimental performance-improving option (see below). Finally, 'detailed clouds' will change the technique for generating Cumulus clouds from a multilayer model to multiple cloudlets filling a box. This improves the visual appearance of the clouds significantly, albeit at the expense of a (significant) loss of framerate. Rendering multiple tiles of dense Cumulus development with detailed clouds will quite possibly freeze even a powerful system. <p>
The following pictures show the results of tile setups 'Low-pressure-border' and 'High-pressure-border':<p>
<center> <center>
<img src="clouds-incoming-rainfront1.jpg"> <img src="carrier-ops08.jpg">
</center><p> </center><p>
<center> <center>
<img src="clouds-summer-rain.jpg"> <img src="clouds-lpb01.jpg">
</center><p> </center><p>
<h2>4. Cloud models</h2> <h2>4. Cloud models</h2>
The package contains a number of different cloud models, both static ones for Cirrus and Cirrocumulus clouds as well as rotated ones for Altocumulus, Cumulus, Cumulonimbus, Stratus and Nimbostratus cloudlet models. Neither the cloud textures, nor the models nor the transformations are perfected, and any aspect can be improved. Currently the clouds cannot reach the sophistication of the shader-based standard 3-d clouds of Flightgear, but there is no reason in principle why they should not eventually reach that level. The problem is finding a good balance between spending a lot of CPU time to make a single cloud model appear perfect, and the performance degradation that occurs if hundreds of clouds are placed in the sky. The basic aim is to provide realistic appearance for clouds from a standard view position (in cockpit looking forward), to retain acceptable appearance from other positions and to allow large cloud layers.<p> The package contains a number of different cloud models, both static ones for Cirrus and Cirrocumulus clouds as well as rotated ones for Altocumulus, Cirrostratus, Cumulus, Cumulonimbus, Stratus and Nimbostratus cloudlet models. Neither the cloud textures, nor the models nor the transformations are perfected, and any aspect can be improved. Currently the standard clouds cannot quite reach the sophistication of the shader-based standard 3-d clouds of Flightgear, but the detailed Cumulus clouds are on the verge of catching up. <p>
Currently all clouds which need to be rotated are treated in the Shaders using a view-axis based rotation by two angles. This generally looks okay from a normal flight position, but rapid change of the view axis (looking around), especially straight up or down, causes unrealistic cloud movement. Any static picture of clouds however is (almost) guaranteed to look fine.<p> <center>
<img src="clouds-detailed01.jpg">
</center><p>
These are rendered by a different technique: While the default Cumulus models consist of multiple layers rotated around the center of the model, the detailed Cumulus clouds consist of multiple (up to 24) individual cloudlets, rotating each around its own center, randomly distributed into a box. This not only improves the visual appearance, but also leads to a more realistic distribution of cloud sizes and shapes in the sky. In addition, when circling below the cloud (as done when soaring) the effect of the cloudlet rotation is less pronounced. The price to pay is that rendering detailed clouds costs about a factor 4 more performance, so they may not be suitable for all systems.<p>
The general problem is finding a good balance between spending a lot of CPU time to make a single cloud model appear perfect, and the performance degradation that occurs if hundreds of clouds are placed in the sky. The basic aim is to provide realistic appearance for clouds from a standard view position (in cockpit looking forward), to retain acceptable appearance from other positions and to allow large cloud layers.<p>
Currently all clouds which need to be rotated are treated in the Shaders using a view-axis based rotation by two angles. This generally looks okay from a normal flight position, but rapid change of the view axis (looking around), especially straight up or down, causes unrealistic cloud movement. Any static picture of clouds however is (almost) guaranteed to look fine. This means that shader effects need to be 'on' in order to see most of the clouds.<p>
<h2>5. Local weather parameters</h2> <h2>5. Local weather parameters</h2>
@ -141,16 +157,20 @@ Effect volumes are always specified between a minimum and a maximum altitude, an
where <i>geometry</i> is a flag (1: circular, 2: elliptical and 3: rectangular), <i>lat</i> and <i>lon</i> are the latitude and longitude, <i>r1</i> and <i>r2</i> are the two size parameters for the elliptic or rectangular shape (for the circular shape, only the first is used), <i>phi</i> is the rotation angle of the shape (not used for circular shape), <i>alt_low</i> and <i>alt_high</i> are the altitude boundaries, <i>vis, rain, snow, turb</i> and <i>lift</i> are weather parameters which are either set to the value they should assume, or to -1 if they are not to be used, or to -2 if a function instead of a parameter is to be used. Since thermal lift can be set to negative values in a sink, a separate flag is provided in this case.<p> where <i>geometry</i> is a flag (1: circular, 2: elliptical and 3: rectangular), <i>lat</i> and <i>lon</i> are the latitude and longitude, <i>r1</i> and <i>r2</i> are the two size parameters for the elliptic or rectangular shape (for the circular shape, only the first is used), <i>phi</i> is the rotation angle of the shape (not used for circular shape), <i>alt_low</i> and <i>alt_high</i> are the altitude boundaries, <i>vis, rain, snow, turb</i> and <i>lift</i> are weather parameters which are either set to the value they should assume, or to -1 if they are not to be used, or to -2 if a function instead of a parameter is to be used. Since thermal lift can be set to negative values in a sink, a separate flag is provided in this case.<p>
In version 0.61, thermal lift is implemented by function. There is no easy way to implement any weather parameter by function in an effect volume, as this requires some amount of Nasal coding.
<h2>6. Property tree structure</h2> <h2>6. Property tree structure</h2>
The internal state of the local weather system is found in the property tree under <i>local-weather/</i>. In this directory, various loop flags are found. They indicate the state of the main monitoring loops - they are set to 1 if a loop is running, setting them to zero terminates the loop.<p> The internal state of the local weather system is found in the property tree under <i>local-weather/</i>. In this directory, various loop flags are found. They indicate the state of the main monitoring loops - they are set to 1 if a loop is running, setting them to zero terminates the loop.<p>
The <i>local-weather</i> folder contains various subdirectories. <i>clouds/</i> contains the record of all visible weather phenomena (clouds, precipitation layers, lightning...) in a subdirectory <i>cloud[i]/</i>. The total number of all models placed is accessible as <i>local-weather/clouds/cloud-number</i>. Inside each <i>cloud/</i> subdirectory, there is a string <i>type</i> specifying the type of object and subdirectories <i>position/</i> and <i>orientation</i> which contain the position and spatial orientation of the model inside the scenery. Note that the orientation property is obsolete for clouds which are rotated by the shader.<p> The <i>local-weather</i> folder contains various subdirectories. <i>clouds/</i> contains the record of all visible weather phenomena (clouds, precipitation layers, lightning...) in a subdirectory <i>tile[j]/cloud[i]/</i>. The total number of all models placed is accessible as <i>local-weather/clouds/cloud-number</i>. Inside each <i>cloud/</i> subdirectory, there is a string <i>type</i> specifying the type of object and subdirectories <i>position/</i> and <i>orientation</i> which contain the position and spatial orientation of the model inside the scenery. Note that the orientation property is obsolete for clouds which are rotated by the shader.<p>
The <i>local-weather/effect-volumes/</i> subfolder contains the management of the effect volumes. It has the total count of specified effect volumes, along with the count of currently active volumes for each property. If volumes are defined, their properties are stored under <i>local-weather/effect-volumes/effect-volume[i]/</i>. In each folder, there are <i>position/</i> and <i>volume/</i> storing the spatial position and extent of the volume, as well as the <i>active-flag</i> which is set to 1 if the airplane is in the volume and the <i>geometry</i> flag which determines if the volume has circular, elliptical or rectangular shape. Finally, the <i>effects/</i> subfolder holds flags determining of a property is to be set when the volume is active and the corresponding values. On entry, the effect volumes also create a subfolder <i>restore/</i> in which the conditions as they were when the volume was entered are saved.<p> The <i>local-weather/effect-volumes/</i> subfolder contains the management of the effect volumes. It has the total count of specified effect volumes, along with the count of currently active volumes for each property. If volumes are defined, their properties are stored under <i>local-weather/effect-volumes/effect-volume[i]/</i>. In each folder, there are <i>position/</i> and <i>volume/</i> storing the spatial position and extent of the volume, as well as the <i>active-flag</i> which is set to 1 if the airplane is in the volume and the <i>geometry</i> flag which determines if the volume has circular, elliptical or rectangular shape. Finally, the <i>effects/</i> subfolder holds flags determining of a property is to be set when the volume is active and the corresponding values. On entry, the effect volumes also create a subfolder <i>restore/</i> in which the conditions as they were when the volume was entered are saved.<p>
<i>local-weather/interpolation/</i> holds all properties which are set by the interpolation system, as well as subfolders <i>station[i]/</i> in which the weather station information for the interpolation are found. Basically, here is the state of the weather as it is outside of effect volumes. Since parameters may be set to different values in effect volumes, the folder <i>local-weather/current/</i> contains the weather as the local weather system currently thinks it should be. Currently, weather is actually passed to the Flightgear environment system through several workarounds. In a clean C++ supported version, the parameters should be read from here.<p> <i>local-weather/interpolation/</i> holds all properties which are set by the interpolation system, as well as subfolders <i>station[i]/</i> in which the weather station information for the interpolation are found. Basically, here is the state of the weather as it is outside of effect volumes. Since parameters may be set to different values in effect volumes, the folder <i>local-weather/current/</i> contains the weather as the local weather system currently thinks it should be. Currently, weather is actually passed to the Flightgear environment system through several workarounds. In a clean C++ supported version, the parameters should be read from here.<p>
<i>local-weather/tiles</i> stores the information of the 9 managed weather tiles (the one the airplane is currently in, and the 8 surrounding it). By default each directory contains the tile center coordinates and a flag if it has been generated. Tiles are not generated unless a minimum distance to the tile center has been reached. Once this happens, the tile type is written as a code, and the cloud, interpolation and effect volume information corresponding to the tile is generated. <p>
<h2>7. Weather tile setup</h2> <h2>7. Weather tile setup</h2>
Examples for weather tile setup can be found in <i>Nasal/weather-tiles.nas</i>. Each tile is generated by a sequence of Nasal function calls to first set weather stations, then to draw the cloud layers, and effect volumes. Finally, all necessary loops must be started. It is a bit awkward to have to write in Nasal to customize the system, but I can't think of a reasonable GUI for the task, except marking every placement on a map which exceeds my coding skills a bit. The problem is that there is no real standard solution - every weather tile needs different calls, sometimes a large one generating many clouds, sometimes several smaller ones.<p> Examples for weather tile setup can be found in <i>Nasal/weather-tiles.nas</i>. Each tile is generated by a sequence of Nasal function calls to first set weather stations, then to draw the cloud layers, and effect volumes. Finally, all necessary loops must be started. It is a bit awkward to have to write in Nasal to customize the system, but I can't think of a reasonable GUI for the task, except marking every placement on a map which exceeds my coding skills a bit. The problem is that there is no real standard solution - every weather tile needs different calls, sometimes a large one generating many clouds, sometimes several smaller ones.<p>
@ -165,8 +185,23 @@ If the cloud layer has an orientation, then all placement coordinates should be
To make your own tile visible, an entry in the menu <i>gui/dialogs/local_weather_tiles.xml</i> needs to be created and the name needs to be added with a tile setup call to the function <i>set_tile</i> in <i>Nasal/local_weather.nas</i>. To make your own tile visible, an entry in the menu <i>gui/dialogs/local_weather_tiles.xml</i> needs to be created and the name needs to be added with a tile setup call to the function <i>set_tile</i> in <i>Nasal/local_weather.nas</i>.
<h2>8. Performance tuning</h2>
<h2>8. Known issues</h2> With default settings, the local weather package generates a 40x40 km weather tile when the aircraft is closer than 35 km to the tile center and unloads it when the aircraft is more than 37 km away. This means that the system can generate at most 4 tiles at once and clouds are visible for at least 15 km and up to 30 km (the latter number determined by fading in the shaders). However, rendering and managing multiple overcast cloud layers in a region of 80x80 km is a significant drain on performance. For older systems, a few things can be tried:<p>
* the menu option 'asymmetric range' decreases loading and unloading ranges in a 45 degree sector behind the aircraft. This means that in straight flight, less tiles will be loaded at the same time, as tiles in the rear are unloaded more quickly. The option is currently experimental.<p>
* a further reduction in the amount of simultaneously generated tiles can be achieved by changing the ranges. These are exposed in the property tree as <i>local-weather/config/distance-to-load-tile-m</i> and <i>local-weather/config/distance-to-remove-tile-m</i>. Note that the removal range <b>must</b> be larger than the loading range - otherwise just generated tiles will be immediately unloaded! Ranges below 20 km will guarantee that only one tile is loaded at a time, but will create empty spots when no tile is loaded. A range above 28 km will guarantee that the aircraft never flies in an empty tile, but empty sky in front will be visible. Finally, ranges above 56 km guarantee that all 9 tiles (a region of 120x120 km) are managed at all times - but will most likely cause a severe drop in framerate for most scenarios.<p>
* if this does not help, try avoiding scenarios with large cloud count. As a rule, low pressure areas have high cloud count, high pressure areas have a low cloud count. <p>
* a drastic solution is to set the visual ranges lower. Currently, cloud models are set to be visible up to 30 km. Changing the visibility range in the range animation of all cloud model xml wrappers will improve performance accordingly. To achieve a nice fading into the background instead of a sudden disappearance, it is recommended to adjust the visibility range in the shaders accordingly. It would probably be good to expose the visual range as a property, but currently it's not yet done, as passing a property to the shader requires Flightgear CVS and cannot be done in 2.0.0.<p>
Performance for overcast layers currently is a limiting issue and there are a few ideas around how to improve it - dependent if these work or not, future releases may work better.<p>
* a different issue is a characteristic small pause every 3 seconds. This is caused by the interpolation loop resetting the weather parameters. Currently, a computationally expensive workaround is needed to do so, causing the problem. Work on a better environment controller is on the way, however until that modification to the core Flightgear code is implemented, the best solution is to set the loop time in <i>Nasal/local-weather.nas</i> to a larger value. <p>
<h2>9. Known issues</h2>
* The local weather system does not mix well with the standard weather system. 3d cloud layers can be placed in the absence of effect volumes, but any effect volume causing precipitation will let the layer behave in a strange way. Likewise, 2d cloud layers can be placed, but may or may not lead to strange rendering artefacts. Local weather, as long as interpolation and effect volumes are running, will in general overwrite all other settings - bother real weather METAR and user-specified settings from the menu. The results of mixing standard and local weather settings are unpredictable, and may not lead to the desired results.<p> * The local weather system does not mix well with the standard weather system. 3d cloud layers can be placed in the absence of effect volumes, but any effect volume causing precipitation will let the layer behave in a strange way. Likewise, 2d cloud layers can be placed, but may or may not lead to strange rendering artefacts. Local weather, as long as interpolation and effect volumes are running, will in general overwrite all other settings - bother real weather METAR and user-specified settings from the menu. The results of mixing standard and local weather settings are unpredictable, and may not lead to the desired results.<p>
@ -174,8 +209,18 @@ To make your own tile visible, an entry in the menu <i>gui/dialogs/local_weather
* Rain and snow may not start properly. For me, rain is only generated when I switch 'Shader effects' on and off in the menu on startup, otherwise neither moving the menu slider nor entering an effect volume generate rain. This seems to be a bug of some Flightgear versions, not of the local weather system.<p> * Rain and snow may not start properly. For me, rain is only generated when I switch 'Shader effects' on and off in the menu on startup, otherwise neither moving the menu slider nor entering an effect volume generate rain. This seems to be a bug of some Flightgear versions, not of the local weather system.<p>
* Especially with multiple overcast layers, loading and unloading weather tiles may take a long time / cause severe drops in framerate. Please refer to performance tuning to solve such problems. In general, overcast layers do require a system on the high end of the performance scale to render properly.<p>
Thorsten Renk, April 2010 * The local weather package is able to occasionally trigger errors like 'Warning:: Picked up error in TriangleIntersect'. These seem to be a problem in the core Flightgear code - the package does nothing but placing normal (rather simple) AC3D models into the scenery.<p>
* The thermals in the soaring scenarios need a CVS patch to work.<p>
<h2>10. Credits</h2>
The model of a thermal has been developed by Patrice Poly. The shader code used to transform clouds is heavily based on prior work by Stuart Buchanan.<p>
Thorsten Renk, May 2010
</body> </body>

BIN
Docs/carrier-ops08.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
Docs/clouds-detailed01.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
Docs/clouds-lpb01.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -1,68 +1,58 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<PropertyList> <PropertyList>
<name>Effects/clouds-thin</name> <name>Effects/clouds-thin</name>
<parameters> <parameters>
<texture n ="0"> <texture n ="0">
</texture> </texture>
</parameters> </parameters>
<technique n="10"> <technique n="10">
<predicate> <predicate>
<and> <and>
<property>/sim/rendering/shader-effects</property> <property>/sim/rendering/shader-effects</property>
<less-equal> <less-equal>
<value type="float">1.0</value> <value type="float">1.0</value>
<shader-language/> <shader-language/>
</less-equal> </less-equal>
</and> </and>
</predicate> </predicate>
<pass n="0"> <pass n="0">
<!-- This is apparently not used, so maybe we'll blow it way soon. --> <!-- This is apparently not used, so maybe we'll blow it way soon. -->
<lighting>true</lighting> <lighting>true</lighting>
<material> <material>
<ambient type="vec4d">0.5 0.5 0.5 1.0</ambient> <ambient type="vec4d">0.5 0.5 0.5 1.0</ambient>
<diffuse type="vec4d">0.5 0.5 0.5 1.0</diffuse> <diffuse type="vec4d">0.5 0.5 0.5 1.0</diffuse>
<color-mode>off</color-mode> <color-mode>off</color-mode>
</material> </material>
<alpha-test> <alpha-test>
<comparison>greater</comparison> <comparison>greater</comparison>
<reference type="float">0.01</reference> <reference type="float">0.01</reference>
</alpha-test> </alpha-test>
<shade-model>smooth</shade-model> <shade-model>smooth</shade-model>
<blend> <blend>
<source>src-alpha</source> <source>src-alpha</source>
<destination>one-minus-src-alpha</destination> <destination>one-minus-src-alpha</destination>
</blend> </blend>
<depth> <depth>
<write-mask>false</write-mask> <write-mask>false</write-mask>
</depth> </depth>
<render-bin> <render-bin>
<bin-number>10</bin-number> <bin-number>10</bin-number>
<bin-name>DepthSortedBin</bin-name> <bin-name>DepthSortedBin</bin-name>
</render-bin> </render-bin>
<texture-unit> <texture-unit>
<unit>0</unit> <unit>0</unit>
<type> <type><use>texture[0]/type</use></type>
<use>texture[0]/type</use> <image><use>texture[0]/image</use></image>
</type> <filter><use>texture[0]/filter</use></filter>
<image> <wrap-s><use>texture[0]/wrap-s</use></wrap-s>
<use>texture[0]/image</use> <wrap-t><use>texture[0]/wrap-t</use></wrap-t>
</image> <!--<wrap-s>clamp</wrap-s>
<filter>
<use>texture[0]/filter</use>
</filter>
<wrap-s>
<use>texture[0]/wrap-s</use>
</wrap-s>
<wrap-t>
<use>texture[0]/wrap-t</use>
</wrap-t>
<!--<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>--> <wrap-t>clamp</wrap-t>-->
</texture-unit> </texture-unit>
<program> <program>
<vertex-shader>Shaders/clouds-thin.vert</vertex-shader> <vertex-shader>Shaders/clouds-thin.vert</vertex-shader>
<fragment-shader>Shaders/clouds-thin.frag</fragment-shader> <fragment-shader>Shaders/clouds-thin.frag</fragment-shader>
<!--<attribute> <!--<attribute>
<name>usrAttr3</name> <name>usrAttr3</name>
<index>10</index> <index>10</index>
</attribute> </attribute>
@ -70,13 +60,13 @@
<name>usrAttr4</name> <name>usrAttr4</name>
<index>11</index> <index>11</index>
</attribute>--> </attribute>-->
</program> </program>
<uniform> <uniform>
<name>baseTexture</name> <name>baseTexture</name>
<type>sampler-2d</type> <type>sampler-2d</type>
<value type="int">0</value> <value type="int">0</value>
</uniform> </uniform>
<vertex-program-two-side>true</vertex-program-two-side> <vertex-program-two-side>true</vertex-program-two-side>
</pass> </pass>
</technique> </technique>
</PropertyList> </PropertyList>

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/clouds-layered</name>
<parameters>
<texture n ="0">
</texture>
</parameters>
<technique n="10">
<predicate>
<and>
<property>/sim/rendering/shader-effects</property>
<less-equal>
<value type="float">1.0</value>
<shader-language/>
</less-equal>
</and>
</predicate>
<pass n="0">
<!-- This is apparently not used, so maybe we'll blow it way soon. -->
<lighting>true</lighting>
<material>
<ambient type="vec4d">0.5 0.5 0.5 1.0</ambient>
<diffuse type="vec4d">0.5 0.5 0.5 1.0</diffuse>
<color-mode>off</color-mode>
</material>
<alpha-test>
<comparison>greater</comparison>
<reference type="float">0.01</reference>
</alpha-test>
<shade-model>smooth</shade-model>
<blend>
<source>src-alpha</source>
<destination>one-minus-src-alpha</destination>
</blend>
<depth>
<write-mask>false</write-mask>
</depth>
<render-bin>
<bin-number>10</bin-number>
<bin-name>DepthSortedBin</bin-name>
</render-bin>
<texture-unit>
<unit>0</unit>
<type><use>texture[0]/type</use></type>
<image><use>texture[0]/image</use></image>
<filter><use>texture[0]/filter</use></filter>
<wrap-s><use>texture[0]/wrap-s</use></wrap-s>
<wrap-t><use>texture[0]/wrap-t</use></wrap-t>
<!--<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>-->
</texture-unit>
<program>
<vertex-shader>Shaders/clouds-thinlayer.vert</vertex-shader>
<fragment-shader>Shaders/clouds-thinlayer.frag</fragment-shader>
</program>
<uniform>
<name>baseTexture</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<vertex-program-two-side>true</vertex-program-two-side>
</pass>
</technique>
</PropertyList>

81
Effects/test.eff Normal file
View file

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/test</name>
<parameters>
<texture n ="0">
</texture>
</parameters>
<technique n="10">
<predicate>
<and>
<property>/sim/rendering/shader-effects</property>
<less-equal>
<value type="float">1.0</value>
<shader-language/>
</less-equal>
</and>
</predicate>
<pass n="0">
<!-- This is apparently not used, so maybe we'll blow it way soon. -->
<lighting>true</lighting>
<material>
<ambient type="vec4d">0.5 0.5 0.5 1.0</ambient>
<diffuse type="vec4d">0.5 0.5 0.5 1.0</diffuse>
<color-mode>off</color-mode>
</material>
<alpha-test>
<comparison>greater</comparison>
<reference type="float">0.01</reference>
</alpha-test>
<shade-model>smooth</shade-model>
<blend>
<source>src-alpha</source>
<destination>one-minus-src-alpha</destination>
</blend>
<depth>
<write-mask>false</write-mask>
</depth>
<render-bin>
<bin-number>10</bin-number>
<bin-name>DepthSortedBin</bin-name>
</render-bin>
<texture-unit>
<unit>0</unit>
<type><use>texture[0]/type</use></type>
<image><use>texture[0]/image</use></image>
<filter><use>texture[0]/filter</use></filter>
<wrap-s><use>texture[0]/wrap-s</use></wrap-s>
<wrap-t><use>texture[0]/wrap-t</use></wrap-t>
<!--<wrap-s>clamp</wrap-s>
<wrap-t>clamp</wrap-t>-->
</texture-unit>
<!--<attribute>
<mypars type="vec3">0 0 0</mypars>
<value type="int">10</value>
</attribute>-->
<program>
<vertex-shader>Shaders/test.vert</vertex-shader>
<fragment-shader>Shaders/test.frag</fragment-shader>
<!--<attribute>
<name>usrAttr3</name>
<index>10</index>
</attribute>
<attribute>
<name>usrAttr4</name>
<index>11</index>
</attribute>-->
</program>
<uniform>
<name>baseTexture</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>shading</name>
<type>float</type>
<value type="float">0.5</value>
</uniform>
<vertex-program-two-side>true</vertex-program-two-side>
</pass>
</technique>
</PropertyList>

View file

@ -1,51 +0,0 @@
#disable cas when engines running- otherwise we are overflooded with error messages in the console
call_casdisable = func {
if ( getprop("/rotors/main/rpm")> 80.0)
{
setprop("/controls/flight/fcs/cas-enabled", 0);
} else {
setprop("/controls/flight/fcs/cas-enabled", 1.0);
}
#if (RUN2 ==1) {
# setprop("/controls/flight/fcs/cas-enabled", 0);
# } else {
# setprop("/controls/flight/fcs/cas-enabled", 1.0);
# }
settimer(call_casdisable, 0.2);
}
init = func {
settimer(call_casdisable, 0.0);
}
init();

View file

@ -1,571 +0,0 @@
#
# Flight Control System by Tatsuhiro Nishioka
# $Id: fcs.nas,v 1.11 2008/08/28 02:41:04 tat Exp $
#
#This one simulates a jaw SAS
var FCSFilter = {
new : func(input_path, output_path) {
var obj = { parents : [FCSFilter],
input_path : input_path,
output_path : output_path };
obj.axis_conv = {'roll' : 'aileron', 'pitch' : 'elevator', 'yaw' : 'rudder' };
obj.body_conv = {'roll' : 'v', 'pitch' : 'u' };
obj.last_body_fps = {'roll' : 0.0, 'pitch' : 0.0 };
obj.last_pos = {'roll' : 0.0, 'pitch' : 0.0, 'yaw' : 0.0};
return obj;
},
# read input command for a given axis
read : func(axis) {
if (me.input_path == nil or me.input_path == "") {
return getprop("/controls/flight/" ~ me.axis_conv[axis]);
} else {
var value = getprop(me.input_path ~ "/" ~ axis);
value = int(value * 1000) / 1000.0;
}
},
# write output command for a given axis
# this will be the output of an next command filter (like SAS)
write : func(axis, value) {
if (me.output_path == nil or me.output_path == '') {
setprop("/controls/flight/fcs/" ~ axis, me.limit(value, 1.0));
} else {
setprop(me.output_path ~ "/" ~ axis, me.limit(value, 1.0));
}
},
toggleFilterStatus : func(name) {
var messages = ["disengaged", "engaged"];
var path = "/controls/flight/fcs/" ~ name ~ "-enabled";
var status = getprop(path);
setprop(path, 1 - status);
screen.log.write(name ~ " " ~ messages[1 - status]);
},
getStatus : func(name) {
var path = "/controls/flight/fcs/" ~ name ~ "-enabled";
return getprop(path);
},
limit : func(value, range) {
if (value > range) {
return range;
} elsif (value < -range) {
return - range;
}
return value;
},
max : func(val1, val2) {
return (val1 > val2) ? val1 : val2;
},
min : func(val1, val2) {
return (val1 > val2) ? val2 : val1;
},
calcCounterBodyFPS : func(axis, input, offset_deg) {
var position = getprop("/orientation/" ~ axis ~ "-deg");
var body_fps = 0;
var last_body_fps = me.last_body_fps[axis];
var reaction_gain = 0;
var heading = getprop("/orientation/heading-deg");
var wind_speed_fps = getprop("/environment/wind-speed-kt") * 1.6878099;
var wind_direction = getprop("/environment/wind-from-heading-deg");
var wind_direction -= heading;
var rate = getprop("/orientation/" ~ axis ~ "-rate-degps");
var gear_pos = getprop("/gear/gear[0]/compression-norm") + getprop("/gear/gear[1]/compression-norm");
var counter_fps = 0;
var fps_axis = me.body_conv[axis]; # convert from {roll, pitch} to {u, v}
var target_pos = offset_deg;
var brake_deg = 0;
body_fps = getprop("/velocities/" ~ fps_axis ~ "Body-fps");
if (axis == 'roll') {
var wind_fps = math.sin(wind_direction / 180 * math.pi) * wind_speed_fps;
} else {
var wind_fps = math.cos(wind_direction / 180 * math.pi) * wind_speed_fps;
}
var brake_freq = getprop("/controls/flight/fcs/gains/afcs/fps-" ~ axis ~ "-brake-freq");
var brake_gain = getprop("/controls/flight/fcs/gains/afcs/fps-brake-gain-" ~ axis);
body_fps -= wind_fps;
var dfps = body_fps - me.last_body_fps[axis];
var fps_coeff = getprop("/controls/flight/fcs/gains/afcs/fps-" ~ axis ~ "-coeff");
target_pos -= int(body_fps * 100) / 100 * fps_coeff;
if (axis == 'roll' and gear_pos > 0.0 and position > 0) {
target_pos -= position * gear_pos / 5;
}
reaction_gain = getprop("/controls/flight/fcs/gains/afcs/fps-reaction-gain-" ~ axis);
var brake_sensitivity = (axis == 'roll') ? 1 : 1;
if (math.abs(position + rate / brake_freq * brake_sensitivity) > math.abs(target_pos)) {
if (math.abs(dfps) > 1) {
dfps = 1;
}
var error_deg = target_pos - position;
brake_deg = (error_deg - rate / brake_freq) * math.abs(dfps * 10) * brake_gain;
if (target_pos > 0) {
brake_deg = me.min(brake_deg, 0);
} else {
brake_deg = me.max(brake_deg, 0);
}
}
counter_fps = me.limit((target_pos + brake_deg) * reaction_gain, 1.0);
setprop("/controls/flight/fcs/afcs/ah-" ~ fps_axis ~ "body-fps", body_fps);
setprop("/controls/flight/fcs/afcs/ah-" ~ fps_axis ~ "body-wind-fps", wind_fps);
setprop("/controls/flight/fcs/afcs/ah-" ~ axis ~ "-target-deg", target_pos);
setprop("/controls/flight/fcs/afcs/ah-" ~ axis ~ "-rate", rate);
setprop("/controls/flight/fcs/afcs/ah-delta-" ~ fps_axis ~ "body-fps", dfps);
setprop("/controls/flight/fcs/afcs/ah-" ~ axis ~ "-brake-deg", brake_deg);
setprop("/controls/flight/fcs/afcs/counter-fps-" ~ axis, counter_fps);
me.last_pos[axis] = position;
me.last_body_fps[axis] = body_fps;
return me.limit(counter_fps + input * 0.2, 1.0);
},
};
#
# AFCS : Automatic Flight Control System
#
var AFCS = {
new : func(input_path, output_path) {
var obj = FCSFilter.new(input_path, output_path);
obj.parents = [FCSFilter, AFCS];
setprop("/controls/flight/fcs/auto-hover-enabled", 0);
setprop("/controls/flight/fcs/gains/afcs/fps-brake-gain-pitch", 1.8);
setprop("/controls/flight/fcs/gains/afcs/fps-brake-gain-roll", 0.8);
setprop("/controls/flight/fcs/gains/afcs/fps-pitch-brake-freq", 3);
setprop("/controls/flight/fcs/gains/afcs/fps-pitch-coeff", -0.95);
setprop("/controls/flight/fcs/gains/afcs/fps-pitch-offset-deg", 0.9);
setprop("/controls/flight/fcs/gains/afcs/fps-reaction-gain-pitch", -0.8);
setprop("/controls/flight/fcs/gains/afcs/fps-reaction-gain-roll", 0.3436);
setprop("/controls/flight/fcs/gains/afcs/fps-roll-brake-freq", 8);
setprop("/controls/flight/fcs/gains/afcs/fps-roll-coeff", 0.8);
setprop("/controls/flight/fcs/gains/afcs/fps-roll-offset-deg", -0.8);
return obj;
},
toggleAutoHover : func() {
me.toggleFilterStatus("auto-hover");
},
toggleAirSpeedLock : func() {
me.toggleFilterStatus("air-speed-lock");
},
toggleHeadingLock : func() {
me.toggleFilterStatus("heading-lock");
},
toggleAltitudeLock : func() {
me.toggleFilterStatus("altitude-lock");
},
#
# auto hover : locks vBody_fps and uBody_fps regardless of wind speed/direction
#
autoHover : func(axis, input) {
if (axis == 'yaw') {
return input;
} else {
var offset_deg = getprop("/controls/flight/fcs/gains/afcs/fps-" ~ axis ~ "-offset-deg");
return me.calcCounterBodyFPS(axis, input, offset_deg);
}
},
altitudeLock : func(axis, input) {
# not implemented yet
return input;
},
headingLock : func(axis, input) {
# not implementet yet
return input;
},
apply : func(axis) {
var input = me.read(axis);
var hover_status = me.getStatus("auto-hover");
if (hover_status == 0) {
me.write(axis, input);
return;
}
me.write(axis, me.autoHover(axis, input));
}
};
#
# SAS : Stability Augmentation System - a rate damper
#
var SAS = {
#
# new
# initial_gains: hash of initial gains for rate damping
# sensitivities: hash of minimum rates (deg/sec) that enables rate damper
# authority_limit: shows how much SAS can take over control
# 0 means no stability control, 1.0 means SAS fully takes over pilot control
# input_path: is a base path to input axis; nil for using raw input from KB/JS
# output_path: is a base path to output axis; nis for using /controls/flight/fcs
#
# with input_path / output_path, you can connect SAS, CAS, and more control filters
#
new : func(initial_gains, sensitivities, authority_limit, input_path, output_path) {
var obj = FCSFilter.new(input_path, output_path);
obj.parents = [FCSFilter, SAS];
obj.authority_limit = authority_limit;
obj.sensitivities = sensitivities;
obj.initial_gains = initial_gains;
props.globals.getNode("/controls/flight/fcs/gains/sas", 1).setValues(obj.initial_gains);
setprop("/controls/flight/fcs/sas-enabled", 1);
return obj;
},
toggleEnable : func() {
me.toggleFilterStatus("sas");
},
#
# calcGain - get gain for each axis based on air speed and dynamic pressure
# axis: one of 'roll', 'pitch', or 'yaw'
#
calcGain : func(axis) {
var mach = getprop("/velocities/mach");
var initial_gain = getprop("/controls/flight/fcs/gains/sas/" ~ axis);
var gain = initial_gain - 0.1 * mach * mach;
if (math.abs(gain) < math.abs(initial_gain) * 0.01 or gain * initial_gain < 0) {
gain = initial_gain * 0.01;
}
return gain;
},
calcAuthorityLimit : func() {
var mach = getprop("/velocities/mach");
var min_mach = 0.038;
var limit = me.authority_limit;
if (math.abs(mach < min_mach)) {
limit += (min_mach - math.abs(mach)) / min_mach * (1 - me.authority_limit) * 0.95;
}
setprop("/controls/flight/fcs/gains/sas/authority-limit", limit);
return limit;
},
#
# apply - apply SAS damper to a given input axis
# axis: one of 'roll', 'pitch', or 'yaw'
#
apply : func(axis) {
var status = me.getStatus("sas");
var input = me.read(axis);
if (status == 0) {
me.write(axis, input);
return;
}
var mach = getprop("/velocities/mach");
var value = 0;
var rate = getprop("/orientation/" ~ axis ~ "-rate-degps");
var gain = me.calcGain(axis);
var limit = me.calcAuthorityLimit();
if (math.abs(rate) >= me.sensitivities[axis]) {
value = - gain * rate;
if (value > limit) {
value = limit;
} elsif (value < - limit) {
value = - limit;
}
}
me.write(axis, value + input);
}
};
#
# CAS : Control Augmentation System - makes your aircraft more meneuverable
#
var CAS = {
new : func(input_gains, output_gains, sensitivities, input_path, output_path) {
var obj = FCSFilter.new(input_path, output_path);
obj.parents = [FCSFilter, CAS];
obj.sensitivities = sensitivities;
obj.input_gains = input_gains;
obj.output_gains = output_gains;
props.globals.getNode("/controls/flight/fcs/gains/cas/input", 1).setValues(obj.input_gains);
props.globals.getNode("/controls/flight/fcs/gains/cas/output", 1).setValues(obj.output_gains);
setprop("/autopilot/locks/altitude", '');
setprop("/autopilot/locks/heading", '');
setprop("/controls/flight/fcs/cas-enabled", 1);
return obj;
},
calcRollRateAdjustment : func {
var position = getprop("/orientation/roll-deg");
return math.abs(math.sin(position / 180 * math.pi)) / 6;
},
calcSideSlipAdjustment : func {
var mach = getprop("/velocities/mach");
var slip = getprop("/orientation/side-slip-deg");
if (mach < 0.015) { # works only if air speed > 10kt
slip = 0;
}
var anti_slip_gain = getprop("/controls/flight/fcs/gains/cas/output/anti-side-slip-gain");
var roll_deg = getprop("/orientation/roll-deg");
var gain_adjuster = me.min(math.abs(mach) / 0.060, 1) * me.limit(0.2 + math.sqrt(math.abs(roll_deg)/10), 3);
anti_slip_gain *= gain_adjuster;
setprop("/controls/flight/fcs/cas/anti-side-slip", slip * anti_slip_gain);
return slip * anti_slip_gain;
},
# FIXME: command for CAS is just a temporal one
calcCommand: func (axis, input) {
var output = 0;
var mach = getprop("/velocities/mach");
var input_gain = me.calcGain(axis);
var output_gain = getprop("/controls/flight/fcs/gains/cas/output/" ~ axis);
var target_rate = input * input_gain;
var rate = getprop("/orientation/" ~ axis ~ "-rate-degps");
var drate = target_rate - rate;
var locks = {'pitch' : getprop("/autopilot/locks/altitude"),
'roll' : getprop("/autopilot/locks/heading")};
setprop("/controls/flight/fcs/cas/target_" ~ axis ~ "rate", target_rate);
setprop("/controls/flight/fcs/cas/delta_" ~ axis, drate);
if (axis == 'roll' or axis == 'pitch') {
if (math.abs(input > 0.7) or locks[axis] != '') {
output = drate * output_gain;
} else {
output = me.calcAttitudeCommand(axis);
}
if (axis == 'roll' and math.abs(mach) < 0.035) {
# FIXME: I don't know if OH-1 has this one
output += me.calcCounterBodyFPS(axis, input, -0.8);
}
} elsif (axis == 'yaw') {
output = drate * output_gain + me.calcSideSlipAdjustment();
} else {
output = drate * output_gain;
}
return output;
},
toggleEnable : func() {
me.toggleFilterStatus("cas");
},
calcAttitudeCommand : func(axis) {
var input_gain = getprop("/controls/flight/fcs/gains/cas/input/attitude-" ~ axis);
var output_gain = getprop("/controls/flight/fcs/gains/cas/output/" ~ axis);
var brake_freq = getprop("/controls/flight/fcs/gains/cas/output/" ~ axis ~ "-brake-freq");
var brake_gain = getprop("/controls/flight/fcs/gains/cas/output/" ~ axis ~ "-brake");
var trim = getprop("/controls/flight/" ~ me.axis_conv[axis] ~ "-trim");
var current_deg = getprop("/orientation/" ~ axis ~ "-deg");
var rate = getprop("/orientation/" ~ axis ~ "-rate-degps");
var target_deg = (me.read(axis) + trim) * input_gain;
var command_deg = 0;
if (target_deg != 0) {
command_deg = (0.094 * math.ln(math.abs(target_deg)) + 0.53) * target_deg;
}
var error_deg = command_deg - current_deg;
var brake_deg = (error_deg - rate / brake_freq) * math.abs(error_deg) * brake_gain;
if (command_deg > 0) {
brake_deg = me.min(brake_deg, 0);
} else {
brake_deg = me.max(brake_deg, 0);
}
var monitor_prefix = me.output_path ~ "/" ~ axis;
setprop(monitor_prefix ~ "-target_deg", target_deg);
setprop(monitor_prefix ~ "-error_deg", error_deg);
setprop(monitor_prefix ~ "-brake_deg", brake_deg);
setprop(monitor_prefix ~ "-deg", current_deg);
setprop(monitor_prefix ~ "-rate", -rate);
return (error_deg + brake_deg) * output_gain;
},
# FixMe: gain should be calculated using both speed and dynamic pressure
calcGain : func(axis) {
var mach = getprop("/velocities/mach");
var input_gain = getprop("/controls/flight/fcs/gains/cas/input/" ~ axis);
var gain = input_gain;
if (axis == 'pitch') {
gain += 0.1 * mach * mach;
} elsif (axis== 'yaw') {
gain *= ((1 - mach) * (1 - mach));
}
if (gain * input_gain < 0.0 ) {
gain = 0;
}
return gain;
},
apply : func(axis) {
var input = me.read(axis);
var status = me.getStatus("cas");
var cas_command = 0;
# FIXME : hmm, a bit nasty. CAS should be enabled even with auto-hover....
if (status == 0 or (me.getStatus("auto-hover") == 1 and axis != 'yaw')) {
me.write(axis, input);
return;
}
cas_command = me.calcCommand(axis, input);
me.write(axis, cas_command);
}
};
#
# Tail hstab, "stabilator," for stabilize the nose
#
var Stabilator = {
new : func() {
var obj = { parents : [Stabilator] };
setprop("/controls/flight/fcs/gains/stabilator", -1.8);
setprop("/controls/flight/fcs/auto-stabilator", 1);
# 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160, 170, 180, .....
me.gainTable = [-0.9, -0.8, 0.1, -0.5, 0.0, 0.7, 0.8, 0.9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9, 0.8, 0.6, 0.4, 0.2, -1.0];
return obj;
},
toggleManual : func {
var status = getprop("/controls/flight/fcs/auto-stabilator");
getprop("/controls/flight/fcs/auto-stabilator", 1 - status);
},
apply : func(delta) {
setprop("/controls/flight/fcs/auto-stabilator", 0);
var value = getprop("/controls/flight/fcs/stabilator");
getprop("/controls/flight/fcs/stabilator", value + delta);
},
calcPosition : func() {
var speed = getprop("/velocities/mach") / 0.001497219; # in knot
var index = int(math.abs(speed) / 10);
if (index >= size(me.gainTable) - 1) {
index = size(me.gainTable) - 2;
}
var mod = math.mod(int(math.abs(speed)), 10);
var position = me.gainTable[index] * ((10 - mod) / 10) + me.gainTable[index-1] * (mod) / 10;
if (speed < -20) {
position = - position;
}
return position;
},
update : func() {
var status = getprop("/controls/flight/fcs/auto-stabilator");
if (status == 0) {
return;
}
var gain = getprop("/controls/flight/fcs/gains/stabilator");
var mach = getprop("/velocities/mach");
var throttle = getprop("/controls/flight/throttle");
var stabilator_norm = 0;
stabilator_norm = me.calcPosition();
setprop("/controls/flight/fcs/stabilator", stabilator_norm);
}
};
var TailRotorCollective = {
new : func(minimum=0.10, maximum=1.0, low_limit=0.00011, high_limit=0.0035) {
var obj = FCSFilter.new("/controls/engines/engine[1]", "/controls/flight/fcs/tail-rotor");
obj.parents = [FCSFilter, TailRotorCollective];
obj.adjuster = 0.0;
setprop("/controls/flight/fcs/tail-rotor/src-minimum", minimum);
setprop("/controls/flight/fcs/tail-rotor/src-maximum", maximum);
setprop("/controls/flight/fcs/tail-rotor/low-limit", low_limit);
setprop("/controls/flight/fcs/tail-rotor/high-limit", high_limit);
setprop("/controls/flight/fcs/gains/tail-rotor/error-adjuster-gain", -0.5);
return obj;
},
update : func() {
var throttle = me.read("throttle");
var pedal_pos_deg = getprop("/controls/flight/fcs/yaw");
var cas_input = cas.read('yaw');
var cas_input_gain = cas.calcGain('yaw');
var target_rate = cas_input * cas_input_gain;
var rate = getprop("/orientation/yaw-rate-degps");
var error_rate = getprop("/controls/flight/fcs/cas/delta_yaw");
var error_adjuster_gain = getprop("/controls/flight/fcs/gains/tail-rotor/error-adjuster-gain");
var minimum = getprop("/controls/flight/fcs/tail-rotor/src-minimum");
var maximum = getprop("/controls/flight/fcs/tail-rotor/src-maximum");
var low_limit = getprop("/controls/flight/fcs/tail-rotor/low-limit");
var high_limit = getprop("/controls/flight/fcs/tail-rotor/high-limit");
var output = 0;
var range = maximum - minimum;
if (throttle < minimum) {
output = low_limit;
} elsif (throttle > maximum) {
output = high_limit;
} else {
output = low_limit + (throttle - minimum) / range * (high_limit - low_limit);
}
# CAS driven tail rotor thrust adjuster
me.adjuster = error_rate * error_adjuster_gain;
me.adjuster = me.limit(me.adjuster, 0.3);
output += me.adjuster;
setprop("/controls/flight/fcs/tail-rotor/error-rate", error_rate);
setprop("/controls/flight/fcs/tail-rotor/adjuster", me.adjuster);
me.write("throttle", output);
}
};
var sas = nil;
var cas = nil;
var afcs = nil;
var stabilator = nil;
var tail = nil;
var count = 0;
var sensitivities = {'roll' : 0.0, 'pitch' : 0.0, 'yaw' : 1.125 };
var sas_initial_gains = {'roll' : 0, 'pitch' : 0, 'yaw' : 0.004 };
var cas_input_gains = {'roll' : 30, 'pitch' : -60, 'yaw' : 30,
'attitude-roll' : 80, 'attitude-pitch' : -80 };
var cas_output_gains = {'roll' : 0.06, 'pitch' : -0.1, 'yaw' : 0.5,
'roll-brake-freq' : 10, 'pitch-brake-freq' : 3,
'roll-brake' : 0.4, 'pitch-brake' : 6,
'anti-side-slip-gain' : -4.5};
var update = func {
count += 1;
# AFCS, CAS, and SAS run at 60Hz
if (math.mod(count, 2) == 0) {
return;
}
cas.apply('roll');
cas.apply('pitch');
cas.apply('yaw');
afcs.apply('roll');
afcs.apply('pitch');
afcs.apply('yaw');
sas.apply('roll');
sas.apply('pitch');
sas.apply('yaw');
stabilator.update();
tail.update();
}
var initialize = func {
cas = CAS.new(cas_input_gains, cas_output_gains, sensitivities, nil, "/controls/flight/fcs/cas");
afcs = AFCS.new("/controls/flight/fcs/cas", "/controls/flight/fcs/afcs");
sas = SAS.new(sas_initial_gains, sensitivities, 3, "/controls/flight/fcs/afcs", "/controls/flight/fcs");
stabilator = Stabilator.new();
tail = TailRotorCollective.new();
setlistener("/rotors/main/cone-deg", update);
}
_setlistener("/sim/signals/fdm-initialized", initialize);

View file

@ -1,570 +0,0 @@
#
# Flight Control System by Tatsuhiro Nishioka
# $Id: fcs.nas,v 1.11 2008/08/28 02:41:04 tat Exp $
#
#This one simulates a P/R and Jaw SAS
var FCSFilter = {
new : func(input_path, output_path) {
var obj = { parents : [FCSFilter],
input_path : input_path,
output_path : output_path };
obj.axis_conv = {'roll' : 'aileron', 'pitch' : 'elevator', 'yaw' : 'rudder' };
obj.body_conv = {'roll' : 'v', 'pitch' : 'u' };
obj.last_body_fps = {'roll' : 0.0, 'pitch' : 0.0 };
obj.last_pos = {'roll' : 0.0, 'pitch' : 0.0, 'yaw' : 0.0};
return obj;
},
# read input command for a given axis
read : func(axis) {
if (me.input_path == nil or me.input_path == "") {
return getprop("/controls/flight/" ~ me.axis_conv[axis]);
} else {
var value = getprop(me.input_path ~ "/" ~ axis);
value = int(value * 1000) / 1000.0;
}
},
# write output command for a given axis
# this will be the output of an next command filter (like SAS)
write : func(axis, value) {
if (me.output_path == nil or me.output_path == '') {
setprop("/controls/flight/fcs/" ~ axis, me.limit(value, 1.0));
} else {
setprop(me.output_path ~ "/" ~ axis, me.limit(value, 1.0));
}
},
toggleFilterStatus : func(name) {
var messages = ["disengaged", "engaged"];
var path = "/controls/flight/fcs/" ~ name ~ "-enabled";
var status = getprop(path);
setprop(path, 1 - status);
#screen.log.write(name ~ " " ~ messages[1 - status]);
},
getStatus : func(name) {
var path = "/controls/flight/fcs/" ~ name ~ "-enabled";
return getprop(path);
},
limit : func(value, range) {
if (value > range) {
return range;
} elsif (value < -range) {
return - range;
}
return value;
},
max : func(val1, val2) {
return (val1 > val2) ? val1 : val2;
},
min : func(val1, val2) {
return (val1 > val2) ? val2 : val1;
},
calcCounterBodyFPS : func(axis, input, offset_deg) {
var position = getprop("/orientation/" ~ axis ~ "-deg");
var body_fps = 0;
var last_body_fps = me.last_body_fps[axis];
var reaction_gain = 0;
var heading = getprop("/orientation/heading-deg");
var wind_speed_fps = getprop("/environment/wind-speed-kt") * 1.6878099;
var wind_direction = getprop("/environment/wind-from-heading-deg");
var wind_direction -= heading;
var rate = getprop("/orientation/" ~ axis ~ "-rate-degps");
var gear_pos = getprop("/gear/gear[0]/compression-norm") + getprop("/gear/gear[1]/compression-norm");
var counter_fps = 0;
var fps_axis = me.body_conv[axis]; # convert from {roll, pitch} to {u, v}
var target_pos = offset_deg;
var brake_deg = 0;
body_fps = getprop("/velocities/" ~ fps_axis ~ "Body-fps");
if (axis == 'roll') {
var wind_fps = math.sin(wind_direction / 180 * math.pi) * wind_speed_fps;
} else {
var wind_fps = math.cos(wind_direction / 180 * math.pi) * wind_speed_fps;
}
var brake_freq = getprop("/controls/flight/fcs/gains/afcs/fps-" ~ axis ~ "-brake-freq");
var brake_gain = getprop("/controls/flight/fcs/gains/afcs/fps-brake-gain-" ~ axis);
body_fps -= wind_fps;
var dfps = body_fps - me.last_body_fps[axis];
var fps_coeff = getprop("/controls/flight/fcs/gains/afcs/fps-" ~ axis ~ "-coeff");
target_pos -= int(body_fps * 100) / 100 * fps_coeff;
if (axis == 'roll' and gear_pos > 0.0 and position > 0) {
target_pos -= position * gear_pos / 5;
}
reaction_gain = getprop("/controls/flight/fcs/gains/afcs/fps-reaction-gain-" ~ axis);
var brake_sensitivity = (axis == 'roll') ? 1 : 1;
if (math.abs(position + rate / brake_freq * brake_sensitivity) > math.abs(target_pos)) {
if (math.abs(dfps) > 1) {
dfps = 1;
}
var error_deg = target_pos - position;
brake_deg = (error_deg - rate / brake_freq) * math.abs(dfps * 10) * brake_gain;
if (target_pos > 0) {
brake_deg = me.min(brake_deg, 0);
} else {
brake_deg = me.max(brake_deg, 0);
}
}
counter_fps = me.limit((target_pos + brake_deg) * reaction_gain, 1.0);
setprop("/controls/flight/fcs/afcs/ah-" ~ fps_axis ~ "body-fps", body_fps);
setprop("/controls/flight/fcs/afcs/ah-" ~ fps_axis ~ "body-wind-fps", wind_fps);
setprop("/controls/flight/fcs/afcs/ah-" ~ axis ~ "-target-deg", target_pos);
setprop("/controls/flight/fcs/afcs/ah-" ~ axis ~ "-rate", rate);
setprop("/controls/flight/fcs/afcs/ah-delta-" ~ fps_axis ~ "body-fps", dfps);
setprop("/controls/flight/fcs/afcs/ah-" ~ axis ~ "-brake-deg", brake_deg);
setprop("/controls/flight/fcs/afcs/counter-fps-" ~ axis, counter_fps);
me.last_pos[axis] = position;
me.last_body_fps[axis] = body_fps;
return me.limit(counter_fps + input * 0.2, 1.0);
},
};
#
# AFCS : Automatic Flight Control System
#
var AFCS = {
new : func(input_path, output_path) {
var obj = FCSFilter.new(input_path, output_path);
obj.parents = [FCSFilter, AFCS];
setprop("/controls/flight/fcs/auto-hover-enabled", 0);
setprop("/controls/flight/fcs/gains/afcs/fps-brake-gain-pitch", 1.8);
setprop("/controls/flight/fcs/gains/afcs/fps-brake-gain-roll", 0.8);
setprop("/controls/flight/fcs/gains/afcs/fps-pitch-brake-freq", 3);
setprop("/controls/flight/fcs/gains/afcs/fps-pitch-coeff", -0.95);
setprop("/controls/flight/fcs/gains/afcs/fps-pitch-offset-deg", 0.9);
setprop("/controls/flight/fcs/gains/afcs/fps-reaction-gain-pitch", -0.8);
setprop("/controls/flight/fcs/gains/afcs/fps-reaction-gain-roll", 0.3436);
setprop("/controls/flight/fcs/gains/afcs/fps-roll-brake-freq", 8);
setprop("/controls/flight/fcs/gains/afcs/fps-roll-coeff", 0.8);
setprop("/controls/flight/fcs/gains/afcs/fps-roll-offset-deg", -0.8);
return obj;
},
toggleAutoHover : func() {
me.toggleFilterStatus("auto-hover");
},
toggleAirSpeedLock : func() {
me.toggleFilterStatus("air-speed-lock");
},
toggleHeadingLock : func() {
me.toggleFilterStatus("heading-lock");
},
toggleAltitudeLock : func() {
me.toggleFilterStatus("altitude-lock");
},
#
# auto hover : locks vBody_fps and uBody_fps regardless of wind speed/direction
#
autoHover : func(axis, input) {
if (axis == 'yaw') {
return input;
} else {
var offset_deg = getprop("/controls/flight/fcs/gains/afcs/fps-" ~ axis ~ "-offset-deg");
return me.calcCounterBodyFPS(axis, input, offset_deg);
}
},
altitudeLock : func(axis, input) {
# not implemented yet
return input;
},
headingLock : func(axis, input) {
# not implementet yet
return input;
},
apply : func(axis) {
var input = me.read(axis);
var hover_status = me.getStatus("auto-hover");
if (hover_status == 0) {
me.write(axis, input);
return;
}
me.write(axis, me.autoHover(axis, input));
}
};
#
# SAS : Stability Augmentation System - a rate damper
#
var SAS = {
#
# new
# initial_gains: hash of initial gains for rate damping
# sensitivities: hash of minimum rates (deg/sec) that enables rate damper
# authority_limit: shows how much SAS can take over control
# 0 means no stability control, 1.0 means SAS fully takes over pilot control
# input_path: is a base path to input axis; nil for using raw input from KB/JS
# output_path: is a base path to output axis; nis for using /controls/flight/fcs
#
# with input_path / output_path, you can connect SAS, CAS, and more control filters
#
new : func(initial_gains, sensitivities, authority_limit, input_path, output_path) {
var obj = FCSFilter.new(input_path, output_path);
obj.parents = [FCSFilter, SAS];
obj.authority_limit = authority_limit;
obj.sensitivities = sensitivities;
obj.initial_gains = initial_gains;
props.globals.getNode("/controls/flight/fcs/gains/sas", 1).setValues(obj.initial_gains);
setprop("/controls/flight/fcs/sas-enabled", 1);
return obj;
},
toggleEnable : func() {
me.toggleFilterStatus("sas");
},
#
# calcGain - get gain for each axis based on air speed and dynamic pressure
# axis: one of 'roll', 'pitch', or 'yaw'
#
calcGain : func(axis) {
var mach = getprop("/velocities/mach");
var initial_gain = getprop("/controls/flight/fcs/gains/sas/" ~ axis);
var gain = initial_gain - 0.1 * mach * mach;
if (math.abs(gain) < math.abs(initial_gain) * 0.01 or gain * initial_gain < 0) {
gain = initial_gain * 0.01;
}
return gain;
},
calcAuthorityLimit : func() {
var mach = getprop("/velocities/mach");
var min_mach = 0.038;
var limit = me.authority_limit;
if (math.abs(mach < min_mach)) {
limit += (min_mach - math.abs(mach)) / min_mach * (1 - me.authority_limit) * 0.95;
}
setprop("/controls/flight/fcs/gains/sas/authority-limit", limit);
return limit;
},
#
# apply - apply SAS damper to a given input axis
# axis: one of 'roll', 'pitch', or 'yaw'
#
apply : func(axis) {
var status = me.getStatus("sas");
var input = me.read(axis);
if (status == 0) {
me.write(axis, input);
return;
}
var mach = getprop("/velocities/mach");
var value = 0;
var rate = getprop("/orientation/" ~ axis ~ "-rate-degps");
var gain = me.calcGain(axis);
var limit = me.calcAuthorityLimit();
if (math.abs(rate) >= me.sensitivities[axis]) {
value = - gain * rate;
if (value > limit) {
value = limit;
} elsif (value < - limit) {
value = - limit;
}
}
me.write(axis, value + input);
}
};
#
# CAS : Control Augmentation System - makes your aircraft more meneuverable
#
var CAS = {
new : func(input_gains, output_gains, sensitivities, input_path, output_path) {
var obj = FCSFilter.new(input_path, output_path);
obj.parents = [FCSFilter, CAS];
obj.sensitivities = sensitivities;
obj.input_gains = input_gains;
obj.output_gains = output_gains;
props.globals.getNode("/controls/flight/fcs/gains/cas/input", 1).setValues(obj.input_gains);
props.globals.getNode("/controls/flight/fcs/gains/cas/output", 1).setValues(obj.output_gains);
setprop("/autopilot/locks/altitude", '');
setprop("/autopilot/locks/heading", '');
setprop("/controls/flight/fcs/cas-enabled", 1);
return obj;
},
calcRollRateAdjustment : func {
var position = getprop("/orientation/roll-deg");
return math.abs(math.sin(position / 180 * math.pi)) / 6;
},
calcSideSlipAdjustment : func {
var mach = getprop("/velocities/mach");
var slip = getprop("/orientation/side-slip-deg");
if (mach < 0.015) { # works only if air speed > 10kt
slip = 0;
}
var anti_slip_gain = getprop("/controls/flight/fcs/gains/cas/output/anti-side-slip-gain");
var roll_deg = getprop("/orientation/roll-deg");
var gain_adjuster = me.min(math.abs(mach) / 0.060, 1) * me.limit(0.2 + math.sqrt(math.abs(roll_deg)/10), 3);
anti_slip_gain *= gain_adjuster;
setprop("/controls/flight/fcs/cas/anti-side-slip", slip * anti_slip_gain);
return slip * anti_slip_gain;
},
# FIXME: command for CAS is just a temporal one
calcCommand: func (axis, input) {
var output = 0;
var mach = getprop("/velocities/mach");
var input_gain = me.calcGain(axis);
var output_gain = getprop("/controls/flight/fcs/gains/cas/output/" ~ axis);
var target_rate = input * input_gain;
var rate = getprop("/orientation/" ~ axis ~ "-rate-degps");
var drate = target_rate - rate;
var locks = {'pitch' : getprop("/autopilot/locks/altitude"),
'roll' : getprop("/autopilot/locks/heading")};
setprop("/controls/flight/fcs/cas/target_" ~ axis ~ "rate", target_rate);
setprop("/controls/flight/fcs/cas/delta_" ~ axis, drate);
if (axis == 'roll' or axis == 'pitch') {
if (math.abs(input > 0.7) or locks[axis] != '') {
output = drate * output_gain;
} else {
output = me.calcAttitudeCommand(axis);
}
if (axis == 'roll' and math.abs(mach) < 0.035) {
# FIXME: I don't know if OH-1 has this one
output += me.calcCounterBodyFPS(axis, input, -0.8);
}
} elsif (axis == 'yaw') {
output = drate * output_gain + me.calcSideSlipAdjustment();
} else {
output = drate * output_gain;
}
return output;
},
toggleEnable : func() {
me.toggleFilterStatus("cas");
},
calcAttitudeCommand : func(axis) {
var input_gain = getprop("/controls/flight/fcs/gains/cas/input/attitude-" ~ axis);
var output_gain = getprop("/controls/flight/fcs/gains/cas/output/" ~ axis);
var brake_freq = getprop("/controls/flight/fcs/gains/cas/output/" ~ axis ~ "-brake-freq");
var brake_gain = getprop("/controls/flight/fcs/gains/cas/output/" ~ axis ~ "-brake");
var trim = getprop("/controls/flight/" ~ me.axis_conv[axis] ~ "-trim");
var current_deg = getprop("/orientation/" ~ axis ~ "-deg");
var rate = getprop("/orientation/" ~ axis ~ "-rate-degps");
var target_deg = (me.read(axis) + trim) * input_gain;
var command_deg = 0;
if (target_deg != 0) {
command_deg = (0.094 * math.ln(math.abs(target_deg)) + 0.53) * target_deg;
}
var error_deg = command_deg - current_deg;
var brake_deg = (error_deg - rate / brake_freq) * math.abs(error_deg) * brake_gain;
if (command_deg > 0) {
brake_deg = me.min(brake_deg, 0);
} else {
brake_deg = me.max(brake_deg, 0);
}
var monitor_prefix = me.output_path ~ "/" ~ axis;
setprop(monitor_prefix ~ "-target_deg", target_deg);
setprop(monitor_prefix ~ "-error_deg", error_deg);
setprop(monitor_prefix ~ "-brake_deg", brake_deg);
setprop(monitor_prefix ~ "-deg", current_deg);
setprop(monitor_prefix ~ "-rate", -rate);
return (error_deg + brake_deg) * output_gain;
},
# FixMe: gain should be calculated using both speed and dynamic pressure
calcGain : func(axis) {
var mach = getprop("/velocities/mach");
var input_gain = getprop("/controls/flight/fcs/gains/cas/input/" ~ axis);
var gain = input_gain;
if (axis == 'pitch') {
gain += 0.1 * mach * mach;
} elsif (axis== 'yaw') {
gain *= ((1 - mach) * (1 - mach));
}
if (gain * input_gain < 0.0 ) {
gain = 0;
}
return gain;
},
apply : func(axis) {
var input = me.read(axis);
var status = me.getStatus("cas");
var cas_command = 0;
# FIXME : hmm, a bit nasty. CAS should be enabled even with auto-hover....
if (status == 0 or (me.getStatus("auto-hover") == 1 and axis != 'yaw')) {
me.write(axis, input);
return;
}
cas_command = me.calcCommand(axis, input);
me.write(axis, cas_command);
}
};
#
# Tail hstab, "stabilator," for stabilize the nose
#
var Stabilator = {
new : func() {
var obj = { parents : [Stabilator] };
setprop("/controls/flight/fcs/gains/stabilator", -1.8);
setprop("/controls/flight/fcs/auto-stabilator", 1);
# 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160, 170, 180, .....
me.gainTable = [-0.9, -0.8, 0.1, -0.5, 0.0, 0.7, 0.8, 0.9, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9, 0.8, 0.6, 0.4, 0.2, -1.0];
return obj;
},
toggleManual : func {
var status = getprop("/controls/flight/fcs/auto-stabilator");
getprop("/controls/flight/fcs/auto-stabilator", 1 - status);
},
apply : func(delta) {
setprop("/controls/flight/fcs/auto-stabilator", 0);
var value = getprop("/controls/flight/fcs/stabilator");
getprop("/controls/flight/fcs/stabilator", value + delta);
},
calcPosition : func() {
var speed = getprop("/velocities/mach") / 0.001497219; # in knot
var index = int(math.abs(speed) / 10);
if (index >= size(me.gainTable) - 1) {
index = size(me.gainTable) - 2;
}
var mod = math.mod(int(math.abs(speed)), 10);
var position = me.gainTable[index] * ((10 - mod) / 10) + me.gainTable[index-1] * (mod) / 10;
if (speed < -20) {
position = - position;
}
return position;
},
update : func() {
var status = getprop("/controls/flight/fcs/auto-stabilator");
if (status == 0) {
return;
}
var gain = getprop("/controls/flight/fcs/gains/stabilator");
var mach = getprop("/velocities/mach");
var throttle = getprop("/controls/flight/throttle");
var stabilator_norm = 0;
stabilator_norm = me.calcPosition();
setprop("/controls/flight/fcs/stabilator", stabilator_norm);
}
};
var TailRotorCollective = {
new : func(minimum=0.10, maximum=1.0, low_limit=0.00011, high_limit=0.0035) {
var obj = FCSFilter.new("/controls/engines/engine[1]", "/controls/flight/fcs/tail-rotor");
obj.parents = [FCSFilter, TailRotorCollective];
obj.adjuster = 0.0;
setprop("/controls/flight/fcs/tail-rotor/src-minimum", minimum);
setprop("/controls/flight/fcs/tail-rotor/src-maximum", maximum);
setprop("/controls/flight/fcs/tail-rotor/low-limit", low_limit);
setprop("/controls/flight/fcs/tail-rotor/high-limit", high_limit);
setprop("/controls/flight/fcs/gains/tail-rotor/error-adjuster-gain", -0.5);
return obj;
},
update : func() {
var throttle = me.read("throttle");
var pedal_pos_deg = getprop("/controls/flight/fcs/yaw");
var cas_input = cas.read('yaw');
var cas_input_gain = cas.calcGain('yaw');
var target_rate = cas_input * cas_input_gain;
var rate = getprop("/orientation/yaw-rate-degps");
var error_rate = getprop("/controls/flight/fcs/cas/delta_yaw");
var error_adjuster_gain = getprop("/controls/flight/fcs/gains/tail-rotor/error-adjuster-gain");
var minimum = getprop("/controls/flight/fcs/tail-rotor/src-minimum");
var maximum = getprop("/controls/flight/fcs/tail-rotor/src-maximum");
var low_limit = getprop("/controls/flight/fcs/tail-rotor/low-limit");
var high_limit = getprop("/controls/flight/fcs/tail-rotor/high-limit");
var output = 0;
var range = maximum - minimum;
if (throttle < minimum) {
output = low_limit;
} elsif (throttle > maximum) {
output = high_limit;
} else {
output = low_limit + (throttle - minimum) / range * (high_limit - low_limit);
}
# CAS driven tail rotor thrust adjuster
me.adjuster = error_rate * error_adjuster_gain;
me.adjuster = me.limit(me.adjuster, 0.3);
output += me.adjuster;
setprop("/controls/flight/fcs/tail-rotor/error-rate", error_rate);
setprop("/controls/flight/fcs/tail-rotor/adjuster", me.adjuster);
me.write("throttle", output);
}
};
var sas = nil;
var cas = nil;
var afcs = nil;
var stabilator = nil;
var tail = nil;
var count = 0;
var sensitivities = {'roll' : 0.0, 'pitch' : 0.0, 'yaw' : 1.125 };
var sas_initial_gains = {'roll' : 0.0011, 'pitch' : -0.0042, 'yaw' : 0.004 };
var cas_input_gains = {'roll' : 30, 'pitch' : -60, 'yaw' : 30,
'attitude-roll' : 80, 'attitude-pitch' : -80 };
var cas_output_gains = {'roll' : 0.06, 'pitch' : -0.1, 'yaw' : 0.5,
'roll-brake-freq' : 10, 'pitch-brake-freq' : 3,
'roll-brake' : 0.4, 'pitch-brake' : 6,
'anti-side-slip-gain' : -4.5};
var update = func {
count += 1;
# AFCS, CAS, and SAS run at 60Hz
if (math.mod(count, 2) == 0) {
return;
}
cas.apply('roll');
cas.apply('pitch');
cas.apply('yaw');
afcs.apply('roll');
afcs.apply('pitch');
afcs.apply('yaw');
sas.apply('roll');
sas.apply('pitch');
sas.apply('yaw');
stabilator.update();
tail.update();
}
var initialize = func {
cas = CAS.new(cas_input_gains, cas_output_gains, sensitivities, nil, "/controls/flight/fcs/cas");
afcs = AFCS.new("/controls/flight/fcs/cas", "/controls/flight/fcs/afcs");
sas = SAS.new(sas_initial_gains, sensitivities, 3, "/controls/flight/fcs/afcs", "/controls/flight/fcs");
stabilator = Stabilator.new();
tail = TailRotorCollective.new();
setlistener("/rotors/main/cone-deg", update);
}
_setlistener("/sim/signals/fdm-initialized", initialize);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,539 @@
########################################################
# routines to set up, transform and manage weather tiles
# Thorsten Renk, April 2010
########################################################
###################################
# tile management loop
###################################
var tile_management_loop = func {
var tNode = props.globals.getNode(lw~"tiles", 1).getChildren("tile");
var viewpos = geo.aircraft_position(); # using viewpos here triggers massive tile ops for tower view...
var code = getprop(lw~"tiles/code");
var i = 0;
var d_min = 100000.0;
var i_min = 0;
var distance_to_load = getprop(lw~"config/distance-to-load-tile-m");
var distance_to_remove = getprop(lw~"config/distance-to-remove-tile-m");
var current_heading = getprop("orientation/heading-deg");
var loading_flag = getprop(lw~"tmp/asymmetric-tile-loading-flag");
foreach (var t; tNode) {
var tpos = geo.Coord.new();
tpos.set_latlon(t.getNode("latitude-deg").getValue(),t.getNode("longitude-deg").getValue(),0.0);
var d = viewpos.distance_to(tpos);
if (d < d_min) {d_min = d; i_min = i;}
var flag = t.getNode("generated-flag").getValue();
var dir = viewpos.course_to(tpos);
var d_load = distance_to_load;
var d_remove = distance_to_remove;
if (loading_flag == 1)
{
if ((abs(dir-current_heading) > 135.0) and (abs(dir-current_heading) < 225.0))
{
d_load = 0.7 * d_load;
d_remove = 0.7 * d_remove;
}
}
#print(d);
if ((d < distance_to_load) and (flag==0)) # the tile needs to be generated, unless it already has been
{
setprop(lw~"tiles/tile-counter",getprop(lw~"tiles/tile-counter")+1);
print("Building tile unique index ",getprop(lw~"tiles/tile-counter"));
generate_tile(code, tpos.lat(), tpos.lon(),0);
t.getNode("generated-flag").setValue(1);
t.getNode("tile-index",1).setValue(getprop(lw~"tiles/tile-counter"));
}
if ((d > distance_to_remove) and (flag==1)) # the tile needs to be deleted if it exists
{
print("Removing tile, unique index ", t.getNode("tile-index").getValue());
remove_tile(t.getNode("tile-index").getValue());
t.getNode("generated-flag").setValue(0);
}
i = i + 1;
} # end foreach
#print("Minimum distance to: ",i_min);
if (i_min != 4) # we've entered a different tile
{
print("Changing active tile to direction ", i_min);
change_active_tile(i_min);
}
if (getprop(lw~"tile-loop-flag") ==1) {settimer(tile_management_loop, 5.0);}
}
###################################
# tile generation call
###################################
var generate_tile = func (code, lat, lon, index) {
setprop(lw~"tiles/tmp/latitude-deg", lat);
setprop(lw~"tiles/tmp/longitude-deg",lon);
if (getprop(lw~"tmp/tile-management") == "repeat tile")
{
if (code == "altocumulus_sky"){weather_tiles.set_altocumulus_tile();}
else if (code == "broken_layers") {weather_tiles.set_broken_layers_tile();}
else if (code == "stratus") {weather_tiles.set_overcast_stratus_tile();}
else if (code == "cumulus_sky") {weather_tiles.set_fair_weather_tile();}
else if (code == "gliders_sky") {weather_tiles.set_gliders_sky_tile();}
else if (code == "blue_thermals") {weather_tiles.set_blue_thermals_tile();}
else if (code == "summer_rain") {weather_tiles.set_summer_rain_tile();}
else if (code == "high_pressure_core") {weather_tiles.set_high_pressure_core_tile();}
else if (code == "high_pressure") {weather_tiles.set_high_pressure_tile();}
else if (code == "high_pressure_border") {weather_tiles.set_high_pressure_border_tile();}
else if (code == "low_pressure_border") {weather_tiles.set_low_pressure_border_tile();}
else if (code == "low_pressure") {weather_tiles.set_low_pressure_tile();}
else if (code == "low_pressure_core") {weather_tiles.set_low_pressure_core_tile();}
}
else if (getprop(lw~"tmp/tile-management") == "realistic weather")
{
var rn = rand();
if (code == "low_pressure_core")
{
if (rn > 0.3) {weather_tiles.set_low_pressure_core_tile();}
else {weather_tiles.set_low_pressure_tile();}
}
else if (code == "low_pressure")
{
if (rn > 0.3) {weather_tiles.set_low_pressure_tile();}
else if (rn > 0.15) {weather_tiles.set_low_pressure_core_tile();}
else {weather_tiles.set_low_pressure_border_tile();}
}
else if (code == "low_pressure_border")
{
if (rn > 0.3) {weather_tiles.set_low_pressure_border_tile();}
else if (rn > 0.15) {weather_tiles.set_low_pressure_tile();}
else {weather_tiles.set_high_pressure_border_tile();}
}
else if (code == "high_pressure_border")
{
if (rn > 0.3) {weather_tiles.set_high_pressure_border_tile();}
else if (rn > 0.15) {weather_tiles.set_high_pressure_tile();}
else {weather_tiles.set_low_pressure_border_tile();}
}
else if (code == "high_pressure")
{
if (rn > 0.3) {weather_tiles.set_high_pressure_tile();}
else if (rn > 0.15) {weather_tiles.set_high_pressure_border_tile();}
else {weather_tiles.set_high_pressure_core_tile();}
}
else if (code == "high_pressure_core")
{
if (rn > 0.3) {weather_tiles.set_high_pressure_core_tile();}
else {weather_tiles.set_high_pressure_tile();}
}
} # end if mode == realistic weather
}
###################################
# tile removal call
###################################
var remove_tile_loop = func (index) {
var n = 100;
var flag_mod = 0;
#var mvec = props.globals.getNode("models", 1).getChildren("model");
#var msize = size(mvec);
var status = getprop(lw~"tmp/thread-status");
if ((status == "computing") or (status == "placing")) # the array is blocked
{
settimer( func {remove_tile_loop(index); },0); # try again next frame
return;
}
else if (status == "idle") # we initialize the loop
{
mvec = props.globals.getNode("models", 1).getChildren("model");
msize = size(mvec);
setprop(lw~"tmp/last-reading-pos-mod", msize);
setprop(lw~"tmp/thread-status", "removing");
}
var lastpos = getprop(lw~"tmp/last-reading-pos-mod");
# print("msize: ", msize, "lastpos ", lastpos);
if (lastpos < (msize-1)) {var istart = lastpos;} else {var istart = (msize-1);}
if (istart<0) {istart=0;}
var i_min = istart - n;
if (i_min < -1) {i_min =-1;}
for (var i = istart; i > i_min; i = i- 1)
{
m = mvec[i];
if (m.getNode("legend",1).getValue() == "Cloud")
{
if (m.getNode("tile-index").getValue() == index)
{
m.remove();
}
}
}
if (i<0) {flag_mod = 1;}
if (flag_mod == 0) {setprop(lw~"tmp/last-reading-pos-mod",i); }
if (flag_mod == 0) # we still have work to do
{settimer( func {remove_tile_loop(index); },0);}
else
{
print("Tile deletion loop finished!");
setprop(lw~"tmp/thread-status", "idle");
setprop(lw~"clouds/placement-index",0);
setprop(lw~"clouds/model-placement-index",0);
}
}
# this is to avoid two tile removal loops starting at the same time
var waiting_loop = func (index) {
var status = getprop(lw~"tmp/thread-status");
if (status == "idle") {remove_tile_loop(index);}
else {
print("Removal of ",index, " waiting for idle thread...");
settimer( func {waiting_loop(index); },1.0);
}
}
var remove_tile = func (index) {
var n = size(props.globals.getNode("local-weather/clouds").getChild("tile",index,1).getChildren("cloud"));
props.globals.getNode("local-weather/clouds", 1).removeChild("tile",index);
setprop(lw~"clouds/cloud-number",getprop(lw~"clouds/cloud-number")-n);
if (getprop(lw~"tmp/thread-flag") == 1)
#{remove_tile_loop(index);}
#{waiting_loop(index);}
# call the model removal in the next frame, because its initialization takes time
# and we do a lot in this frame
{settimer( func {waiting_loop(index); },0);}
else
{
var modelNode = props.globals.getNode("models", 1).getChildren("model");
foreach (var m; modelNode)
{
if (m.getNode("legend").getValue() == "Cloud")
{
if (m.getNode("tile-index").getValue() == index)
{
m.remove();
}
}
}
}
var effectNode = props.globals.getNode("local-weather/effect-volumes").getChildren("effect-volume");
foreach (var e; effectNode)
{
if (e.getNode("tile-index").getValue() == index)
{
e.remove();
setprop(lw~"effect-volumes/number",getprop(lw~"effect-volumes/number")-1);
}
}
# set placement indices to zero to reinitiate search for free positions
setprop(lw~"clouds/placement-index",0);
setprop(lw~"clouds/model-placement-index",0);
setprop(lw~"effect-volumes/effect-placement-index",0);
}
###################################
# active tile change and neighbour
# recomputation
###################################
var change_active_tile = func (index) {
var t = props.globals.getNode(lw~"tiles").getChild("tile",index,0);
var lat = t.getNode("latitude-deg").getValue();
var lon = t.getNode("longitude-deg").getValue();
var alpha = getprop(lw~"tmp/tile-orientation-deg");
if (index == 0)
{
copy_entry(4,8);
copy_entry(3,7);
copy_entry(1,5);
copy_entry(0,4);
create_neighbour(lat,lon,0,alpha);
create_neighbour(lat,lon,1,alpha);
create_neighbour(lat,lon,2,alpha);
create_neighbour(lat,lon,3,alpha);
create_neighbour(lat,lon,6,alpha);
}
else if (index == 1)
{
copy_entry(3,6);
copy_entry(4,7);
copy_entry(5,8);
copy_entry(0,3);
copy_entry(1,4);
copy_entry(2,5);
create_neighbour(lat,lon,0,alpha);
create_neighbour(lat,lon,1,alpha);
create_neighbour(lat,lon,2,alpha);
}
else if (index == 2)
{
copy_entry(4,6);
copy_entry(1,3);
copy_entry(2,4);
copy_entry(5,7);
create_neighbour(lat,lon,0,alpha);
create_neighbour(lat,lon,1,alpha);
create_neighbour(lat,lon,2,alpha);
create_neighbour(lat,lon,5,alpha);
create_neighbour(lat,lon,8,alpha);
}
else if (index == 3)
{
copy_entry(1,2);
copy_entry(4,5);
copy_entry(7,8);
copy_entry(0,1);
copy_entry(3,4);
copy_entry(6,7);
create_neighbour(lat,lon,0,alpha);
create_neighbour(lat,lon,3,alpha);
create_neighbour(lat,lon,6,alpha);
}
else if (index == 5)
{
copy_entry(1,0);
copy_entry(4,3);
copy_entry(7,6);
copy_entry(2,1);
copy_entry(5,4);
copy_entry(8,7);
create_neighbour(lat,lon,2,alpha);
create_neighbour(lat,lon,5,alpha);
create_neighbour(lat,lon,8,alpha);
}
else if (index == 6)
{
copy_entry(4,2);
copy_entry(3,1);
copy_entry(6,4);
copy_entry(7,5);
create_neighbour(lat,lon,0,alpha);
create_neighbour(lat,lon,3,alpha);
create_neighbour(lat,lon,6,alpha);
create_neighbour(lat,lon,7,alpha);
create_neighbour(lat,lon,8,alpha);
}
else if (index == 7)
{
copy_entry(3,0);
copy_entry(4,1);
copy_entry(5,2);
copy_entry(6,3);
copy_entry(7,4);
copy_entry(8,5);
create_neighbour(lat,lon,6,alpha);
create_neighbour(lat,lon,7,alpha);
create_neighbour(lat,lon,8,alpha);
}
else if (index == 8)
{
copy_entry(4,0);
copy_entry(7,3);
copy_entry(8,4);
copy_entry(5,1);
create_neighbour(lat,lon,2,alpha);
create_neighbour(lat,lon,5,alpha);
create_neighbour(lat,lon,6,alpha);
create_neighbour(lat,lon,7,alpha);
create_neighbour(lat,lon,8,alpha);
}
}
#####################################
# copy tile info in neighbour matrix
#####################################
var copy_entry = func (from_index, to_index) {
var tNode = props.globals.getNode(lw~"tiles");
var f = tNode.getChild("tile",from_index,0);
var t = tNode.getChild("tile",to_index,0);
t.getNode("latitude-deg").setValue(f.getNode("latitude-deg").getValue());
t.getNode("longitude-deg").setValue(f.getNode("longitude-deg").getValue());
t.getNode("generated-flag").setValue(f.getNode("generated-flag").getValue());
t.getNode("tile-index").setValue(f.getNode("tile-index").getValue());
}
#####################################
# create adjacent tile coordinates
#####################################
var create_neighbour = func (blat, blon, index, alpha) {
var x = 0.0;
var y = 0.0;
var phi = alpha * math.pi/180.0;
calc_geo(blat);
if ((index == 0) or (index == 3) or (index == 6)) {x =-40000.0;}
if ((index == 2) or (index == 5) or (index == 8)) {x = 40000.0;}
if ((index == 0) or (index == 1) or (index == 2)) {y = 40000.0;}
if ((index == 6) or (index == 7) or (index == 8)) {y = -40000.0;}
var t = props.globals.getNode(lw~"tiles").getChild("tile",index,0);
t.getNode("latitude-deg",1).setValue(blat + get_lat(x,y,phi));
t.getNode("longitude-deg",1).setValue(blon + get_lon(x,y,phi));
t.getNode("generated-flag",1).setValue(0);
t.getNode("tile-index",1).setValue(-1);
}
#####################################
# find the 8 adjacent tile coordinates
# after the initial setup call
#####################################
var create_neighbours = func (blat, blon, alpha) {
var x = 0.0;
var y = 0.0;
var phi = alpha * math.pi/180.0;
calc_geo(blat);
x = -40000.0; y = 40000.0;
setprop(lw~"tiles/tile[0]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[0]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[0]/generated-flag",0);
setprop(lw~"tiles/tile[0]/tile-index",-1);
x = 0.0; y = 40000.0;
setprop(lw~"tiles/tile[1]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[1]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[1]/generated-flag",0);
setprop(lw~"tiles/tile[1]/tile-index",-1);
x = 40000.0; y = 40000.0;
setprop(lw~"tiles/tile[2]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[2]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[2]/generated-flag",0);
setprop(lw~"tiles/tile[2]/tile-index",-1);
x = -40000.0; y = 0.0;
setprop(lw~"tiles/tile[3]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[3]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[3]/generated-flag",0);
setprop(lw~"tiles/tile[3]/tile-index",-1);
# this is the current tile
x = 0.0; y = 0.0;
setprop(lw~"tiles/tile[4]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[4]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[4]/generated-flag",1);
setprop(lw~"tiles/tile[4]/tile-index",1);
x = 40000.0; y = 0.0;
setprop(lw~"tiles/tile[5]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[5]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[5]/generated-flag",0);
setprop(lw~"tiles/tile[5]/tile-index",-1);
x = -40000.0; y = -40000.0;
setprop(lw~"tiles/tile[6]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[6]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[6]/generated-flag",0);
setprop(lw~"tiles/tile[6]/tile-index",-1);
x = 0.0; y = -40000.0;
setprop(lw~"tiles/tile[7]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[7]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[7]/generated-flag",0);
setprop(lw~"tiles/tile[7]/tile-index",-1);
x = 40000.0; y = -40000.0;
setprop(lw~"tiles/tile[8]/latitude-deg",blat + get_lat(x,y,phi));
setprop(lw~"tiles/tile[8]/longitude-deg",blon + get_lon(x,y,phi));
setprop(lw~"tiles/tile[8]/generated-flag",0);
setprop(lw~"tiles/tile[8]/tile-index",-1);
}
###################
# global variables
###################
# these already exist in different namespace, but for ease of typing we define them here as well
var lat_to_m = 110952.0; # latitude degrees to meters
var m_to_lat = 9.01290648208234e-06; # meters to latitude degrees
var ft_to_m = 0.30480;
var m_to_ft = 1.0/ft_to_m;
var inhg_to_hp = 33.76389;
var hp_to_inhg = 1.0/inhg_to_hp;
var lon_to_m = 0.0; #local_weather.lon_to_m;
var m_to_lon = 0.0; # local_weather.m_to_lon;
var lw = "/local-weather/";
# storage array for model vector
var mvec = [];
var msize = 0;
###################
# helper functions
###################
var calc_geo = func(clat) {
lon_to_m = math.cos(clat*math.pi/180.0) * lat_to_m;
m_to_lon = 1.0/lon_to_m;
}
var get_lat = func (x,y,phi) {
return (y * math.cos(phi) - x * math.sin(phi)) * m_to_lat;
}
var get_lon = func (x,y,phi) {
return (x * math.cos(phi) + y * math.sin(phi)) * m_to_lon;
}

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 797 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 515 KiB

View file

@ -3,8 +3,8 @@
varying float fogFactor; varying float fogFactor;
float shade = 0.2; float shade = 0.4;
float cloud_height = 3000.0; float cloud_height = 1000.0;
void main(void) void main(void)
{ {
@ -23,13 +23,15 @@ void main(void)
// Do the matrix multiplication by [ u r w pos]. Assume no // Do the matrix multiplication by [ u r w pos]. Assume no
// scaling in the homogeneous component of pos. // scaling in the homogeneous component of pos.
gl_Position = vec4(0.0, 0.0, 0.0, 1.0); gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
gl_Position.xyz = gl_Vertex.x * u; gl_Position.xyz = gl_Vertex.x * u ;
gl_Position.xyz += gl_Vertex.y * r * 1.0; gl_Position.xyz += gl_Vertex.y * r * 1.0;
gl_Position.xyz += gl_Vertex.z * w * 0.4; gl_Position.xyz += gl_Vertex.z * w * 1.0;//0.4;
//gl_Position.xyz += gl_Vertex.y * r * wScale; //gl_Position.xyz += gl_Vertex.y * r * wScale;
//gl_Position.xyz += gl_Vertex.z * w * hScale; //gl_Position.xyz += gl_Vertex.z * w * hScale;
gl_Position.xyz += gl_Color.xyz; gl_Position.xyz += gl_Color.xyz;
gl_Position.z = gl_Position.z * 0.4;
// Determine a lighting normal based on the vertex position from the // Determine a lighting normal based on the vertex position from the
// center of the cloud, so that sprite on the opposite side of the cloud to the sun are darker. // center of the cloud, so that sprite on the opposite side of the cloud to the sun are darker.
float n = dot(normalize(-gl_LightSource[0].position.xyz), float n = dot(normalize(-gl_LightSource[0].position.xyz),
@ -56,6 +58,6 @@ void main(void)
gl_BackColor = gl_FrontColor; gl_BackColor = gl_FrontColor;
// Fog doesn't affect clouds as much as other objects. // Fog doesn't affect clouds as much as other objects.
fogFactor = exp( -gl_Fog.density * fogCoord * 0.2); fogFactor = exp( -gl_Fog.density * fogCoord * 0.5);
fogFactor = clamp(fogFactor, 0.0, 1.0); fogFactor = clamp(fogFactor, 0.0, 1.0);
} }

View file

@ -3,7 +3,7 @@
varying float fogFactor; varying float fogFactor;
float shade = 0.5; float shade = 0.6;
float cloud_height = 1000.0; float cloud_height = 1000.0;
void main(void) void main(void)

View file

@ -0,0 +1,11 @@
uniform sampler2D baseTexture;
varying float fogFactor;
void main(void)
{
vec4 base = texture2D( baseTexture, gl_TexCoord[0].st);
vec4 finalColor = base * gl_Color;
gl_FragColor.rgb = mix(gl_Fog.color.rgb, finalColor.rgb, fogFactor );
gl_FragColor.a = mix(0.0, finalColor.a, fogFactor);
}

View file

@ -0,0 +1,63 @@
// -*-C++-*-
#version 120
varying float fogFactor;
float shade = 0.7;
float cloud_height = 1000.0;
void main(void)
{
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
vec4 ep = gl_ModelViewMatrixInverse * vec4(0.0,0.0,0.0,1.0);
vec4 l = gl_ModelViewMatrixInverse * vec4(0.0,0.0,1.0,1.0);
vec3 u = normalize(ep.xyz - l.xyz);
// Find a rotation matrix that rotates 1,0,0 into u. u, r and w are
// the columns of that matrix.
vec3 absu = abs(u);
vec3 r = normalize(vec3(-u.y, u.x, 0));
vec3 w = cross(u, r);
// Do the matrix multiplication by [ u r w pos]. Assume no
// scaling in the homogeneous component of pos.
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
gl_Position.xyz = gl_Vertex.x * u ;
gl_Position.xyz += gl_Vertex.y * r * 1.0;
gl_Position.xyz += gl_Vertex.z * w * 1.0;//0.4;
//gl_Position.xyz += gl_Vertex.y * r * wScale;
//gl_Position.xyz += gl_Vertex.z * w * hScale;
gl_Position.xyz += gl_Color.xyz;
gl_Position.z = gl_Position.z * 0.2;
// Determine a lighting normal based on the vertex position from the
// center of the cloud, so that sprite on the opposite side of the cloud to the sun are darker.
float n = dot(normalize(-gl_LightSource[0].position.xyz),
normalize(mat3x3(gl_ModelViewMatrix) * (- gl_Position.xyz)));;
// Determine the position - used for fog and shading calculations
vec3 ecPosition = vec3(gl_ModelViewMatrix * gl_Position);
float fogCoord = abs(ecPosition.z);
float fract = smoothstep(0.0, cloud_height, gl_Position.z + cloud_height);
// Final position of the sprite
gl_Position = gl_ModelViewProjectionMatrix * gl_Position;
// Determine the shading of the sprite based on its vertical position and position relative to the sun.
n = min(smoothstep(-0.5, 0.0, n), fract);
// Determine the shading based on a mixture from the backlight to the front
vec4 backlight = gl_LightSource[0].diffuse * shade;
gl_FrontColor = mix(backlight, gl_LightSource[0].diffuse, n);
gl_FrontColor += gl_FrontLightModelProduct.sceneColor;
// As we get within 100m of the sprite, it is faded out. Equally at large distances it also fades out.
gl_FrontColor.a = min(smoothstep(100.0, 300.0, fogCoord), 1 - smoothstep(25000.0, 30000.0, fogCoord));
gl_BackColor = gl_FrontColor;
// Fog doesn't affect clouds as much as other objects.
fogFactor = exp( -gl_Fog.density * fogCoord * 0.2);
fogFactor = clamp(fogFactor, 0.0, 1.0);
}

11
Shaders/test.frag Normal file
View file

@ -0,0 +1,11 @@
uniform sampler2D baseTexture;
varying float fogFactor;
void main(void)
{
vec4 base = texture2D( baseTexture, gl_TexCoord[0].st);
vec4 finalColor = base * gl_Color;
gl_FragColor.rgb = mix(gl_Fog.color.rgb, finalColor.rgb, fogFactor );
gl_FragColor.a = mix(0.0, finalColor.a, fogFactor);
}

91
Shaders/test.vert Normal file
View file

@ -0,0 +1,91 @@
// -*-C++-*-
#version 120
varying float fogFactor;
//attribute vec3 usrAttr3;
//attribute vec3 usrAttr4;
//float textureIndexX = usrAttr3.r;
//float textureIndexY = usrAttr3.g;
//float wScale = usrAttr3.b;
//float hScale = usrAttr4.r;
//float shade = usrAttr4.g;
//float cloud_height = usrAttr4.b;
//float shade = usrAttr3.r;
//float cloud_height = usrAttr3.g;
//float scale = usrAttr3.b;
float shading;
float shade = 0.3;
float cloud_height = 1000.0;
float scale = 0.5;
void main(void)
{
//shade = 0.1 * shade;
//scale = 0.1 * scale;
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
vec4 ep = gl_ModelViewMatrixInverse * vec4(0.0,0.0,0.0,1.0);
vec4 l = gl_ModelViewMatrixInverse * vec4(0.0,0.0,1.0,1.0);
vec3 view = normalize(ep.xyz - l.xyz);
vec4 posh = gl_ModelViewMatrixInverse * normalize(vec4(gl_Vertex.x,gl_Vertex.y,gl_Vertex.z,1.0));
vec3 pos = normalize(ep.xyz - posh.xyz);
mat4 sprime = mat4(1.0,0.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);
mat4 scale = gl_ModelViewMatrix * sprime * gl_ModelViewMatrixInverse;
float dist = sqrt(gl_Vertex.x * gl_Vertex.x + gl_Vertex.y * gl_Vertex.y + gl_Vertex.z * gl_Vertex.z);
//vec3 u = normalize(smoothstep(500.0, 1500.0, dist) * pos + (1.0 - smoothstep(500.0, 1500.0, dist)) * view);
//vec3 u = normalize(mix(pos, view, smoothstep(500.0,1500.0,dist)));
vec3 u = view;
// Find a rotation matrix that rotates 1,0,0 into u. u, r and w are
// the columns of that matrix.
vec3 absu = abs(u);
vec3 r = normalize(vec3(-u.y, u.x, 0));
vec3 w = cross(u, r);
// Do the matrix multiplication by [ u r w pos]. Assume no
// scaling in the homogeneous component of pos.
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
gl_Position.xyz = gl_Vertex.x * u;
gl_Position.xyz += gl_Vertex.y * r * 1.0;
gl_Position.xyz += gl_Vertex.z * w * scale;
//gl_Position.xyz += gl_Vertex.y * r * wScale;
//gl_Position.xyz += gl_Vertex.z * w * hScale;
gl_Position.xyz += gl_Color.xyz;
// Determine a lighting normal based on the vertex position from the
// center of the cloud, so that sprite on the opposite side of the cloud to the sun are darker.
float n = dot(normalize(-gl_LightSource[0].position.xyz),
normalize(mat3x3(gl_ModelViewMatrix) * (- gl_Position.xyz)));;
// Determine the position - used for fog and shading calculations
vec3 ecPosition = vec3(gl_ModelViewMatrix * gl_Position);
float fogCoord = abs(ecPosition.z);
float fract = smoothstep(0.0, cloud_height, gl_Position.z + cloud_height);
// Final position of the sprite
gl_Position = gl_ModelViewProjectionMatrix * gl_Position;
// Determine the shading of the sprite based on its vertical position and position relative to the sun.
n = min(smoothstep(-0.5, 0.0, n), fract);
// Determine the shading based on a mixture from the backlight to the front
vec4 backlight = gl_LightSource[0].diffuse * shade;
gl_FrontColor = mix(backlight, gl_LightSource[0].diffuse, n);
gl_FrontColor += gl_FrontLightModelProduct.sceneColor;
// As we get within 100m of the sprite, it is faded out. Equally at large distances it also fades out.
gl_FrontColor.a = min(smoothstep(10.0, 100.0, fogCoord), 1 - smoothstep(15000.0, 20000.0, fogCoord));
gl_BackColor = gl_FrontColor;
// Fog doesn't affect clouds as much as other objects.
fogFactor = exp( -gl_Fog.density * fogCoord * 0.2);
fogFactor = clamp(fogFactor, 0.0, 1.0);
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,813 +0,0 @@
<?xml version="1.0"?>
<!--
thanks to the SAR simulation (GPL) for the helicopter sounds,
and the Urban game (LGPL) for the weapon sounds
+x = aft
+y = left
+z = up
-->
<PropertyList>
<fx>
<starter>
<name>starter0_start</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/starter_start.wav</path>
<condition>
<property>controls/engines/engine[0]/starter</property>
</condition>
<volume>
<factor>0.1</factor>
</volume>
<position>
<x>-0.88</x>
<y>0.40</y>
<z>0.5</z>
</position>
<reference-dist>5</reference-dist>
<max-dist>10</max-dist>
</starter>
<starter>
<name>starter0_loop</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/starter_loop.wav</path>
<condition>
<property>controls/engines/engine[0]/starter</property>
</condition>
<delay-sec>11.6</delay-sec>
<volume>
<factor>0.1</factor>
</volume>
<position>
<x>-0.88</x>
<y>0.40</y>
<z>0.5</z>
</position>
<reference-dist>5</reference-dist>
<max-dist>10</max-dist>
</starter>
<starter>
<name>starter0_stop</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/starter_stop.wav</path>
<condition>
<not>
<property>controls/engines/engine[0]/starter</property>
</not>
</condition>
<volume>
<factor>0.3</factor>
</volume>
<position>
<x>-0.88</x>
<y>0.40</y>
<z>0.5</z>
</position>
<reference-dist>5</reference-dist>
<max-dist>10</max-dist>
</starter>
<starter>
<name>starter1_start</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/starter_start.wav</path>
<condition>
<property>controls/engines/engine[1]/starter</property>
</condition>
<volume>
<factor>0.3</factor>
</volume>
<position>
<x>-0.88</x>
<y>-0.40</y>
<z>0.5</z>
</position>
<reference-dist>5</reference-dist>
<max-dist>10</max-dist>
</starter>
<starter>
<name>starter1_loop</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/starter_loop.wav</path>
<condition>
<property>controls/engines/engine[1]/starter</property>
</condition>
<delay-sec>11.6</delay-sec>
<volume>
<factor>0.1</factor>
</volume>
<position>
<x>-0.88</x>
<y>-0.40</y>
<z>0.5</z>
</position>
<reference-dist>5</reference-dist>
<max-dist>10</max-dist>
</starter>
<starter>
<name>starter1_stop</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/starter_stop.wav</path>
<condition>
<not>
<property>controls/engines/engine[1]/starter</property>
</not>
</condition>
<volume>
<factor>0.1</factor>
</volume>
<position>
<x>-0.88</x>
<y>-0.40</y>
<z>0.5</z>
</position>
<reference-dist>5</reference-dist>
<max-dist>10</max-dist>
</starter>
<engine>
<name>turbine0-start</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/strt_ec135_out2.wav</path>
<condition>
<greater-than>
<property>engines/engine[0]/n1-pct</property>
<value>0.1</value>
</greater-than>
</condition>
<volume>
<factor>0.03</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/volume</property>
<factor>5</factor>
</volume>
<reference-dist>50</reference-dist>
<max-dist>200</max-dist>
</engine>
<engine>
<name>turbine0-loop</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/idle_ec135_out.wav</path>
<condition>
<property>engines/engine[0]/running</property>
</condition>
<delay-sec>45</delay-sec>
<volume>
<factor>0.03</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/volume</property>
<factor>5</factor>
</volume>
<reference-dist>50</reference-dist>
<max-dist>200</max-dist>
</engine>
<engine>
<name>turbine0-shutdown</name>
<mode>once</mode>
<path>Sounds/turbine_shutdown.wav</path>
<condition>
<not>
<property>engines/engine[0]/running</property>
</not>
</condition>
<volume>
<factor>0.03</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/volume</property>
<factor>5</factor>
</volume>
<reference-dist>50</reference-dist>
<max-dist>200</max-dist>
</engine>
<engine>
<name>turbine1-start</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/strt_ec135_out2.wav</path>
<condition>
<greater-than>
<property>engines/engine[1]/n1-pct</property>
<value>0.1</value>
</greater-than>
</condition>
<volume>
<factor>0.03</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/volume</property>
<factor>5</factor>
</volume>
<reference-dist>50</reference-dist>
<max-dist>200</max-dist>
</engine>
<engine>
<name>turbine1-loop</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/idle_ec135_out.wav</path>
<condition>
<property>engines/engine[1]/running</property>
</condition>
<delay-sec>45</delay-sec>
<volume>
<factor>0.03</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/volume</property>
<factor>5</factor>
</volume>
<reference-dist>50</reference-dist>
<max-dist>200</max-dist>
</engine>
<engine>
<name>turbine1-shutdown</name>
<mode>once</mode>
<path>Sounds/turbine_shutdown.wav</path>
<condition>
<not>
<property>engines/engine[1]/running</property>
</not>
</condition>
<volume>
<factor>0.03</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/volume</property>
<factor>5</factor>
</volume>
<reference-dist>50</reference-dist>
<max-dist>200</max-dist>
</engine>
<rotor>
<name>rotor-outside</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/flight_ec135_out.wav</path>
<condition>
<and>
<not>
<property>sim/current-view/internal</property>
</not>
<greater-than>
<property>rotors/main/rpm</property>
<value>200</value>
</greater-than>
<not>
<property>sim/crashed</property>
</not>
</and>
</condition>
<volume>
<property>rotors/main/rpm</property>
<factor>0.002</factor>
</volume>
<pitch>
<property>rotors/main/rpm</property>
<factor>0.00252</factor>
<offset>0</offset>
<min>0</min>
<max>1.5</max>
</pitch>
<reference-dist>200</reference-dist>
<max-dist>1000</max-dist>
</rotor>
<rotor>
<name>rotor-inside</name>
<mode>looped</mode>
<path>Sounds/rotor.wav</path>
<path>Aircraft/ec135/Sounds/ec_rotor_in.wav</path>
<condition>
<and>
<property>sim/current-view/internal</property>
<greater-than>
<property>rotors/main/rpm</property>
<value>200</value>
</greater-than>
<not>
<property>sim/crashed</property>
</not>
</and>
</condition>
<volume>
<factor>0.5</factor>
</volume>
<volume>
<property>rotors/main/rpm</property>
<factor>0.002</factor>
</volume>
<pitch>
<property>rotors/main/rpm</property>
<factor>0.00252</factor>
<offset>0</offset>
<min>0</min>
<max>1.5</max>
</pitch>
<reference-dist>500</reference-dist>
<max-dist>1000</max-dist>
</rotor>
<rotor>
<name>stall</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/R-1535Slow.wav</path>
<condition>
<and>
<greater-than>
<property>rotors/main/rpm</property>
<value>50</value>
</greater-than>
<not>
<property>sim/crashed</property>
</not>
</and>
</condition>
<volume>
<property>sim/model/ec135/sound/volume</property>
<factor>0.8</factor>
</volume>
<volume>
<property>rotors/main/stall-filtered</property>
<factor>75</factor>
<max>1.0</max>
</volume>
<pitch>
<property>rotors/main/rpm</property>
<factor>0.00252</factor>
<offset>0</offset>
<max>1.75</max>
</pitch>
<reference-dist>500</reference-dist>
<max-dist>1500</max-dist>
</rotor>
<rotor>
<name>blade-vortex-interaction</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/R-1535Slow.wav</path>
<condition>
<greater-than>
<property>sim/sound/vibration</property>
<value>0.01</value>
</greater-than>
</condition>
<volume>
<property>sim/sound/vibration</property>
</volume>
<pitch>
<property>rotors/main/rpm</property>
<factor>0.00252</factor>
<offset>0</offset>
<min>0</min>
<max>1.5</max>
</pitch>
<reference-dist>500</reference-dist>
<max-dist>3000</max-dist>
</rotor>
<overspeed>
<name>overspeed</name>
<mode>looped</mode>
<path>Sounds/overspeed.wav</path>
<condition>
<greater-than>
<property>velocities/airspeed-kt</property>
<value>146</value>
</greater-than>
<equals>
<property>sim/current-view/view-number</property>
<value>0</value>
</equals>
</condition>
<volume>
<factor>1.0</factor>
</volume>
<pitch>
<factor>0.1</factor>
</pitch>
<reference-dist>1.0</reference-dist>
<max-dist>2.0</max-dist>
</overspeed>
<warning>
<name>650 Hz</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/warn650.wav</path>
<condition>
<property>sim/sound/warn650</property>
</condition>
<reference-dist>0.5</reference-dist>
<max-dist>1.0</max-dist>
</warning>
<warning>
<name>2600 Hz</name>
<mode>looped</mode>
<path>Aircraft/ec135/Sounds/warn2600.wav</path>
<condition>
<property>sim/sound/warn2600</property>
</condition>
<reference-dist>0.5</reference-dist>
<max-dist>1.0</max-dist>
</warning>
<contact>
<name>ground contact</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/TC1.wav</path>
<condition>
<property>gear/gear[0]/wow</property>
</condition>
<volume>
<factor>1.0</factor>
</volume>
<pitch>
<factor>0.01</factor>
</pitch>
<reference-dist>5.0</reference-dist>
<max-dist>10.0</max-dist>
</contact>
<contact>
<name>ground contact</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/TC1.wav</path>
<condition>
<property>gear/gear[1]/wow</property>
</condition>
<volume>
<factor>1.0</factor>
</volume>
<pitch>
<factor>0.01</factor>
</pitch>
<reference-dist>5.0</reference-dist>
<max-dist>10.0</max-dist>
</contact>
<contact>
<name>ground contact</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/TC1.wav</path>
<condition>
<property>gear/gear[2]/wow</property>
</condition>
<volume>
<factor>1.0</factor>
</volume>
<pitch>
<factor>0.01</factor>
</pitch>
<reference-dist>5.0</reference-dist>
<max-dist>10.0</max-dist>
</contact>
<contact>
<name>ground contact</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/TC1.wav</path>
<condition>
<property>gear/gear[3]/wow</property>
</condition>
<volume>
<factor>1.0</factor>
</volume>
<pitch>
<factor>0.01</factor>
</pitch>
<reference-dist>5.0</reference-dist>
<max-dist>10.0</max-dist>
</contact>
<contact>
<name>ground contact</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/TC1.wav</path>
<condition>
<property>gear/gear[4]/wow</property>
</condition>
<volume>
<factor>1.0</factor>
</volume>
<pitch>
<factor>0.01</factor>
</pitch>
<reference-dist>5.0</reference-dist>
<max-dist>10.0</max-dist>
</contact>
<contact>
<name>ground contact</name>
<mode>once</mode>
<path>Aircraft/ec135/Sounds/TC1.wav</path>
<condition>
<property>gear/gear[5]/wow</property>
</condition>
<volume>
<factor>1.0</factor>
</volume>
<pitch>
<factor>0.01</factor>
</pitch>
<reference-dist>5.0</reference-dist>
<max-dist>10.0</max-dist>
</contact>
<slide>
<name>skid sliding1</name>
<mode>looped</mode>
<path>Sounds/rumble.wav</path>
<condition>
<and>
<property>gear/gear[0]/wow</property>
<not>
<property>sim/crashed</property>
</not>
</and>
</condition>
<volume>
<factor>0.5</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/slide[0]/volume</property>
<max>1</max>
</volume>
<pitch>
<property>sim/model/ec135/sound/slide[0]/pitch</property>
</pitch>
</slide>
<slide>
<name>skid sliding2</name>
<mode>looped</mode>
<path>Sounds/rumble.wav</path>
<condition>
<and>
<property>gear/gear[1]/wow</property>
<not>
<property>sim/crashed</property>
</not>
</and>
</condition>
<volume>
<factor>0.5</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/slide[1]/volume</property>
<max>1</max>
</volume>
<pitch>
<property>sim/model/ec135/sound/slide[1]/pitch</property>
</pitch>
</slide>
<slide>
<name>skid sliding3</name>
<mode>looped</mode>
<path>Sounds/rumble.wav</path>
<condition>
<and>
<property>gear/gear[2]/wow</property>
<not>
<property>sim/crashed</property>
</not>
</and>
</condition>
<volume>
<factor>0.5</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/slide[2]/volume</property>
<max>1</max>
</volume>
<pitch>
<property>sim/model/ec135/sound/slide[2]/pitch</property>
</pitch>
</slide>
<slide>
<name>skid sliding4</name>
<mode>looped</mode>
<path>Sounds/rumble.wav</path>
<condition>
<and>
<property>gear/gear[3]/wow</property>
<not>
<property>sim/crashed</property>
</not>
</and>
</condition>
<volume>
<factor>0.5</factor>
</volume>
<volume>
<property>sim/model/ec135/sound/slide[3]/volume</property>
<max>1</max>
</volume>
<pitch>
<property>sim/model/ec135/sound/slide[3]/pitch</property>
</pitch>
</slide>
<wind>
<name>wind</name>
<mode>looped</mode>
<path>Sounds/wind.wav</path>
<condition>
<and>
<property>velocities/airspeed-kt</property>
<not>
<property>sim/crashed</property>
</not>
</and>
</condition>
<volume>
<property>position/altitude-ft</property>
<factor>-0.000015</factor>
<offset>1.0</offset>
<min>0.1</min>
<max>1.0</max>
</volume>
<volume>
<property>velocities/airspeed-kt</property>
<factor>0.0015</factor>
<min>0.03</min>
<max>0.25</max>
</volume>
<pitch>
<property>velocities/airspeed-kt</property>
<factor>0.01</factor>
<offset>1.25</offset>
</pitch>
<reference-dist>3</reference-dist>
<max-dist>4</max-dist>
</wind>
<crash>
<name>intense ground contact</name>
<mode>once</mode>
<path>Sounds/crash.wav</path>
<property>sim/crashed</property>
<volume>
<factor>1</factor>
</volume>
<pitch>
<factor>0.1</factor>
</pitch>
<reference-dist>100</reference-dist>
<max-dist>500</max-dist>
</crash>
<door>
<name>close right frontdoor</name>
<mode>once</mode>
<path>Sounds/door_close.wav</path>
<condition>
<equals>
<property>sim/model/ec135/doors/door[0]/position-norm</property>
<value>0</value>
</equals>
</condition>
<position>
<x>1.0</x>
<y>1.5</y>
<z>-1.5</z>
</position>
<volume>
<factor>0.3</factor>
</volume>
<reference-dist>15</reference-dist>
<max-dist>50</max-dist>
</door>
<door>
<name>close left frontdoor</name>
<mode>once</mode>
<path>Sounds/door_close.wav</path>
<condition>
<equals>
<property>sim/model/ec135/doors/door[1]/position-norm</property>
<value>0</value>
</equals>
</condition>
<position>
<x>-1.0</x>
<y>1.5</y>
<z>-1.5</z>
</position>
<volume>
<factor>0.3</factor>
</volume>
<reference-dist>15</reference-dist>
<max-dist>50</max-dist>
</door>
<door>
<name>close right backdoor</name>
<mode>once</mode>
<path>Sounds/door_close.wav</path>
<condition>
<equals>
<property>sim/model/ec135/doors/door[2]/position-norm</property>
<value>0</value>
</equals>
</condition>
<position>
<x>1.0</x>
<y>1.0</y>
<z>-1.5</z>
</position>
<volume>
<factor>0.3</factor>
</volume>
<reference-dist>15</reference-dist>
<max-dist>50</max-dist>
</door>
<door>
<name>close left backdoor</name>
<mode>once</mode>
<path>Sounds/door_close.wav</path>
<condition>
<equals>
<property>sim/model/ec135/doors/door[3]/position-norm</property>
<value>0</value>
</equals>
</condition>
<position>
<x>-1.0</x>
<y>1.0</y>
<z>-1.5</z>
</position>
<volume>
<factor>0.3</factor>
</volume>
<reference-dist>15</reference-dist>
<max-dist>50</max-dist>
</door>
<door>
<name>close right reardoor</name>
<mode>once</mode>
<path>Sounds/door_close.wav</path>
<condition>
<equals>
<property>sim/model/ec135/doors/door[4]/position-norm</property>
<value>0</value>
</equals>
</condition>
<position>
<x>0.0</x>
<y>-1.5</y>
<z>-1.0</z>
</position>
<volume>
<factor>0.3</factor>
</volume>
<reference-dist>15</reference-dist>
<max-dist>50</max-dist>
</door>
<door>
<name>close left reardoor</name>
<mode>once</mode>
<path>Sounds/door_close.wav</path>
<condition>
<equals>
<property>sim/model/ec135/doors/door[5]/position-norm</property>
<value>0</value>
</equals>
</condition>
<position>
<x>0.0</x>
<y>-1.5</y>
<z>-1.0</z>
</position>
<volume>
<factor>0.3</factor>
</volume>
<reference-dist>15</reference-dist>
<max-dist>50</max-dist>
</door>
</fx>
</PropertyList>

View file

@ -74,9 +74,12 @@
<value>Cirrus</value> <value>Cirrus</value>
<value>Cumulus</value> <value>Cumulus</value>
<value>Cumulonimbus</value> <value>Cumulonimbus</value>
<value>Fog (thin)</value>
<value>Fog (thick)</value>
<value>Nimbus</value> <value>Nimbus</value>
<value>Stratus</value> <value>Stratus</value>
<value>Stratus (structured)</value> <value>Stratus (structured)</value>
<value>Stratus (thin)</value>
<binding> <binding>
<command>dialog-apply</command> <command>dialog-apply</command>
</binding> </binding>
@ -236,11 +239,15 @@
<value>Altocumulus</value> <value>Altocumulus</value>
<value>Cirrus</value> <value>Cirrus</value>
<value>Cumulus</value> <value>Cumulus</value>
<value>Cumulus (cloudlet)</value>
<value>Cumulonimbus</value> <value>Cumulonimbus</value>
<value>Cumulonimbus (rain)</value> <value>Cumulonimbus (rain)</value>
<value>Fog (thin)</value>
<value>Fog (thick)</value>
<value>Nimbus</value> <value>Nimbus</value>
<value>Stratus</value> <value>Stratus</value>
<value>Stratus (structured)</value> <value>Stratus (structured)</value>
<value>Stratus (thin)</value>
<binding> <binding>
<command>dialog-apply</command> <command>dialog-apply</command>
</binding> </binding>
@ -647,10 +654,14 @@
<value>Altocumulus</value> <value>Altocumulus</value>
<value>Cirrus</value> <value>Cirrus</value>
<value>Cumulus</value> <value>Cumulus</value>
<value>Cumulus (cloudlet)</value>
<value>Cumulonimbus</value> <value>Cumulonimbus</value>
<value>Fog (thin)</value>
<value>Fog (thick)</value>
<value>Nimbus</value> <value>Nimbus</value>
<value>Stratus</value> <value>Stratus</value>
<value>Stratus (structured)</value> <value>Stratus (structured)</value>
<value>Stratus (thin)</value>
<binding> <binding>
<command>dialog-apply</command> <command>dialog-apply</command>
</binding> </binding>

View file

@ -24,14 +24,23 @@
<height>25</height> <height>25</height>
<live>true</live> <live>true</live>
<property>/local-weather/tmp/tile-type</property> <property>/local-weather/tmp/tile-type</property>
<value>Altocumulus sky</value> <value>High-pressure-core</value>
<value>Broken layers</value> <value>High-pressure</value>
<value>Cirrus sky</value> <value>High-pressure-border</value>
<value>Fair weather</value> <value>Low-pressure-border</value>
<value>Low-pressure</value>
<value>Low-pressure-core</value>
<value>---</value>
<!--<value>Altocumulus sky</value>-->
<!--<value>Broken layers</value>-->
<!--<value>Cirrus sky</value>-->
<!--<value>Fair weather</value>-->
<value>Glider's sky</value> <value>Glider's sky</value>
<value>Incoming rainfront</value> <value>Blue thermals</value>
<value>Overcast stratus sky</value> <!--<value>Incoming rainfront</value>-->
<value>Summer rain</value> <!--<value>8/8 stratus sky</value>-->
<!--<value>Test tile</value>-->
<!--<value>Summer rain</value>-->
<binding> <binding>
<command>dialog-apply</command> <command>dialog-apply</command>
</binding> </binding>
@ -44,27 +53,96 @@
</text> </text>
<input> <input>
<x>120</x> <x>115</x>
<y>170</y> <y>170</y>
<width>50</width> <width>40</width>
<height>25</height> <height>25</height>
<property>/local-weather/tmp/tile-orientation-deg</property> <property>/local-weather/tmp/tile-orientation-deg</property>
</input> </input>
<text> <text>
<x>170</x> <x>155</x>
<y>170</y> <y>170</y>
<label>alt. offset (ft)</label> <label>alt. offset (ft)</label>
</text> </text>
<input> <input>
<x>250</x> <x>240</x>
<y>170</y> <y>170</y>
<width>40</width> <width>50</width>
<height>25</height> <height>25</height>
<property>/local-weather/tmp/tile-alt-offset-ft</property> <property>/local-weather/tmp/tile-alt-offset-ft</property>
</input> </input>
<text>
<x>10</x>
<y>130</y>
<label>tile selection mode</label>
</text>
<combo>
<x>150</x>
<y>130</y>
<width>140</width>
<height>25</height>
<live>true</live>
<property>/local-weather/tmp/tile-management</property>
<value>single tile</value>
<value>repeat tile</value>
<value>realistic weather</value>
<binding>
<command>dialog-apply</command>
</binding>
</combo>
<checkbox>
<x>10</x>
<y>90</y>
<width>15</width>
<height>15</height>
<label>Terrain presampling</label>
<property>/local-weather/tmp/presampling-flag</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
<checkbox>
<x>150</x>
<y>90</y>
<width>15</width>
<height>15</height>
<label>Worker threads</label>
<property>/local-weather/tmp/thread-flag</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
<checkbox>
<x>10</x>
<y>60</y>
<width>15</width>
<height>15</height>
<label>asymmetric range</label>
<property>/local-weather/tmp/asymmetric-tile-loading-flag</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
<checkbox>
<x>150</x>
<y>60</y>
<width>15</width>
<height>15</height>
<label>detailed clouds</label>
<property>/local-weather/config/detailed-clouds-flag</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
<group> <group>
<x>10</x> <x>10</x>
<y>10</y> <y>10</y>

654
gui/menubar.xml.alt Normal file
View file

@ -0,0 +1,654 @@
<PropertyList>
<menu>
<label>File</label>
<item>
<label>Load</label>
<binding>
<command>nasal</command>
<script>gui.load_flight()</script>
</binding>
</item>
<item>
<label>Save</label>
<binding>
<command>nasal</command>
<script>gui.save_flight()</script>
</binding>
</item>
<item>
<label>Reset</label>
<binding>
<command>reset</command>
</binding>
</item>
<item>
<label>High-Res Snapshot</label>
<enabled>false</enabled>
<binding>
<command>hires-screen-capture</command>
</binding>
</item>
<item>
<label>Snapshot</label>
<binding>
<command>nasal</command>
<script>
var success = fgcommand("screen-capture");
var path = getprop("/sim/paths/screenshot-last");
if (success)
gui.popupTip("Screenshot written to '" ~ path ~ "'");
else
gui.popupTip("Error writing screenshot '" ~ path ~ "'");
</script>
</binding>
</item>
<item>
<label>Print Screen</label>
<binding>
<command>old-print-dialog</command>
</binding>
</item>
<item>
<label>Sound Configuration</label>
<binding>
<command>dialog-show</command>
<dialog-name>sound-dialog</dialog-name>
</binding>
</item>
<item>
<label>Browse Internal Properties</label>
<binding>
<command>nasal</command>
<script>gui.property_browser()</script>
</binding>
</item>
<item>
<label>Logging</label>
<binding>
<command>dialog-show</command>
<dialog-name>logging</dialog-name>
</binding>
</item>
<item>
<label>Quit</label>
<binding>
<command>dialog-show</command>
<dialog-name>exit</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>View</label>
<item>
<label>Display Options</label>
<binding>
<command>dialog-show</command>
<dialog-name>display</dialog-name>
</binding>
</item>
<item>
<label>Rendering Options</label>
<binding>
<command>dialog-show</command>
<dialog-name>rendering</dialog-name>
</binding>
</item>
<item>
<label>View Options</label>
<binding>
<command>dialog-show</command>
<dialog-name>view</dialog-name>
</binding>
</item>
<item>
<label>Cockpit View Options</label>
<binding>
<command>dialog-show</command>
<dialog-name>cockpit-view</dialog-name>
</binding>
</item>
<item>
<label>Adjust View Position</label>
<binding>
<command>dialog-show</command>
<dialog-name>pilot_offset</dialog-name>
</binding>
</item>
<item>
<label>Adjust HUD Properties</label>
<binding>
<command>dialog-show</command>
<dialog-name>hud</dialog-name>
</binding>
</item>
<item>
<label>Instant Replay</label>
<binding>
<command>dialog-show</command>
<dialog-name>replay</dialog-name>
</binding>
</item>
<item>
<label>Adjust LOD Ranges</label>
<binding>
<command>dialog-show</command>
<dialog-name>static-lod</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>Location</label>
<item>
<label>Position Aircraft (on ground)</label>
<binding>
<command>dialog-show</command>
<dialog-name>location-on-ground</dialog-name>
</binding>
</item>
<item>
<label>Position Aircraft (in air)</label>
<binding>
<command>dialog-show</command>
<dialog-name>location-in-air</dialog-name>
</binding>
</item>
<item>
<label>Select Airport from List</label>
<binding>
<command>dialog-show</command>
<dialog-name>airports</dialog-name>
</binding>
</item>
<item>
<label>Random Attitude</label>
<binding>
<command>property-assign</command>
<property>/sim/presets/trim</property>
<value>false</value>
</binding>
<binding>
<command>property-randomize</command>
<property>/orientation/pitch-deg</property>
<min>0</min>
<max>360</max>
</binding>
<binding>
<command>property-randomize</command>
<property>/orientation/roll-deg</property>
<min>0</min>
<max>360</max>
</binding>
<binding>
<command>property-randomize</command>
<property>/orientation/heading-deg</property>
<min>0</min>
<max>360</max>
</binding>
</item>
<item>
<label>Tower position</label>
<binding>
<command>dialog-show</command>
<dialog-name>location-of-tower</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>Autopilot</label>
<name>autopilot</name>
<item>
<label>Autopilot Settings</label>
<binding>
<command>dialog-show</command>
<dialog-name>autopilot</dialog-name>
</binding>
</item>
<item>
<label>Route Manager</label>
<binding>
<command>dialog-show</command>
<dialog-name>route-manager</dialog-name>
</binding>
</item>
<item>
<label>Pop Waypoint</label>
<binding>
<command>nasal</command>
<script>setprop("/autopilot/route-manager/input", "@pop")</script>
</binding>
</item>
<item>
<label>Clear Route</label>
<binding>
<command>nasal</command>
<script>setprop("/autopilot/route-manager/input", "@clear")</script>
</binding>
</item>
<item>
<label>Set Lat/Lon Format</label>
<binding>
<command>nasal</command>
<script>
var f = getprop(var d = "/sim/lon-lat-format") + 1;
setprop(d, f &lt; 0 ? 0 : f > 2 ? 0 : f);
</script>
</binding>
</item>
</menu>
<menu>
<label>Environment</label>
<item>
<label>Weather Scenario</label>
<binding>
<command>dialog-show</command>
<dialog-name>weather_scenario</dialog-name>
</binding>
</item>
<item>
<label>Weather Conditions</label>
<binding>
<command>dialog-show</command>
<dialog-name>weather</dialog-name>
</binding>
</item>
<item>
<label>Clouds</label>
<binding>
<command>dialog-show</command>
<dialog-name>clouds</dialog-name>
</binding>
</item>
<item>
<label>Time Settings</label>
<binding>
<command>dialog-show</command>
<dialog-name>timeofday</dialog-name>
</binding>
</item>
<item>
<label>Rain/Snow Settings</label>
<binding>
<command>dialog-show</command>
<dialog-name>rainsnow</dialog-name>
</binding>
</item>
<item>
<label>Wildfire Settings</label>
<binding>
<command>nasal</command>
<script>wildfire.dialog.show()</script>
</binding>
</item>
<item>
<label>Local Weather</label>
<binding>
<command>dialog-show</command>
<dialog-name>local_weather</dialog-name>
</binding>
</item>
<item>
<label>Local Weather Tiles</label>
<binding>
<command>dialog-show</command>
<dialog-name>local_weather_tiles</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>Equipment</label>
<item>
<label>Fuel and Payload</label>
<name>fuel-and-payload</name>
<binding>
<command>nasal</command>
<script>gui.showWeightDialog()</script>
</binding>
</item>
<item>
<label>Radio Settings</label>
<binding>
<command>dialog-show</command>
<dialog-name>radios</dialog-name>
</binding>
</item>
<item>
<label>GPS Settings</label>
<binding>
<command>dialog-show</command>
<dialog-name>gps</dialog-name>
</binding>
</item>
<item>
<label>Instrument Settings</label>
<binding>
<command>dialog-show</command>
<dialog-name>instruments</dialog-name>
</binding>
</item>
<item>
<label>Stopwatch</label>
<binding>
<command>dialog-show</command>
<dialog-name>stopwatch-dialog</dialog-name>
</binding>
</item>
<item>
<label>Random Failures</label>
<binding>
<command>dialog-show</command>
<dialog-name>random-failures</dialog-name>
</binding>
</item>
<item>
<label>System Failures</label>
<binding>
<command>dialog-show</command>
<dialog-name>system-failures</dialog-name>
</binding>
</item>
<item>
<label>Instrument Failures</label>
<binding>
<command>dialog-show</command>
<dialog-name>instrument-failures</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>ATC/AI</label>
<item>
<label>Frequencies</label>
<binding>
<command>ATC-freq-search</command>
</binding>
</item>
<item>
<label>Options</label>
<binding>
<command>dialog-show</command>
<dialog-name>atc-ai</dialog-name>
</binding>
</item>
<item>
<label>Tanker</label>
<name>tanker</name>
<enabled>false</enabled>
<binding>
<command>dialog-show</command>
<dialog-name>tanker</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>Network</label>
<name>multiplayer</name>
<item>
<label>Chat</label>
<binding>
<command>dialog-show</command>
<dialog-name>chat-full</dialog-name>
</binding>
</item>
<item>
<label>Chat Menu</label>
<binding>
<command>dialog-show</command>
<dialog-name>chat-menu</dialog-name>
</binding>
</item>
<item>
<label>Pilot List</label>
<binding>
<command>nasal</command>
<script>multiplayer.dialog.show()</script>
</binding>
</item>
<item>
<label>MPCarrier selection</label>
<binding>
<command>nasal</command>
<script>
if (contains(globals, "MPCarriers")) {
MPCarriers.carrier_dialog.show();
} else {
gui.popupTip("No MPCarriers around at the moment.");
}
</script>
</binding>
</item>
</menu>
<menu>
<label>Debug</label>
<item>
<label>Reload GUI</label>
<binding>
<command>reinit</command>
<subsystem>gui</subsystem>
</binding>
</item>
<item>
<label>Reload Input</label>
<binding>
<command>reinit</command>
<subsystem>input</subsystem>
</binding>
</item>
<item>
<label>Reload Panel</label>
<binding>
<command>panel-load</command>
</binding>
</item>
<item>
<label>Reload Autopilot</label>
<binding>
<command>reinit</command>
<subsystem>xml-autopilot</subsystem>
</binding>
</item>
<item>
<label>Reload Network</label>
<binding>
<command>reinit</command>
<subsystem>io</subsystem>
</binding>
</item>
<item>
<label>Nasal Console</label>
<binding>
<command>dialog-show</command>
<dialog-name>nasal-console</dialog-name>
</binding>
</item>
<item>
<label>Development Keys</label>
<binding>
<command>nasal</command>
<script>gui.showHelpDialog("/sim/help/debug")</script>
</binding>
</item>
<item>
<label>Configure Development Extensions</label>
<binding>
<command>dialog-show</command>
<dialog-name>devel-extensions</dialog-name>
</binding>
</item>
<item>
<label>Display Tutorial Marker</label>
<binding>
<command>nasal</command>
<script>tutorial.dialog()</script>
</binding>
</item>
<item>
<label>Dump Scene Graph</label>
<binding>
<command>dump-scenegraph</command>
</binding>
</item>
<item>
<label>Print Statistics</label>
<binding>
<command>property-assign</command>
<property>/sim/rendering/print-statistics</property>
<value>true</value>
</binding>
</item>
<item>
<label>Cycle On-Screen Statistics</label>
<binding>
<command>property-adjust</command>
<property>/sim/rendering/on-screen-statistics</property>
<step type="int">1</step>
</binding>
</item>
</menu>
<menu>
<label>Help</label>
<item>
<label>Help</label>
<binding>
<command>old-help-dialog</command>
</binding>
</item>
<item>
<label>Joystick Information</label>
<name>joystick-info</name>
<binding>
<command>dialog-show</command>
<dialog-name>joystick-info</dialog-name>
</binding>
</item>
<item>
<label>Basic Keys</label>
<binding>
<command>nasal</command>
<script>gui.showHelpDialog("/sim/help/basic")</script>
</binding>
</item>
<item>
<label>Common Aircraft Keys</label>
<binding>
<command>nasal</command>
<script>gui.showHelpDialog("/sim/help/common")</script>
</binding>
</item>
<item>
<label>Aircraft Help</label>
<binding>
<command>nasal</command>
<script>gui.showHelpDialog("/sim/help")</script>
</binding>
</item>
<item>
<label>Toggle Glide Slope Tunnel</label>
<binding>
<command>nasal</command>
<script>
var p = "/sim/rendering/glide-slope-tunnel";
setprop(p, var i = !getprop(p));
gui.popupTip("Glide slope tunnel " ~ (i ? "enabled" : "disabled"));
</script>
</binding>
</item>
<item>
<label>Start Tutorial</label>
<name>tutorial-start</name>
<binding>
<command>dialog-show</command>
<dialog-name>tutorial</dialog-name>
</binding>
</item>
<item>
<label>End Tutorial</label>
<name>tutorial-stop</name>
<enabled>false</enabled>
<binding>
<command>nasal</command>
<script>tutorial.stopTutorial()</script>
</binding>
</item>
</menu>
</PropertyList>

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

View file

@ -1,58 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<path>gh14391.ac</path>
<animation>
<type>rotate</type>
<object-name>ball</object-name>
<property>/orientation/roll-deg</property>
<center>
<x-m>-0.075</x-m>
<y-m>0.00</y-m>
<z-m>0.002</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>Circle</object-name>
<property>/orientation/roll-deg</property>
<center>
<x-m>0.007</x-m>
<y-m>0.00</y-m>
<z-m>0.002</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>ball</object-name>
<property>/orientation/pitch-deg</property>
<factor>0.5</factor>
<center>
<x-m>-0.075</x-m>
<y-m>0.00</y-m>
<z-m>0.002</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
</PropertyList>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 618 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

View file

@ -1,68 +0,0 @@
<?xml version="1.0"?>
<!--
Standby Gyro
Syd Adams
-->
<PropertyList>
<path>STBYai.ac</path>
<animation>
<type>texmultiple</type>
<object-name>STBYai.ball</object-name>
<transform>
<property>instrumentation/attitude-indicator/indicated-pitch-deg</property>
<subtype>textranslate</subtype>
<factor>0.003667</factor>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</transform>
<transform>
<property>instrumentation/attitude-indicator/indicated-roll-deg</property>
<subtype>texrotate</subtype>
<center>
<x>0.25</x>
<y>0.50</y>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>-1</z>
</axis>
</transform>
</animation>
<animation>
<type>rotate</type>
<object-name>STBYai.rollneedle</object-name>
<property>instrumentation/attitude-indicator/indicated-roll-deg</property>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</center>
</animation>
<animation>
<type>pick</type>
<object-name>STBYai.cage</object-name>
<visible>true</visible>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-toggle</command>
<property>instrumentation/attitude-indicator/caged</property>
</binding>
</action>
</animation>
</PropertyList>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

View file

@ -1,159 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<path>alt2.ac</path>
<animation>
<type>material</type>
<object-name>ALTface</object-name>
<object-name>needle100</object-name>
<object-name>needle1000</object-name>
<object-name>needle10000</object-name>
<object-name>inhg</object-name>
<object-name>InhgKnob</object-name>
<emission>
<red>0.028</red>
<green>0.014</green>
<blue>0.007</blue>
<factor-prop>systems/electrical/outputs/instrument-lights</factor-prop>
</emission>
</animation>
<animation>
<type>rotate</type>
<object-name>needle100</object-name>
<property>instrumentation/altimeter/indicated-altitude-ft</property>
<factor>0.36</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>needle1000</object-name>
<property>instrumentation/altimeter/indicated-altitude-ft</property>
<factor>0.036</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>needle10000</object-name>
<property>instrumentation/altimeter/indicated-altitude-ft</property>
<factor>0.0036</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>texrotate</type>
<object-name>inhg</object-name>
<property>instrumentation/altimeter/setting-inhg</property>
<interpolation>
<entry><ind>27.90</ind><dep>0.0</dep></entry>
<entry><ind>28.0</ind><dep>9.35</dep></entry>
<entry><ind>28.5</ind><dep>59.0</dep></entry>
<entry><ind>29.0</ind><dep>109.0</dep></entry>
<entry><ind>29.5</ind><dep>159.5</dep></entry>
<entry><ind>29.9</ind><dep>200.0</dep></entry>
<entry><ind>30.0</ind><dep>210.0</dep></entry>
<entry><ind>30.5</ind><dep>261.0</dep></entry>
<entry><ind>31.0</ind><dep>310.0</dep></entry>
<entry><ind>31.4</ind><dep>350.0</dep></entry>
</interpolation>
<center>
<x>0.25</x>
<y>0.25</y>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>-1</z>
</axis>
</animation>
<animation>
<type>pick</type>
<object-name>inhg.dn</object-name>
<visible>0</visible>
<action>
<button>0</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/altimeter/setting-inhg</property>
<step>-0.01</step>
<min>27.90</min>
<max>31.40</max>
<wrap>0</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>inhg.dn</object-name>
<visible>0</visible>
<action>
<button>1</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/altimeter/setting-inhg</property>
<step>-0.1</step>
<min>27.90</min>
<max>31.40</max>
<wrap>0</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>inhg.up</object-name>
<visible>0</visible>
<action>
<button>0</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/altimeter/setting-inhg</property>
<step>0.01</step>
<min>27.90</min>
<max>31.40</max>
<wrap>0</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>inhg.up</object-name>
<visible>0</visible>
<action>
<button>1</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/altimeter/setting-inhg</property>
<step>0.1</step>
<min>27.90</min>
<max>31.40</max>
<wrap>0</wrap>
</binding>
</action>
</animation>
</PropertyList>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

View file

@ -1,159 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<path>alt2.ac</path>
<animation>
<type>material</type>
<object-name>ALTface</object-name>
<object-name>needle100</object-name>
<object-name>needle1000</object-name>
<object-name>needle10000</object-name>
<object-name>inhg</object-name>
<object-name>InhgKnob</object-name>
<emission>
<red>0.028</red>
<green>0.014</green>
<blue>0.007</blue>
<factor-prop>systems/electrical/outputs/instrument-lights</factor-prop>
</emission>
</animation>
<animation>
<type>rotate</type>
<object-name>needle100</object-name>
<property>instrumentation/altimeter/indicated-altitude-ft</property>
<factor>0.36</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>needle1000</object-name>
<property>instrumentation/altimeter/indicated-altitude-ft</property>
<factor>0.036</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>needle10000</object-name>
<property>instrumentation/altimeter/indicated-altitude-ft</property>
<factor>0.0036</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>texrotate</type>
<object-name>inhg</object-name>
<property>instrumentation/altimeter/setting-inhg</property>
<interpolation>
<entry><ind>27.90</ind><dep>0.0</dep></entry>
<entry><ind>28.0</ind><dep>9.35</dep></entry>
<entry><ind>28.5</ind><dep>59.0</dep></entry>
<entry><ind>29.0</ind><dep>109.0</dep></entry>
<entry><ind>29.5</ind><dep>159.5</dep></entry>
<entry><ind>29.9</ind><dep>200.0</dep></entry>
<entry><ind>30.0</ind><dep>210.0</dep></entry>
<entry><ind>30.5</ind><dep>261.0</dep></entry>
<entry><ind>31.0</ind><dep>310.0</dep></entry>
<entry><ind>31.4</ind><dep>350.0</dep></entry>
</interpolation>
<center>
<x>0.25</x>
<y>0.25</y>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>-1</z>
</axis>
</animation>
<animation>
<type>pick</type>
<object-name>inhg.dn</object-name>
<visible>0</visible>
<action>
<button>0</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/altimeter/setting-inhg</property>
<step>-0.01</step>
<min>27.90</min>
<max>31.40</max>
<wrap>0</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>inhg.dn</object-name>
<visible>0</visible>
<action>
<button>1</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/altimeter/setting-inhg</property>
<step>-0.1</step>
<min>27.90</min>
<max>31.40</max>
<wrap>0</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>inhg.up</object-name>
<visible>0</visible>
<action>
<button>0</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/altimeter/setting-inhg</property>
<step>0.01</step>
<min>27.90</min>
<max>31.40</max>
<wrap>0</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>inhg.up</object-name>
<visible>0</visible>
<action>
<button>1</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/altimeter/setting-inhg</property>
<step>0.1</step>
<min>27.90</min>
<max>31.40</max>
<wrap>0</wrap>
</binding>
</action>
</animation>
</PropertyList>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

View file

@ -1,117 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<path>asi.ac</path>
<animation>
<type>material</type>
<object-name>face.006</object-name>
<object-name>asi-needle1</object-name>
<emission>
<red>0.028</red>
<green>0.014</green>
<blue>0.007</blue>
<factor-prop>systems/electrical/outputs/instrument-lights</factor-prop>
</emission>
</animation>
<animation>
<type>rotate</type>
<object-name>asi-needle1</object-name>
<property>/instrumentation/airspeed-indicator/indicated-speed-kt</property>
<interpolation>
<entry>
<ind>-999</ind>
<dep> 0</dep>
</entry>
<entry>
<ind> 0</ind>
<dep> -5</dep>
</entry>
<entry>
<ind> 10</ind>
<dep> 4</dep>
</entry>
<entry>
<ind> 20</ind>
<dep> 13</dep>
</entry>
<entry>
<ind> 30</ind>
<dep> 35</dep>
</entry>
<entry>
<ind> 40</ind>
<dep>65</dep>
</entry>
<entry>
<ind> 50</ind>
<dep>95</dep>
</entry>
<entry>
<ind> 60</ind>
<dep>125</dep>
</entry>
<entry>
<ind> 70</ind>
<dep>158</dep>
</entry>
<entry>
<ind> 80</ind>
<dep>188</dep>
</entry>
<entry>
<ind> 90</ind>
<dep>205</dep>
</entry>
<entry>
<ind> 100</ind>
<dep>219</dep>
</entry>
<entry>
<ind> 110</ind>
<dep>232</dep>
</entry>
<entry>
<ind> 120</ind>
<dep>246</dep>
</entry>
<entry>
<ind> 130</ind>
<dep>263</dep>
</entry>
<entry>
<ind> 140</ind>
<dep>274</dep>
</entry>
<entry>
<ind> 150</ind>
<dep>289</dep>
</entry>
<entry>
<ind> 160</ind>
<dep>302</dep>
</entry>
<entry>
<ind> 170</ind>
<dep>316</dep>
</entry>
<entry>
<ind> 180</ind>
<dep>330</dep>
</entry>
<entry>
<ind> 220</ind>
<dep>360</dep>
</entry>
</interpolation>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
</PropertyList>

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 KiB

View file

@ -1,4 +0,0 @@
<PropertyList>
<path>cad.ac</path>
</PropertyList>

View file

@ -1,555 +0,0 @@
AC3Db
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
OBJECT world
kids 1
OBJECT poly
name "buttons"
data 8
Cube.001
texture "cata_button.png"
texrep 1 1
crease 80.000000
numvert 80
0.010491 0.010305 -0.048625
0.010491 -0.010677 -0.048625
-0.010491 -0.010677 -0.048625
-0.010491 0.010305 -0.048625
0.010491 -0.010677 -0.025644
0.010491 0.010305 -0.025644
-0.010491 0.010305 -0.025644
-0.010491 -0.010677 -0.025644
0.011491 -0.010677 -0.047625
0.011491 0.010305 -0.047625
0.011491 0.010305 -0.026644
0.011491 -0.010677 -0.026644
0.010491 0.011305 -0.047625
-0.010491 0.011305 -0.047625
-0.010491 0.011305 -0.026644
0.010491 0.011305 -0.026644
0.010491 -0.011677 -0.047625
0.010491 -0.011677 -0.026644
-0.010491 -0.011677 -0.026644
-0.010491 -0.011677 -0.047625
0.010491 -0.011677 0.026529
0.010491 -0.011677 0.047511
-0.010491 -0.011677 0.047511
-0.010491 -0.011677 0.026529
0.010491 0.011305 0.026529
-0.010491 0.011305 0.026529
-0.010491 0.011305 0.047511
0.010491 0.011305 0.047511
0.011491 -0.010677 0.026529
0.011491 0.010305 0.026529
0.011491 0.010305 0.047511
0.011491 -0.010677 0.047511
0.010491 -0.010677 0.048511
0.010491 0.010305 0.048511
-0.010491 0.010305 0.048511
-0.010491 -0.010677 0.048511
0.010491 0.010305 0.025529
0.010491 -0.010677 0.025529
-0.010491 -0.010677 0.025529
-0.010491 0.010305 0.025529
0.010491 0.010305 0.000856
0.010491 -0.010677 0.000856
-0.010491 -0.010677 0.000856
-0.010491 0.010305 0.000856
0.010491 -0.010677 0.023838
0.010491 0.010305 0.023838
-0.010491 0.010305 0.023838
-0.010491 -0.010677 0.023838
0.011491 -0.010677 0.001856
0.011491 0.010305 0.001856
0.011491 0.010305 0.022838
0.011491 -0.010677 0.022838
0.010491 0.011305 0.001856
-0.010491 0.011305 0.001856
-0.010491 0.011305 0.022838
0.010491 0.011305 0.022838
0.010491 -0.011677 0.001856
0.010491 -0.011677 0.022838
-0.010491 -0.011677 0.022838
-0.010491 -0.011677 0.001856
0.010491 -0.011677 -0.022983
0.010491 -0.011677 -0.002001
-0.010491 -0.011677 -0.002001
-0.010491 -0.011677 -0.022983
0.010491 0.011305 -0.022983
-0.010491 0.011305 -0.022983
-0.010491 0.011305 -0.002001
0.010491 0.011305 -0.002001
0.011491 -0.010677 -0.022983
0.011491 0.010305 -0.022983
0.011491 0.010305 -0.002001
0.011491 -0.010677 -0.002001
0.010491 -0.010677 -0.001001
0.010491 0.010305 -0.001001
-0.010491 0.010305 -0.001001
-0.010491 -0.010677 -0.001001
0.010491 0.010305 -0.023983
0.010491 -0.010677 -0.023983
-0.010491 -0.010677 -0.023983
-0.010491 0.010305 -0.023983
numsurf 68
SURF 0x10
mat 1
refs 4
0 0.385183900595 0.577537238598
1 0.385183900595 0.536138296127
2 0.374834150076 0.536138355732
3 0.374834150076 0.577537238598
SURF 0x10
mat 1
refs 4
4 0.385183900595 0.536138355732
5 0.385183900595 0.577537238598
6 0.374834150076 0.577537238598
7 0.374834150076 0.536138355732
SURF 0x10
mat 1
refs 4
8 0.985666334629 0.0524915345013
9 0.985666334629 0.917184531689
10 0.803651750088 0.917184531689
11 0.803651750088 0.0524915345013
SURF 0x10
mat 1
refs 4
12 0.385183900595 0.579510390759
13 0.374834150076 0.579510390759
14 0.374834150076 0.579510450363
15 0.385183900595 0.579510450363
SURF 0x10
mat 1
refs 4
16 0.385183900595 0.534165143967
17 0.385183900595 0.534165143967
18 0.374834150076 0.534165143967
19 0.374834150076 0.534165143967
SURF 0x10
mat 1
refs 4
10 0.803651750088 0.917184531689
9 0.985666334629 0.917184531689
12 0.985666334629 0.958398044109
15 0.803651750088 0.958398044109
SURF 0x10
mat 1
refs 4
12 0.385183900595 0.579510390759
0 0.385183900595 0.577537238598
3 0.374834150076 0.577537238598
13 0.374834150076 0.579510390759
SURF 0x10
mat 1
refs 4
2 0.374834150076 0.536138355732
1 0.385183900595 0.536138296127
16 0.385183900595 0.534165143967
19 0.374834150076 0.534165143967
SURF 0x10
mat 1
refs 4
0 0.99586635828 0.917184531689
9 0.985666334629 0.917184531689
8 0.985666334629 0.0524915345013
1 0.99586635828 0.0524915345013
SURF 0x10
mat 1
refs 4
5 0.793451607227 0.917184531689
4 0.793451607227 0.0524915345013
11 0.803651750088 0.0524915345013
10 0.803651750088 0.917184531689
SURF 0x10
mat 1
refs 4
7 0.374834150076 0.536138355732
18 0.374834150076 0.534165143967
17 0.385183900595 0.534165143967
4 0.385183900595 0.536138355732
SURF 0x10
mat 1
refs 4
6 0.374834150076 0.577537238598
5 0.385183900595 0.577537238598
15 0.385183900595 0.579510450363
14 0.374834150076 0.579510450363
SURF 0x10
mat 1
refs 4
11 0.803651750088 0.0524915345013
17 0.803651750088 0.011277128011
16 0.985666334629 0.011277128011
8 0.985666334629 0.0524915345013
SURF 0x10
mat 1
refs 3
5 0.793451607227 0.917184531689
10 0.803651750088 0.917184531689
15 0.803651750088 0.958398044109
SURF 0x10
mat 1
refs 3
17 0.803651750088 0.011277128011
11 0.803651750088 0.0524915345013
4 0.793451607227 0.0524915345013
SURF 0x10
mat 1
refs 3
1 0.99586635828 0.0524915345013
8 0.985666334629 0.0524915345013
16 0.985666334629 0.011277128011
SURF 0x10
mat 1
refs 3
0 0.99586635828 0.917184531689
12 0.985666334629 0.958398044109
9 0.985666334629 0.917184531689
SURF 0x10
mat 1
refs 4
20 0.385183900595 0.534165203571
21 0.385183900595 0.534165263176
22 0.374834150076 0.534165263176
23 0.374834150076 0.534165203571
SURF 0x10
mat 1
refs 4
24 0.385183900595 0.579510509968
25 0.374834150076 0.579510509968
26 0.374834150076 0.579510509968
27 0.385183900595 0.579510509968
SURF 0x10
mat 1
refs 4
28 0.219279453158 0.0524915345013
29 0.219279453158 0.917184531689
30 0.0152650475502 0.917184531689
31 0.0152650475502 0.0524915345013
SURF 0x10
mat 1
refs 4
32 0.385183900595 0.536138415337
33 0.385183900595 0.577537357807
34 0.374834150076 0.577537357807
35 0.374834150076 0.536138415337
SURF 0x10
mat 1
refs 4
36 0.385183900595 0.577537298203
37 0.385183900595 0.536138415337
38 0.374834150076 0.536138415337
39 0.374834150076 0.577537298203
SURF 0x10
mat 1
refs 4
40 0.385183900595 0.577537238598
41 0.385183900595 0.536138415337
42 0.374834150076 0.536138415337
43 0.374834150076 0.577537238598
SURF 0x10
mat 1
refs 4
44 0.385183900595 0.536138415337
45 0.385183900595 0.577537298203
46 0.374834150076 0.577537298203
47 0.374834150076 0.536138415337
SURF 0x10
mat 1
refs 4
48 0.474948495626 0.0524915345013
49 0.474948495626 0.917184531689
50 0.266934156418 0.917184531689
51 0.266934156418 0.0524915345013
SURF 0x10
mat 1
refs 4
52 0.385183900595 0.579510509968
53 0.374834150076 0.579510509968
54 0.374834150076 0.579510509968
55 0.385183900595 0.579510509968
SURF 0x10
mat 1
refs 4
56 0.385183900595 0.534165143967
57 0.385183900595 0.534165203571
58 0.374834150076 0.534165203571
59 0.374834150076 0.534165143967
SURF 0x10
mat 1
refs 4
60 0.385183900595 0.534165143967
61 0.385183900595 0.534165143967
62 0.374834150076 0.534165143967
63 0.374834150076 0.534165143967
SURF 0x10
mat 1
refs 4
64 0.385183900595 0.579510450363
65 0.374834150076 0.579510450363
66 0.374834150076 0.579510509968
67 0.385183900595 0.579510450363
SURF 0x10
mat 1
refs 4
68 0.732308506966 0.0524915345013
69 0.732308506966 0.917184531689
70 0.536294043064 0.917184531689
71 0.536294043064 0.0524915345013
SURF 0x10
mat 1
refs 4
72 0.385183900595 0.536138415337
73 0.385183900595 0.577537238598
74 0.374834150076 0.577537238598
75 0.374834150076 0.536138415337
SURF 0x10
mat 1
refs 4
76 0.385183900595 0.577537238598
77 0.385183900595 0.536138355732
78 0.374834150076 0.536138355732
79 0.374834150076 0.577537238598
SURF 0x10
mat 1
refs 4
24 0.219279453158 0.958398044109
27 0.0152650475502 0.958398044109
30 0.0152650475502 0.917184531689
29 0.219279453158 0.917184531689
SURF 0x10
mat 1
refs 4
42 0.374834150076 0.536138415337
41 0.385183900595 0.536138415337
56 0.385183900595 0.534165143967
59 0.374834150076 0.534165143967
SURF 0x10
mat 1
refs 4
43 0.374834150076 0.577537238598
53 0.374834150076 0.579510509968
52 0.385183900595 0.579510509968
40 0.385183900595 0.577537238598
SURF 0x10
mat 1
refs 4
67 0.385183900595 0.579510450363
66 0.374834150076 0.579510509968
74 0.374834150076 0.577537238598
73 0.385183900595 0.577537238598
SURF 0x10
mat 1
refs 4
20 0.219279453158 0.011277128011
28 0.219279453158 0.0524915345013
31 0.0152650475502 0.0524915345013
21 0.0152650475502 0.011277128011
SURF 0x10
mat 1
refs 4
51 0.266934156418 0.0524915345013
57 0.266934156418 0.011277128011
56 0.474948495626 0.011277128011
48 0.474948495626 0.0524915345013
SURF 0x10
mat 1
refs 4
46 0.374834150076 0.577537298203
45 0.385183900595 0.577537298203
55 0.385183900595 0.579510509968
54 0.374834150076 0.579510509968
SURF 0x10
mat 1
refs 4
47 0.374834150076 0.536138415337
58 0.374834150076 0.534165203571
57 0.385183900595 0.534165203571
44 0.385183900595 0.536138415337
SURF 0x10
mat 1
refs 4
64 0.385183900595 0.579510450363
76 0.385183900595 0.577537238598
79 0.374834150076 0.577537238598
65 0.374834150076 0.579510450363
SURF 0x10
mat 1
refs 4
61 0.385183900595 0.534165143967
72 0.385183900595 0.536138415337
75 0.374834150076 0.536138415337
62 0.374834150076 0.534165143967
SURF 0x10
mat 1
refs 4
50 0.266934156418 0.917184531689
49 0.474948495626 0.917184531689
52 0.474948495626 0.958398044109
55 0.266934156418 0.958398044109
SURF 0x10
mat 1
refs 4
28 0.219279453158 0.0524915345013
37 0.229479774833 0.0524915345013
36 0.229479774833 0.917184531689
29 0.219279453158 0.917184531689
SURF 0x10
mat 1
refs 4
31 0.0152650475502 0.0524915345013
30 0.0152650475502 0.917184531689
33 0.00506484508514 0.917184531689
32 0.00506484508514 0.0524915345013
SURF 0x10
mat 1
refs 4
68 0.732308506966 0.0524915345013
77 0.742508530617 0.0524915345013
76 0.742508530617 0.917184531689
69 0.732308506966 0.917184531689
SURF 0x10
mat 1
refs 4
60 0.385183900595 0.534165143967
63 0.374834150076 0.534165143967
78 0.374834150076 0.536138355732
77 0.385183900595 0.536138355732
SURF 0x10
mat 1
refs 4
20 0.385183900595 0.534165203571
23 0.374834150076 0.534165203571
38 0.374834150076 0.536138415337
37 0.385183900595 0.536138415337
SURF 0x10
mat 1
refs 4
21 0.385183900595 0.534165263176
32 0.385183900595 0.536138415337
35 0.374834150076 0.536138415337
22 0.374834150076 0.534165263176
SURF 0x10
mat 1
refs 4
71 0.536294043064 0.0524915345013
70 0.536294043064 0.917184531689
73 0.526093959808 0.917184531689
72 0.526093959808 0.0524915345013
SURF 0x10
mat 1
refs 4
45 0.256733953953 0.917184531689
44 0.256733953953 0.0524915345013
51 0.266934156418 0.0524915345013
50 0.266934156418 0.917184531689
SURF 0x10
mat 1
refs 4
24 0.385183900595 0.579510509968
36 0.385183900595 0.577537298203
39 0.374834150076 0.577537298203
25 0.374834150076 0.579510509968
SURF 0x10
mat 1
refs 4
40 0.485148578882 0.917184531689
49 0.474948495626 0.917184531689
48 0.474948495626 0.0524915345013
41 0.485148578882 0.0524915345013
SURF 0x10
mat 1
refs 4
64 0.732308506966 0.958398044109
67 0.536294043064 0.958398044109
70 0.536294043064 0.917184531689
69 0.732308506966 0.917184531689
SURF 0x10
mat 1
refs 4
60 0.732308506966 0.011277128011
68 0.732308506966 0.0524915345013
71 0.536294043064 0.0524915345013
61 0.536294043064 0.011277128011
SURF 0x10
mat 1
refs 4
27 0.385183900595 0.579510509968
26 0.374834150076 0.579510509968
34 0.374834150076 0.577537357807
33 0.385183900595 0.577537357807
SURF 0x10
mat 1
refs 3
73 0.526093959808 0.917184531689
70 0.536294043064 0.917184531689
67 0.536294043064 0.958398044109
SURF 0x10
mat 1
refs 3
40 0.485148578882 0.917184531689
52 0.474948495626 0.958398044109
49 0.474948495626 0.917184531689
SURF 0x10
mat 1
refs 3
41 0.485148578882 0.0524915345013
48 0.474948495626 0.0524915345013
56 0.474948495626 0.011277128011
SURF 0x10
mat 1
refs 3
61 0.536294043064 0.011277128011
71 0.536294043064 0.0524915345013
72 0.526093959808 0.0524915345013
SURF 0x10
mat 1
refs 3
77 0.742508530617 0.0524915345013
68 0.732308506966 0.0524915345013
60 0.732308506966 0.011277128011
SURF 0x10
mat 1
refs 3
36 0.229479774833 0.917184531689
24 0.219279453158 0.958398044109
29 0.219279453158 0.917184531689
SURF 0x10
mat 1
refs 3
21 0.0152650475502 0.011277128011
31 0.0152650475502 0.0524915345013
32 0.00506484508514 0.0524915345013
SURF 0x10
mat 1
refs 3
76 0.742508530617 0.917184531689
64 0.732308506966 0.958398044109
69 0.732308506966 0.917184531689
SURF 0x10
mat 1
refs 3
28 0.219279453158 0.0524915345013
20 0.219279453158 0.011277128011
37 0.229479774833 0.0524915345013
SURF 0x10
mat 1
refs 3
33 0.00506484508514 0.917184531689
30 0.0152650475502 0.917184531689
27 0.0152650475502 0.958398044109
SURF 0x10
mat 1
refs 3
45 0.256733953953 0.917184531689
50 0.266934156418 0.917184531689
55 0.266934156418 0.958398044109
SURF 0x10
mat 1
refs 3
57 0.266934156418 0.011277128011
51 0.266934156418 0.0524915345013
44 0.256733953953 0.0524915345013
kids 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View file

@ -1,9 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<path>cata_button.ac</path>
</PropertyList>

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

View file

@ -1,45 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<path>clock.ac</path>
<animation>
<type>rotate</type>
<object-name>SecondHand</object-name>
<property>/sim/time/utc/day-seconds</property>
<factor>6</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>MinuteHand</object-name>
<property>/sim/time/utc/day-seconds</property>
<factor>0.1</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>HourHand</object-name>
<property>/sim/time/utc/day-seconds</property>
<factor>0.008333</factor>
<axis>
<x>-1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
</PropertyList>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,18 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<path>compass.ac</path>
<animation>
<type>rotate</type>
<object-name>PIA.card</object-name>
<property>instrumentation/magnetic-compass/indicated-heading-deg</property>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
</PropertyList>

View file

@ -1,65 +0,0 @@
AC3Db
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
OBJECT world
kids 1
OBJECT poly
name "dmepanel"
data 8
Cube.001
texture "dme.png"
texrep 1 1
crease 30.000000
numvert 8
0.006582 -0.01827 -0.043379
0.006582 -0.01827 0.045083
0.000158 -0.01827 0.045083
0.000158 -0.01827 -0.043379
0.006582 0.020313 -0.043379
0.006581 0.020313 0.045083
0.000158 0.020313 0.045083
0.000158 0.020313 -0.043379
numsurf 6
SURF 0x00
mat 1
refs 4
0 0.999999463558 0.0
1 0.0 1.9310324717e-007
2 4.63229838488e-007 1.9310324717e-007
3 0.999999940395 0.0
SURF 0x00
mat 1
refs 4
4 0.999999463558 0.999999821186
7 0.999999940395 0.999999821186
6 4.63229838488e-007 1.0
5 0.0 1.0
SURF 0x00
mat 1
refs 4
0 0.999999463558 0.0
4 0.999999463558 0.999999821186
5 0.0 1.0
1 0.0 1.9310324717e-007
SURF 0x00
mat 1
refs 4
1 0.0 1.9310324717e-007
5 0.0 1.0
6 4.63229838488e-007 1.0
2 4.63229838488e-007 1.9310324717e-007
SURF 0x00
mat 1
refs 4
2 4.63229838488e-007 1.9310324717e-007
6 4.63229838488e-007 1.0
7 0.999999940395 0.999999821186
3 0.999999940395 0.0
SURF 0x00
mat 1
refs 4
4 0.999999463558 0.999999821186
0 0.999999463558 0.0
3 0.999999940395 0.0
7 0.999999940395 0.999999821186
kids 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

View file

@ -1,216 +0,0 @@
<?xml version="1.0" ?>
<!--
Maintainer: Torsten Dreyer
-->
<PropertyList>
<path>dme.ac</path>
<model>
<path>Aircraft/Instruments-3d/ki266/ki266.xml</path>
<name>ki266</name>
<offsets>
<x-m>0.007</x-m>
<y-m>0.00</y-m>
<z-m>0.0</z-m>
</offsets>
</model>
<!-- the power switch -->
<!--<animation>
<type>rotate</type>
<object-name>PowerSwitch.Lever</object-name>
<property alias="../../params/power-btn"/>
<factor>-60</factor>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
<center>
<x-m>0.000862624</x-m>
<y-m>-0.0328855</y-m>
<z-m>0</z-m>
</center>
</animation>
<animation>
<type>pick</type>
<object-name>on</object-name>
<visible>true</visible>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<property alias="../../../../params/power-btn"/>
<value>1</value>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>off</object-name>
<visible>true</visible>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<property alias="../../../../params/power-btn"/>
<value>0</value>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>PowerSwitch</object-name>
<visible>true</visible>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-toggle</command>
<property alias="../../../../params/power-btn"/>
</binding>
</action>
</animation>-->
<!-- the source switch
<animation>
<type>rotate</type>
<object-name>SourceSelectorKnob</object-name>
<property>instrumentation/dme/switch-position</property>
<factor>-30</factor>
<min-deg>-60</min-deg>
<max-deg>0</max-deg>
<offset-deg>30</offset-deg>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
<center>
<x-m>0.005</x-m>
<y-m>-0.0589436</y-m>
<z-m>0</z-m>
</center>
</animation>
<animation>
<type>pick</type>
<object-name>SourceSelectorPick.R</object-name>
<visible>false</visible>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/dme/switch-position</property>
<step>1</step>
<min>1</min>
<max>3</max>
<wrap>0</wrap>
</binding>
<binding>
<condition>
<equals>
<property>instrumentation/dme/switch-position</property>
<value type="int">1</value>
</equals>
</condition>
<command>property-assign</command>
<property>instrumentation/dme/frequencies/source</property>
<value>instrumentation/nav[0]/frequencies/selected-mhz</value>
</binding>
<binding>
<condition>
<equals>
<property>instrumentation/dme/switch-position</property>
<value type="int">2</value>
</equals>
</condition>
<command>property-assign</command>
<property>instrumentation/dme/frequencies/source</property>
<value>instrumentation/dme/frequencies/selected-mhz</value>
</binding>
<binding>
<condition>
<equals>
<property>instrumentation/dme/switch-position</property>
<value type="int">2</value>
</equals>
</condition>
<command>property-assign</command>
<property>instrumentation/dme/frequencies/selected-mhz</property>
<property>instrumentation/nav[0]/frequencies/selected-mhz</property>
</binding>
<binding>
<condition>
<equals>
<property>instrumentation/dme/switch-position</property>
<value type="int">3</value>
</equals>
</condition>
<command>property-assign</command>
<property>instrumentation/dme/frequencies/source</property>
<value>instrumentation/nav[1]/frequencies/selected-mhz</value>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>SourceSelectorPick.L</object-name>
<visible>false</visible>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/dme/switch-position</property>
<step>-1</step>
<min>1</min>
<max>3</max>
<wrap>0</wrap>
</binding>
<binding>
<condition>
<equals>
<property>instrumentation/dme/switch-position</property>
<value type="int">1</value>
</equals>
</condition>
<command>property-assign</command>
<property>instrumentation/dme/frequencies/source</property>
<value>instrumentation/nav[0]/frequencies/selected-mhz</value>
</binding>
<binding>
<condition>
<equals>
<property>instrumentation/dme/switch-position</property>
<value type="int">2</value>
</equals>
</condition>
<command>property-assign</command>
<property>instrumentation/dme/frequencies/source</property>
<value>instrumentation/dme/frequencies/selected-mhz</value>
</binding>
<binding>
<condition>
<equals>
<property>instrumentation/dme/switch-position</property>
<value type="int">2</value>
</equals>
</condition>
<command>property-assign</command>
<property>instrumentation/dme/frequencies/selected-mhz</property>
<property>instrumentation/nav[1]/frequencies/selected-mhz</property>
</binding>
</action>
</animation>-->
</PropertyList>

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 KiB

View file

@ -1,14 +0,0 @@
<PropertyList>
<path>engine_panel.ac</path>
<animation>
<type>material</type>
<object-name>Plane</object-name>
<emission>
<red>0.028</red>
<green>0.014</green>
<blue>0.007</blue>
<factor-prop>systems/electrical/outputs/instrument-lights</factor-prop>
</emission>
</animation>
</PropertyList>

View file

@ -1,298 +0,0 @@
AC3Db
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
MATERIAL "DefaultWhite.001" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
OBJECT world
kids 1
OBJECT poly
name "fdm1"
data 4
fdm1
texture "//FDM1.rgb"
texrep 1 1
crease 30
numvert 32
-0.001811 -0.032846 0.050174
-0.001811 -0.033248 -0.045208
-0.001811 0.038089 -0.044807
-0.001811 0.03809 0.050174
-0.001811 -0.038056 0.054182
-0.001811 -0.038057 -0.050418
-0.001811 0.041296 -0.050018
-0.001811 0.040895 0.054182
-0.001811 -0.041663 0.062999
-0.001811 -0.041263 -0.05683
-0.001811 0.046906 -0.05643
-0.001811 0.046907 0.062998
-0.001811 0.065371 -0.083923
-0.001811 -0.078896 -0.083345
-0.001811 -0.079473 0.067847
-0.001811 0.065948 0.068423
-0.001801 -0.033248 -0.045208
0.003016 -0.038057 -0.050418
-0.001801 0.038089 -0.044807
0.003016 0.041296 -0.050018
-0.001801 -0.032846 0.050174
0.003016 -0.038056 0.054182
-0.001801 0.03809 0.050174
0.003016 0.040895 0.054182
0.003016 -0.041663 0.062999
0.003016 0.046907 0.062998
0.003016 -0.041263 -0.05683
0.003016 0.046906 -0.05643
0.003016 0.065371 -0.083923
0.003016 -0.078896 -0.083345
0.003016 -0.079473 0.067847
0.003016 0.065948 0.068423
numsurf 37
SURF 0x00
mat 1
refs 4
5 0.748739600182 0.341627240181
1 0.717283964157 0.370664596558
16 0.717283964157 0.370664596558
17 0.748739600182 0.341627240181
SURF 0x00
mat 1
refs 4
6 0.746321499348 0.820767045021
2 0.714861094952 0.801407217979
18 0.714861094952 0.801407217979
19 0.746321499348 0.820767045021
SURF 0x00
mat 1
refs 4
4 0.117148905993 0.341627240181
0 0.141349762678 0.373087406158
20 0.141349762678 0.373087406158
21 0.117148905993 0.341627240181
SURF 0x00
mat 1
refs 4
3 0.141349762678 0.801407217979
0 0.141349762678 0.373087406158
20 0.141349762678 0.373087406158
22 0.141349762678 0.801407217979
SURF 0x00
mat 1
refs 4
1 0.717283964157 0.370664596558
0 0.141349762678 0.373087406158
20 0.141349762678 0.373087406158
16 0.717283964157 0.370664596558
SURF 0x00
mat 1
refs 4
2 0.714861094952 0.801407217979
1 0.717283964157 0.370664596558
16 0.717283964157 0.370664596558
18 0.714861094952 0.801407217979
SURF 0x00
mat 1
refs 4
3 0.141349762678 0.801407217979
2 0.714861094952 0.801407217979
18 0.714861094952 0.801407217979
22 0.141349762678 0.801407217979
SURF 0x00
mat 1
refs 4
7 0.117148905993 0.818344295025
3 0.141349762678 0.801407217979
22 0.141349762678 0.801407217979
23 0.117148905993 0.818344295025
SURF 0x00
mat 1
refs 4
7 0.117148905993 0.818344295025
4 0.117148905993 0.341627240181
21 0.117148905993 0.341627240181
23 0.117148905993 0.818344295025
SURF 0x00
mat 1
refs 4
5 0.748739600182 0.341627240181
4 0.117148905993 0.341627240181
21 0.117148905993 0.341627240181
17 0.748739600182 0.341627240181
SURF 0x00
mat 1
refs 4
6 0.746321499348 0.820767045021
5 0.748739600182 0.341627240181
17 0.748739600182 0.341627240181
19 0.746321499348 0.820767045021
SURF 0x00
mat 1
refs 4
7 0.117148905993 0.818344295025
6 0.746321499348 0.820767045021
19 0.746321499348 0.820767045021
23 0.117148905993 0.818344295025
SURF 0x00
mat 1
refs 4
11 0.0639152526855 0.854645371437
8 0.0639152526855 0.319849193096
24 0.0639152526855 0.319849193096
25 0.0639152526855 0.854645371437
SURF 0x00
mat 1
refs 4
9 0.787459135056 0.322267383337
8 0.0639152526855 0.319849193096
24 0.0639152526855 0.319849193096
26 0.787459135056 0.322267383337
SURF 0x00
mat 1
refs 4
10 0.785040915012 0.854645371437
9 0.787459135056 0.322267383337
26 0.787459135056 0.322267383337
27 0.785040915012 0.854645371437
SURF 0x00
mat 1
refs 4
11 0.0639152526855 0.854645371437
10 0.785040915012 0.854645371437
27 0.785040915012 0.854645371437
25 0.0639152526855 0.854645371437
SURF 0x00
mat 1
refs 4
13 0.947558999062 0.0950311720371
12 0.951045930386 0.966135144234
28 0.951045930386 0.966135144234
29 0.947558999062 0.0950311720371
SURF 0x00
mat 1
refs 4
14 0.0346422493458 0.0915486216545
13 0.947558999062 0.0950311720371
29 0.947558999062 0.0950311720371
30 0.0346422493458 0.0915486216545
SURF 0x00
mat 1
refs 4
15 0.0311596989632 0.969617724419
14 0.0346422493458 0.0915486216545
30 0.0346422493458 0.0915486216545
31 0.0311596989632 0.969617724419
SURF 0x00
mat 1
refs 4
15 0.0311596989632 0.969617724419
12 0.951045930386 0.966135144234
28 0.951045930386 0.966135144234
31 0.0311596989632 0.969617724419
SURF 0x00
mat 1
refs 4
20 0.141349762678 0.373087406158
16 0.717283964157 0.370664596558
18 0.714861094952 0.801407217979
22 0.141349762678 0.801407217979
SURF 0x00
mat 1
refs 3
18 0.714861094952 0.801407217979
19 0.746321499348 0.820767045021
23 0.117148905993 0.818344295025
SURF 0x00
mat 1
refs 3
17 0.748739600182 0.341627240181
19 0.746321499348 0.820767045021
18 0.714861094952 0.801407217979
SURF 0x00
mat 1
refs 3
22 0.141349762678 0.801407217979
23 0.117148905993 0.818344295025
21 0.117148905993 0.341627240181
SURF 0x00
mat 1
refs 3
18 0.714861094952 0.801407217979
23 0.117148905993 0.818344295025
22 0.141349762678 0.801407217979
SURF 0x00
mat 1
refs 3
20 0.141349762678 0.373087406158
22 0.141349762678 0.801407217979
21 0.117148905993 0.341627240181
SURF 0x00
mat 1
refs 3
17 0.748739600182 0.341627240181
18 0.714861094952 0.801407217979
16 0.717283964157 0.370664596558
SURF 0x00
mat 1
refs 3
16 0.717283964157 0.370664596558
20 0.141349762678 0.373087406158
21 0.117148905993 0.341627240181
SURF 0x00
mat 1
refs 3
17 0.748739600182 0.341627240181
16 0.717283964157 0.370664596558
21 0.117148905993 0.341627240181
SURF 0x00
mat 1
refs 4
21 0.117148905993 0.341627240181
23 0.117148905993 0.818344295025
25 0.0639152526855 0.854645371437
24 0.0639152526855 0.319849193096
SURF 0x00
mat 1
refs 4
17 0.748739600182 0.341627240181
21 0.117148905993 0.341627240181
24 0.0639152526855 0.319849193096
26 0.787459135056 0.322267383337
SURF 0x00
mat 1
refs 4
19 0.746321499348 0.820767045021
17 0.748739600182 0.341627240181
26 0.787459135056 0.322267383337
27 0.785040915012 0.854645371437
SURF 0x00
mat 1
refs 4
19 0.746321499348 0.820767045021
27 0.785040915012 0.854645371437
25 0.0639152526855 0.854645371437
23 0.117148905993 0.818344295025
SURF 0x00
mat 1
refs 4
24 0.0639152526855 0.319849193096
25 0.0639152526855 0.854645371437
31 0.0311596989632 0.969617724419
30 0.0346422493458 0.0915486216545
SURF 0x00
mat 1
refs 4
25 0.0639152526855 0.854645371437
27 0.785040915012 0.854645371437
28 0.951045930386 0.966135144234
31 0.0311596989632 0.969617724419
SURF 0x00
mat 1
refs 4
26 0.787459135056 0.322267383337
29 0.947558999062 0.0950311720371
28 0.951045930386 0.966135144234
27 0.785040915012 0.854645371437
SURF 0x00
mat 1
refs 4
24 0.0639152526855 0.319849193096
30 0.0346422493458 0.0915486216545
29 0.947558999062 0.0950311720371
26 0.787459135056 0.322267383337
kids 0

View file

@ -1,494 +0,0 @@
AC3Db
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
MATERIAL "material.001" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 1 1 1 shi 72 trans 0
MATERIAL "DefaultWhite.002" rgb 1 1 1 amb 1 1 1 emis 0.15 0.15 0.15 spec 0.5 0.5 0.5 shi 64 trans 0
OBJECT world
kids 4
OBJECT poly
name "Face.002"
data 8
Mesh.003
texture "gsdi.rgb"
texrep 1 1
crease 30.000000
numvert 11
0.004225 0.03 0.03
0.004225 0.024153 -0.03
0.004225 0.03 -0.028081
0.004225 0.027077 -0.029041
0.004225 -0.022132 -0.03
0.004225 -0.026066 -0.028869
0.004225 -0.03 -0.025707
0.004225 -0.028583 -0.028146
0.004225 -0.029291 -0.026926
0.004225 -0.029566 0.029551
0.004225 -0.03 0.028858
numsurf 6
SURF 0x00
mat 1
refs 4
3 1.20101737976 1.15360808372
5 1.19686508179 -0.129203915596
4 1.22416615486 -0.0342413783073
1 1.22416567802 1.08302605152
SURF 0x00
mat 1
refs 4
3 1.20101737976 1.15360808372
8 1.14996361732 -0.207051694393
7 1.1794128418 -0.189961373806
5 1.19686508179 -0.129203915596
SURF 0x00
mat 1
refs 3
0 -0.224166154861 1.22416615486
9 -0.213327586651 -0.213689684868
2 1.17784380913 1.22416615486
SURF 0x00
mat 1
refs 3
2 1.17784380913 1.22416615486
9 -0.213327586651 -0.213689684868
3 1.20101737976 1.15360808372
SURF 0x00
mat 1
refs 4
3 1.20101737976 1.15360808372
9 -0.213327586651 -0.213689684868
10 -0.196599662304 -0.224166154861
8 1.14996361732 -0.207051694393
SURF 0x00
mat 1
refs 3
8 1.14996361732 -0.207051694393
10 -0.196599662304 -0.224166154861
6 1.12053775787 -0.224166154861
kids 0
OBJECT poly
name "Face.003"
data 8
Mesh.006
texture "tach.png"
texrep 1 1
crease 30.000000
numvert 56
0 0.029938 -0.028148
0 -0.028327 -0.028327
0 -0.028327 0.03137
0 0.030475 0.031191
0 0.02472 -0.029916
0 0.032444 -0.022318
0 -0.030833 -0.024497
0 -0.023146 -0.029781
0 -0.024215 0.033499
0 -0.030833 0.027764
0 0.032444 0.024965
0 0.025673 0.033358
0.008592 0.029938 -0.028148
0.008592 0.02472 -0.029916
0.008592 0.032444 -0.022318
0.008592 -0.028327 -0.028327
0.008592 -0.030833 -0.024497
0.008592 -0.023146 -0.029781
0.008592 -0.028327 0.03137
0.008592 -0.024215 0.033499
0.008592 -0.030833 0.027764
0.008592 0.030475 0.031191
0.008592 0.032444 0.024965
0.008592 0.025673 0.033358
0 -0.015932 0.015753
0 -0.008705 0.020582
0 -0.000179 0.022278
0 0.008347 0.020582
0 0.015574 0.015753
0 0.020404 0.008525
0 0.022099 0
0 0.020404 -0.008526
0 0.015574 -0.015753
0 0.008347 -0.020583
0 -0.000179 -0.022278
0 -0.008705 -0.020583
0 -0.015932 -0.015753
0 -0.020761 -0.008526
0 -0.022457 0
0 -0.020761 0.008525
0.008651 -0.015932 0.015753
0.008651 -0.008705 0.020582
0.008651 -0.000179 0.022278
0.008651 0.008347 0.020582
0.008651 0.015574 0.015753
0.008651 0.020404 0.008525
0.008651 0.022099 0
0.008651 0.020404 -0.008526
0.008651 0.015574 -0.015753
0.008651 0.008347 -0.020583
0.008651 -0.000179 -0.022278
0.008651 -0.008705 -0.020583
0.008651 -0.015932 -0.015753
0.008651 -0.020761 -0.008526
0.008651 -0.022457 0
0.008651 -0.020761 0.008525
numsurf 48
SURF 0x00
mat 2
refs 4
4 0.880161881447 0.819025874138
0 0.880161881447 0.821688055992
12 0.884545445442 0.821688055992
13 0.884545445442 0.819025874138
SURF 0x00
mat 2
refs 4
12 0.884545445442 0.821688055992
0 0.880161881447 0.821688055992
5 0.880161881447 0.822966694832
14 0.884545445442 0.822966694832
SURF 0x00
mat 2
refs 4
6 0.880161881447 0.790683269501
1 0.880161881447 0.791961789131
15 0.884545445442 0.791961789131
16 0.884545445442 0.790683269501
SURF 0x00
mat 2
refs 4
7 0.880161881447 0.794605135918
17 0.884545445442 0.794605135918
15 0.884545445442 0.791961789131
1 0.880161881447 0.791961789131
SURF 0x00
mat 2
refs 4
4 0.880161881447 0.819025874138
13 0.884545445442 0.819025874138
17 0.884545445442 0.794605135918
7 0.880161881447 0.794605135918
SURF 0x00
mat 2
refs 4
8 0.880161881447 0.794059753418
2 0.880161881447 0.791961789131
18 0.884545445442 0.791961789131
19 0.884545445442 0.794059753418
SURF 0x00
mat 2
refs 4
9 0.880161881447 0.790683269501
20 0.884545445442 0.790683269501
18 0.884545445442 0.791961789131
2 0.880161881447 0.791961789131
SURF 0x00
mat 2
refs 4
6 0.880161881447 0.790683269501
16 0.884545445442 0.790683269501
20 0.884545445442 0.790683269501
9 0.880161881447 0.790683269501
SURF 0x00
mat 2
refs 4
10 0.880161881447 0.822966694832
3 0.880161881447 0.821962118149
21 0.884545445442 0.821962118149
22 0.884545445442 0.822966694832
SURF 0x00
mat 2
refs 4
5 0.880161881447 0.822966694832
10 0.880161881447 0.822966694832
22 0.884545445442 0.822966694832
14 0.884545445442 0.822966694832
SURF 0x00
mat 2
refs 4
11 0.880161881447 0.81951212883
23 0.884545445442 0.81951212883
21 0.884545445442 0.821962118149
3 0.880161881447 0.821962118149
SURF 0x00
mat 2
refs 4
8 0.880161881447 0.794059753418
19 0.884545445442 0.794059753418
23 0.884545445442 0.81951212883
11 0.880161881447 0.81951212883
SURF 0x00
mat 2
refs 4
25 0.880161881447 0.801972746849
41 0.884575545788 0.801972746849
40 0.884575545788 0.798285603523
24 0.880161881447 0.798285603523
SURF 0x00
mat 2
refs 4
26 0.880161881447 0.806322693825
42 0.884575545788 0.806322693825
41 0.884575545788 0.801972746849
25 0.880161881447 0.801972746849
SURF 0x00
mat 2
refs 4
27 0.880161881447 0.810672521591
43 0.884575545788 0.810672521591
42 0.884575545788 0.806322693825
26 0.880161881447 0.806322693825
SURF 0x00
mat 2
refs 4
28 0.880161881447 0.814359664917
44 0.884575545788 0.814359664917
43 0.884575545788 0.810672521591
27 0.880161881447 0.810672521591
SURF 0x00
mat 2
refs 4
29 0.880161881447 0.816823959351
45 0.884575545788 0.816823959351
44 0.884575545788 0.814359664917
28 0.880161881447 0.814359664917
SURF 0x00
mat 2
refs 4
30 0.880161881447 0.817688703537
46 0.884575545788 0.817688703537
45 0.884575545788 0.816823959351
29 0.880161881447 0.816823959351
SURF 0x00
mat 2
refs 4
31 0.880161881447 0.816823959351
47 0.884575545788 0.816823959351
46 0.884575545788 0.817688703537
30 0.880161881447 0.817688703537
SURF 0x00
mat 2
refs 4
32 0.880161881447 0.814359664917
48 0.884575545788 0.814359664917
47 0.884575545788 0.816823959351
31 0.880161881447 0.816823959351
SURF 0x00
mat 2
refs 4
33 0.880161881447 0.810672521591
49 0.884575545788 0.810672521591
48 0.884575545788 0.814359664917
32 0.880161881447 0.814359664917
SURF 0x00
mat 2
refs 4
34 0.880161881447 0.806322693825
50 0.884575545788 0.806322693825
49 0.884575545788 0.810672521591
33 0.880161881447 0.810672521591
SURF 0x00
mat 2
refs 4
35 0.880161881447 0.801972746849
51 0.884575545788 0.801972746849
50 0.884575545788 0.806322693825
34 0.880161881447 0.806322693825
SURF 0x00
mat 2
refs 4
36 0.880161881447 0.798285603523
52 0.884575545788 0.798285603523
51 0.884575545788 0.801972746849
35 0.880161881447 0.801972746849
SURF 0x00
mat 2
refs 4
37 0.880161881447 0.795821905136
53 0.884575545788 0.795821905136
52 0.884575545788 0.798285603523
36 0.880161881447 0.798285603523
SURF 0x00
mat 2
refs 4
38 0.880161881447 0.794956624508
54 0.884575545788 0.794956624508
53 0.884575545788 0.795821905136
37 0.880161881447 0.795821905136
SURF 0x00
mat 2
refs 4
39 0.880161881447 0.795821905136
55 0.884575545788 0.795821905136
54 0.884575545788 0.794956624508
38 0.880161881447 0.794956624508
SURF 0x00
mat 2
refs 4
24 0.880161881447 0.798285603523
40 0.884575545788 0.798285603523
55 0.884575545788 0.795821905136
39 0.880161881447 0.795821905136
SURF 0x00
mat 2
refs 4
21 0.0363951735198 0.968882799149
44 0.191242232919 0.806504964828
45 0.334401935339 0.902377963066
22 0.134573861957 0.999999940395
SURF 0x00
mat 2
refs 4
21 0.0363951735198 0.968882799149
23 0.00222342531197 0.89299428463
43 0.0955977216363 0.663052916527
44 0.191242232919 0.806504964828
SURF 0x00
mat 2
refs 4
18 0.0335724949837 0.0396037176251
40 0.191242232919 0.181127816439
41 0.0955977216363 0.324579894543
19 0.0 0.104587823153
SURF 0x00
mat 2
refs 4
18 0.0335724949837 0.0396037176251
20 0.0904359668493 2.94363662334e-008
55 0.334401905537 0.0852746888995
40 0.191242232919 0.181127816439
SURF 0x00
mat 2
refs 4
15 0.974942803383 0.0396036580205
52 0.815258562565 0.181127756834
53 0.672118604183 0.0852746888995
16 0.914547026157 0.0
SURF 0x00
mat 2
refs 4
15 0.974942803383 0.0396036580205
17 0.997871160507 0.121481738985
51 0.910922825336 0.32457986474
52 0.815258562565 0.181127756834
SURF 0x00
mat 2
refs 4
12 0.972120165825 0.960396230221
14 0.880186080933 0.999999940395
47 0.672118604183 0.902377963066
48 0.815258562565 0.806504964828
SURF 0x00
mat 2
refs 4
12 0.972120165825 0.960396230221
48 0.815258562565 0.806504964828
49 0.910922825336 0.663052916527
13 1.0 0.877933442593
SURF 0x00
mat 2
refs 3
22 0.134573861957 0.999999940395
45 0.334401935339 0.902377963066
46 0.503250360489 0.936022758484
SURF 0x00
mat 2
refs 3
14 0.880186080933 0.999999940395
46 0.503250360489 0.936022758484
47 0.672118604183 0.902377963066
SURF 0x00
mat 2
refs 3
14 0.880186080933 0.999999940395
22 0.134573861957 0.999999940395
46 0.503250360489 0.936022758484
SURF 0x00
mat 2
refs 3
13 1.0 0.877933442593
49 0.910922825336 0.663052916527
50 0.94449442625 0.493816375732
SURF 0x00
mat 2
refs 3
17 0.997871160507 0.121481738985
50 0.94449442625 0.493816375732
51 0.910922825336 0.32457986474
SURF 0x00
mat 2
refs 3
13 1.0 0.877933442593
50 0.94449442625 0.493816375732
17 0.997871160507 0.121481738985
SURF 0x00
mat 2
refs 3
16 0.914547026157 0.0
53 0.672118604183 0.0852746888995
54 0.503250360489 0.0516100153327
SURF 0x00
mat 2
refs 3
20 0.0904359668493 2.94363662334e-008
54 0.503250360489 0.0516100153327
55 0.334401905537 0.0852746888995
SURF 0x00
mat 2
refs 3
16 0.914547026157 0.0
54 0.503250360489 0.0516100153327
20 0.0904359668493 2.94363662334e-008
SURF 0x00
mat 2
refs 3
19 0.0 0.104587823153
41 0.0955977216363 0.324579894543
42 0.0620063021779 0.493816435337
SURF 0x00
mat 2
refs 3
23 0.00222342531197 0.89299428463
42 0.0620063021779 0.493816435337
43 0.0955977216363 0.663052916527
SURF 0x00
mat 2
refs 3
19 0.0 0.104587823153
42 0.0620063021779 0.493816435337
23 0.00222342531197 0.89299428463
kids 0
OBJECT poly
name "uneedle"
data 8
Mesh.005
crease 30.000000
numvert 4
0.005456 0.000885 0.029961
0.005456 0.000887 -0.029989
0.005456 -0.000915 -0.029981
0.005456 -0.000917 0.029968
numsurf 1
SURF 0x00
mat 1
refs 4
0 0.0 0.0
3 0.0 0.0
2 0.0 0.0
1 0.0 0.0
kids 0
OBJECT poly
name "vneedle"
data 8
Mesh.004
crease 30.000000
numvert 4
0.005921 0.02996 -0.000892
0.005921 -0.029989 -0.00088
0.005921 -0.029981 0.000922
0.005921 0.029968 0.00091
numsurf 1
SURF 0x00
mat 1
refs 4
0 0.0 0.0
3 0.0 0.0
2 0.0 0.0
1 0.0 0.0
kids 0

Binary file not shown.

View file

@ -1,47 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<path>gsdi.ac</path>
<animation>
<type>select</type>
<object>face</object>
<object>face.001</object>
<object>vneedle</object>
<object>uneedle</object>
<condition>
<not>
<property>/sim/model/hide-gsdi</property>
</not>
</condition>
</animation>
<animation>
<type>translate</type>
<object-name>uneedle</object-name>
<property>instrumentation/gsdi/drift-u-kt</property>
<factor>0.005</factor>
<min-m>-0.03</min-m>
<max-m>0.03</max-m>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>translate</type>
<object-name>vneedle</object-name>
<property>instrumentation/gsdi/drift-v-kt</property>
<factor>0.005</factor>
<min-m>-0.03</min-m>
<max-m>0.03</max-m>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
</PropertyList>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

View file

@ -1,236 +0,0 @@
<?xml version="1.0" ?>
<!--
$Id: hsi-bk-hi.xml,v 1.1 2007/06/03 14:58:44 mfranz Exp $
This is the Bendix/King KI252 HSI 3d instrument.
Maintainer: Torsten Dreyer
$Log: hsi-bk-hi.xml,v $
Revision 1.1 2007/06/03 14:58:44 mfranz
Heiko SCHULZ: EC135 v0.2
Revision 1.2 2006-11-23 14:27:03 mfranz
Torsten DREYER:
"""
- Added instruments lights for night flights
- Addes flashing strobe effect in clouds at night
- OBS knob on vor2 clickable
- subscale knob on altimeter clickable
- changes on aircraft 3d-model
- Fixed bug in HSI, wrong deflection of glideslope indicator and
transparency issue
- Added Roberto Inzerillo's nice nose gear and animations, new main gear
"""
Revision 1.1 2006-06-01 12:58:33 mfranz
Torsten Dreyer: version 0.3 of the PA34-200T Seneca II (2006.05.30)
-->
<PropertyList>
<path>hsi-bk-hi.ac</path>
<animation>
<type>noshadow</type>
<object-name>hsi</object-name>
</animation>
<animation>
<type>material</type>
<object-name>hsi.Rotary</object-name>
<object-name>hsi.CompassRose</object-name>
<object-name>hsi.HeadingBug</object-name>
<object-name>hsi.NAVFlag</object-name>
<object-name>hsi.HDGFlag</object-name>
<emission>
<red-prop>/sim/model/instrument-lighting/emission/red</red-prop>
<green-prop>/sim/model/instrument-lighting/emission/green</green-prop>
<blue-prop>/sim/model/instrument-lighting/emission/blue</blue-prop>
<factor-prop>/controls/lighting/instruments-norm</factor-prop>
</emission>
</animation>
<animation>
<type>material</type>
<object-name>hsi.OuterMask</object-name>
<object-name>hsi.Glass</object-name>
<emission>
<red-prop>/sim/model/instrument-lighting/emission/red</red-prop>
<green-prop>/sim/model/instrument-lighting/emission/green</green-prop>
<blue-prop>/sim/model/instrument-lighting/emission/blue</blue-prop>
<factor-prop>/controls/lighting/instruments-norm</factor-prop>
</emission>
</animation>
<animation>
<type>rotate</type>
<object-name>hsi.CompassRose</object-name>
<property>/instrumentation/heading-indicator/indicated-heading-deg</property>
<factor>1.0</factor>
<axis>
<x>1.0</x>
<y>0.0</y>
<z>0.0</z>
</axis>
<center>
<x-m>-0.001</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</center>
</animation>
<animation>
<type>rotate</type>
<object-name>hsi.HeadingBug</object-name>
<property>/instrumentation/hsi/heading-bug-rotation-deg</property>
<factor>1.0</factor>
<axis>
<x>1.0</x>
<y>0.0</y>
<z>0.0</z>
</axis>
<center>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</center>
</animation>
<animation>
<type>rotate</type>
<object-name>hsi.Rotary</object-name>
<object-name>hsi.cursor</object-name>
<property>/instrumentation/hsi/cursor-rotation-deg</property>
<factor>1.0</factor>
<axis>
<x>1.0</x>
<y>0.0</y>
<z>0.0</z>
</axis>
<center>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</center>
</animation>
<animation>
<type>rotate</type>
<object-name>hsi.HeadingSelector</object-name>
<property>/autopilot/settings/heading-bug-deg</property>
<factor>4.0</factor>
<axis>
<x>1.0</x>
<y>0.0</y>
<z>0.0</z>
</axis>
<center>
<x-m>0</x-m>
<y-m>0.0331529</y-m>
<z-m>-0.0242478</z-m>
</center>
</animation>
<animation>
<type>rotate</type>
<object-name>hsi.CursorSelector</object-name>
<property>/instrumentation/hsi/cursor-rotation-deg</property>
<factor>-4.0</factor>
<axis>
<x>1.0</x>
<y>0.0</y>
<z>0.0</z>
</axis>
<center>
<x-m>0</x-m>
<y-m>-0.0331529</y-m>
<z-m>-0.0242478</z-m>
</center>
</animation>
<animation>
<type>translate</type>
<object-name>hsi.cursor.deflection</object-name>
<property>/instrumentation/nav[0]/heading-needle-deflection</property>
<factor>0.00152675</factor>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>translate</type>
<object-name>hsi.gs</object-name>
<property>/instrumentation/nav[0]/gs-needle-deflection</property>
<!--
<factor>0.022420</factor>
-->
<factor>0.004484</factor>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>select</type>
<object-name>hsi.gs</object-name>
<condition>
<property>/instrumentation/nav[0]/has-gs</property>
<greater-than>
<property>/instrumentation/nav[0]/gs-needle-deflection</property>
<value>-3.6</value>
</greater-than>
<less-than>
<property>/instrumentation/nav[0]/gs-needle-deflection</property>
<value>3.6</value>
</less-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>hsi.NAVFlag</object-name>
<condition>
<not>
<property>/instrumentation/nav[0]/in-range</property>
</not>
</condition>
</animation>
<!-- fixme: whould be nicer to have a rotation bound to spin -->
<animation>
<type>select</type>
<object-name>hsi.HDGFlag</object-name>
<condition>
<or>
<not>
<property>/instrumentation/heading-indicator/serviceable</property>
</not>
<less-than>
<property>/instrumentation/heading-indicator/spin</property>
<value type="double">0.9</value>
</less-than>
</or>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>hsi.TOFlag</object-name>
<condition>
<property>/instrumentation/nav[0]/to-flag</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>hsi.FROMFlag</object-name>
<condition>
<property>/instrumentation/nav[0]/from-flag</property>
</condition>
</animation>
</PropertyList>

View file

@ -1,116 +0,0 @@
<?xml version="1.0"?>
<PropertyList>
<adf>
<name>adf</name>
<number>0</number>
</adf>
<adf>
<name>adf-radio</name>
<number>0</number>
</adf>
<airspeed-indicator>
<name>airspeed-indicator</name>
<number>0</number>
<pitot-port>/systems/pitot</pitot-port>
<static-port>/systems/static</static-port>
</airspeed-indicator>
<altimeter>
<name>altimeter</name>
<number>0</number>
<static-port>/systems/static</static-port>
</altimeter>
<attitude-indicator>
<name>attitude-indicator</name>
<number>0</number>
<vacuum-system>/systems/vacuum</vacuum-system>
</attitude-indicator>
<clock>
<name>clock</name>
<number>0</number>
</clock>
<dme>
<name>dme</name>
<number>0</number>
</dme>
<encoder>
<name>encoder</name>
<number>0</number>
<static-port>/systems/static</static-port>
</encoder>
<gsdi>
<name>gsdi</name>
<number>0</number>
</gsdi>
<marker-beacon>
<name>marker-beacon</name>
<number>0</number>
</marker-beacon>
<heading-indicator>
<name>heading-indicator</name>
<number>0</number>
<vacuum-system>/systems/vacuum</vacuum-system>
</heading-indicator>
<KT-70>
<name>kt-70</name>
<number>0</number>
</KT-70>
<magnetic-compass>
<name>magnetic-compass</name>
<number>0</number>
</magnetic-compass>
<nav-radio>
<name>nav</name>
<number>0</number>
</nav-radio>
<nav-radio>
<name>nav</name>
<number>1</number>
</nav-radio>
<slip-skid-ball>
<name>slip-skid-ball</name>
<number>0</number>
</slip-skid-ball>
<transponder>
<name>transponder</name>
<number>0</number>
<encoder>/instrumentation/encoder</encoder>
</transponder>
<turn-indicator>
<name>turn-indicator</name>
<number>0</number>
</turn-indicator>
<vertical-speed-indicator>
<name>vertical-speed-indicator</name>
<number>0</number>
<static-port>/systems/static</static-port>
</vertical-speed-indicator>
<gps>
<name>gps</name>
<number>0</number>
</gps>
<tacan>
<name>tacan</name>
<number>0</number>
</tacan>
</PropertyList>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

View file

@ -1,467 +0,0 @@
AC3Db
MATERIAL "led" rgb 1 1 1 amb 0.2 0.2 0.2 emis 0.9 0.9 0.9 spec 0 0 0 shi 32 trans 0
MATERIAL "metal" rgb 1 1 1 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.755939 0.755939 0.755939 shi 32 trans 0
OBJECT world
kids 17
OBJECT poly
name "A-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 -0.005548 0.007149
0.004285 -0.013097 0.007149
0.004285 -0.013097 0.019403
0.004285 -0.005548 0.019403
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.623522162437 0.890665233135
3 0.570849359035 0.890665233135
2 0.570849359035 0.858213663101
1 0.623522162437 0.858213663101
kids 0
OBJECT poly
name "O-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 -0.005548 0.006299
0.004285 -0.013097 0.006299
0.004285 -0.013097 -0.005955
0.004285 -0.005548 -0.005955
numsurf 1
SURF 0x00
mat 0
refs 4
3 0.679851472378 0.890665233135
0 0.627178609371 0.890665233135
1 0.627178609371 0.858213663101
2 0.679851472378 0.858213663101
kids 0
OBJECT poly
name "HDG-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.002148 0.027166
0.004285 -0.003118 0.027166
0.004285 -0.003118 0.038873
0.004285 0.002148 0.038873
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.537476122379 0.923746824265
3 0.487153828144 0.923746824265
2 0.487153828144 0.901113212109
1 0.537476122379 0.901113212109
kids 0
OBJECT poly
name "FDannunciator"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 24
0.003999 0.013033 0.039363
0.003999 0.013033 -0.039363
0.003999 -0.013033 -0.039363
0.003999 -0.013033 0.039363
0 -0.015254 0.050654
0 0.015254 0.050654
0 0.017494 0.0488
0 0.017494 -0.0488
0 0.015254 -0.050654
0 -0.015254 -0.050654
0 -0.017494 0.0488
0 -0.017494 -0.0488
0.00543 0.013033 0.039363
0.00543 0.013033 -0.039363
0.00543 -0.013033 -0.039363
0.00543 -0.013033 0.039363
0.00543 0.015254 0.050654
0.00543 -0.015254 0.050654
0.00543 0.015254 -0.050654
0.00543 -0.015254 -0.050654
0.00543 0.017494 -0.0488
0.00543 0.017494 0.0488
0.00543 -0.017494 -0.0488
0.00543 -0.017494 0.0488
numsurf 18
SURF 0x00
mat 1
refs 4
0 0.057136900723 0.971186041832
1 0.398693561554 0.971186041832
13 0.398693561554 0.971186041832
12 0.057136900723 0.971186041832
SURF 0x00
mat 1
refs 4
3 0.057136900723 0.85809648037
0 0.057136900723 0.971186041832
12 0.057136900723 0.971186041832
15 0.057136900723 0.85809648037
SURF 0x00
mat 1
refs 4
14 0.398693561554 0.85809648037
13 0.398693561554 0.971186041832
1 0.398693561554 0.971186041832
2 0.398693561554 0.85809648037
SURF 0x00
mat 1
refs 4
15 0.057136900723 0.85809648037
14 0.398693561554 0.85809648037
2 0.398693561554 0.85809648037
3 0.057136900723 0.85809648037
SURF 0x00
mat 1
refs 4
21 0.0161940678954 0.990538716316
20 0.439636409283 0.990538716316
7 0.439636409283 0.990538716316
6 0.0161940678954 0.990538716316
SURF 0x00
mat 1
refs 4
23 0.0161940678954 0.838744044304
17 0.00815110746771 0.848460614681
4 0.00815110746771 0.848460614681
10 0.0161940678954 0.838744044304
SURF 0x00
mat 1
refs 4
17 0.00815110746771 0.848460614681
16 0.00815110746771 0.980821847916
5 0.00815110746771 0.980821847916
4 0.00815110746771 0.848460614681
SURF 0x00
mat 1
refs 4
16 0.00815110746771 0.980821847916
21 0.0161940678954 0.990538716316
6 0.0161940678954 0.990538716316
5 0.00815110746771 0.980821847916
SURF 0x00
mat 1
refs 4
20 0.439636409283 0.990538716316
18 0.447679311037 0.980821847916
8 0.447679311037 0.980821847916
7 0.439636409283 0.990538716316
SURF 0x00
mat 1
refs 4
18 0.447679311037 0.980821847916
19 0.447679311037 0.848460614681
9 0.447679311037 0.848460614681
8 0.447679311037 0.980821847916
SURF 0x00
mat 1
refs 4
19 0.447679311037 0.848460614681
22 0.439636409283 0.838744044304
11 0.439636409283 0.838744044304
9 0.447679311037 0.848460614681
SURF 0x00
mat 1
refs 4
20 0.439636409283 0.990538716316
21 0.0161940678954 0.990538716316
12 0.057136900723 0.971186041832
13 0.398693561554 0.971186041832
SURF 0x00
mat 1
refs 4
21 0.0161940678954 0.990538716316
23 0.0161940678954 0.838744044304
15 0.057136900723 0.85809648037
12 0.057136900723 0.971186041832
SURF 0x00
mat 1
refs 4
22 0.439636409283 0.838744044304
20 0.439636409283 0.990538716316
13 0.398693561554 0.971186041832
14 0.398693561554 0.85809648037
SURF 0x00
mat 1
refs 4
23 0.0161940678954 0.838744044304
22 0.439636409283 0.838744044304
14 0.398693561554 0.85809648037
15 0.057136900723 0.85809648037
SURF 0x00
mat 1
refs 4
23 0.0161940678954 0.838744044304
21 0.0161940678954 0.990538716316
16 0.00815110746771 0.980821847916
17 0.00815110746771 0.848460614681
SURF 0x00
mat 1
refs 4
20 0.439636409283 0.990538716316
22 0.439636409283 0.838744044304
19 0.447679311037 0.848460614681
18 0.447679311037 0.980821847916
SURF 0x00
mat 1
refs 4
22 0.0161940678954 0.838744044304
23 0.439636409283 0.838744044304
10 0.398693561554 0.85809648037
11 0.057136900723 0.85809648037
kids 0
OBJECT poly
name "AP-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.011733 -0.03787
0.004285 0.006468 -0.03787
0.004285 0.006468 -0.026163
0.004285 0.011733 -0.026163
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.817042410374 0.964951455593
3 0.766719996929 0.964951455593
2 0.766719996929 0.942317962646
1 0.817042410374 0.942317962646
kids 0
OBJECT poly
name "ALT-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.011733 -0.010268
0.004285 0.006468 -0.010268
0.004285 0.006468 -0.021975
0.004285 0.011733 -0.021975
numsurf 1
SURF 0x00
mat 0
refs 4
3 0.748715698719 0.964951455593
0 0.698393285275 0.964951455593
1 0.698393285275 0.942317962646
2 0.748715698719 0.942317962646
kids 0
OBJECT poly
name "FD-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.011733 0.025225
0.004285 0.006468 0.025225
0.004285 0.006468 0.036931
0.004285 0.011733 0.036931
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.545821964741 0.964951455593
3 0.495499670506 0.964951455593
2 0.495499670506 0.942317962646
1 0.545821964741 0.942317962646
kids 0
OBJECT poly
name "TRIM-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 -0.005548 -0.038512
0.004285 -0.013097 -0.038512
0.004285 -0.013097 -0.026259
0.004285 -0.005548 -0.026259
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.819803655148 0.890665233135
3 0.767130792141 0.890665233135
2 0.767130792141 0.858213663101
1 0.819803655148 0.858213663101
kids 0
OBJECT poly
name "APPR-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.002148 0.022492
0.004285 -0.003118 0.022492
0.004285 -0.003118 0.010786
0.004285 0.002148 0.010786
numsurf 1
SURF 0x00
mat 0
refs 4
3 0.607889473438 0.923746824265
0 0.557567059994 0.923746824265
1 0.557567059994 0.901113212109
2 0.607889473438 0.901113212109
kids 0
OBJECT poly
name "M-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 -0.005548 -0.0192
0.004285 -0.013097 -0.0192
0.004285 -0.013097 -0.006947
0.004285 -0.005548 -0.006947
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.736788570881 0.890665233135
3 0.684115707874 0.890665233135
2 0.684115707874 0.858213663101
1 0.736788570881 0.858213663101
kids 0
OBJECT poly
name "FD-annun"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.003674 0.014177 -0.040221
0.003674 -0.014177 -0.040221
0.003674 -0.014177 0.040221
0.003674 0.014177 0.040221
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.400960415602 0.975200414658
3 0.055883333087 0.975200414658
2 0.0558832138777 0.853564143181
1 0.400960415602 0.853564083576
kids 0
OBJECT poly
name "ARM-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.011733 -0.006323
0.004285 0.006468 -0.006323
0.004285 0.006468 0.005384
0.004285 0.011733 0.005384
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.681432187557 0.964951455593
3 0.631109774113 0.964951455593
2 0.631109774113 0.942317962646
1 0.681432187557 0.942317962646
kids 0
OBJECT poly
name "NAV-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.011733 0.02225
0.004285 0.006468 0.02225
0.004285 0.006468 0.010543
0.004285 0.011733 0.010543
numsurf 1
SURF 0x00
mat 0
refs 4
3 0.60893291235 0.964951455593
0 0.558610498905 0.964951455593
1 0.558610498905 0.942317962646
2 0.60893291235 0.942317962646
kids 0
OBJECT poly
name "BC-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 -0.00671 0.038873
0.004285 -0.011975 0.038873
0.004285 -0.011975 0.027166
0.004285 -0.00671 0.027166
numsurf 1
SURF 0x00
mat 0
refs 4
3 0.537476122379 0.885671675205
0 0.487153828144 0.885671675205
1 0.487153828144 0.863038122654
2 0.537476122379 0.863038122654
kids 0
OBJECT poly
name "GA-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.002148 -0.026163
0.004285 -0.003118 -0.026163
0.004285 -0.003118 -0.03787
0.004285 0.002148 -0.03787
numsurf 1
SURF 0x00
mat 0
refs 4
3 0.817042410374 0.923746824265
0 0.766719996929 0.923746824265
1 0.766719996929 0.901113212109
2 0.817042410374 0.901113212109
kids 0
OBJECT poly
name "CPLD-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.002148 0.005991
0.004285 -0.003118 0.005991
0.004285 -0.003118 -0.005716
0.004285 0.002148 -0.005716
numsurf 1
SURF 0x00
mat 0
refs 4
3 0.67882424593 0.923746824265
0 0.628501951694 0.923746824265
1 0.628501951694 0.901113212109
2 0.67882424593 0.901113212109
kids 0
OBJECT poly
name "GS-ON"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004285 0.002148 -0.021732
0.004285 -0.003118 -0.021732
0.004285 -0.003118 -0.010026
0.004285 0.002148 -0.010026
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.747672617435 0.923746824265
3 0.697350203991 0.923746824265
2 0.697350203991 0.901113212109
1 0.747672617435 0.901113212109
kids 0

View file

@ -1,175 +0,0 @@
<?xml version="1.0"?>
<!--
KA 285 Mode Annunciator Panel
Syd Adams
-->
<PropertyList>
<path>fd-annun.ac</path>
<animation>
<type>material</type>
<object-name>FD-annun</object-name>
<emission>
<red>0.7</red>
<green>0.5</green>
<blue>0.3</blue>
<factor-prop>/systems/electrical/outputs/instrument-lights</factor-prop>
</emission>
</animation>
<animation>
<type>select</type>
<object-name>FD-ON</object-name>
<condition>
<property>/instrumentation/kfc200/fd-on</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>NAV-ON</object-name>
<condition>
<or>
<equals>
<property>/instrumentation/kfc200/lnav</property>
<value>2</value>
</equals>
<equals>
<property>/instrumentation/kfc200/lnav</property>
<value>3</value>
</equals>
</or>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>ARM-ON</object-name>
<condition>
<property>/instrumentation/kfc200/armed</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>CPLD-ON</object-name>
<condition>
<property>/instrumentation/kfc200/cpld</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>HDG-ON</object-name>
<condition>
<equals>
<property>autopilot/locks/heading</property>
<value>dg-heading-hold</value>
</equals>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>APPR-ON</object-name>
<condition>
<or>
<equals>
<property>/instrumentation/kfc200/lnav</property>
<value>4</value>
</equals>
<equals>
<property>/instrumentation/kfc200/lnav</property>
<value>5</value>
</equals>
</or>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>GS-ON</object-name>
<condition>
<equals>
<property>autopilot/locks/altitude</property>
<value>gs1-hold</value>
</equals>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>GA-ON</object-name>
<condition>
<equals>
<property>/instrumentation/kfc200/lnav</property>
<value>10</value>
</equals>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>ALT-ON</object-name>
<condition>
<equals>
<property>autopilot/locks/altitude</property>
<value>altitude-hold</value>
</equals>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>AP-ON</object-name>
<condition>
<not>
<property>/autopilot/locks/passive-mode</property>
</not>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>BC-ON</object-name>
<condition>
<property>/instrumentation/nav/back-course-btn</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>O-ON</object-name>
<condition>
<property>/instrumentation/marker-beacon/outer</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>M-ON</object-name>
<condition>
<property>/instrumentation/marker-beacon/middle</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>A-ON</object-name>
<condition>
<property>/instrumentation/kfc200/alert</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>TRIM-ON</object-name>
<condition>
<property>/instrumentation/kfc200/trim-fail</property>
</condition>
</animation>
</PropertyList>

View file

@ -1,714 +0,0 @@
AC3Db
MATERIAL "metal" rgb 1 1 1 amb 0.2 0.2 0.2 emis 0 0 0 spec 1 1 1 shi 32 trans 0
OBJECT world
kids 12
OBJECT poly
name "PitchToggle"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 12
0.005447 -0.000516 0.054266
0.005447 -0.000516 0.039118
0.004439 -0.000516 0.054266
0.004439 -0.000516 0.039118
0.010363 0.015024 0.054266
0.010363 -0.016056 0.054266
0.010363 -0.016056 0.039118
0.010363 0.015024 0.039118
0.004439 0.017662 0.054266
0.004439 -0.018694 0.054266
0.004439 -0.018694 0.039118
0.004439 0.017662 0.039118
numsurf 8
SURF 0x00
mat 0
refs 4
0 0.517946064472 0.762528419495
4 0.517946064472 0.73246049881
8 0.548013985157 0.73246049881
2 0.548013985157 0.762528419495
SURF 0x00
mat 0
refs 4
5 0.517946064472 0.762528419495
0 0.517946064472 0.73246049881
2 0.548013985157 0.73246049881
9 0.548013985157 0.762528419495
SURF 0x00
mat 0
refs 4
1 0.517946064472 0.762528419495
6 0.517946064472 0.73246049881
10 0.548013985157 0.73246049881
3 0.548013985157 0.762528419495
SURF 0x00
mat 0
refs 4
7 0.517946064472 0.762528419495
1 0.517946064472 0.73246049881
3 0.548013985157 0.73246049881
11 0.548013985157 0.762528419495
SURF 0x00
mat 0
refs 4
0 0.517946064472 0.762528419495
5 0.517946064472 0.73246049881
6 0.548013985157 0.73246049881
1 0.548013985157 0.762528419495
SURF 0x00
mat 0
refs 4
4 0.517946064472 0.762528419495
0 0.517946064472 0.73246049881
1 0.548013985157 0.73246049881
7 0.548013985157 0.762528419495
SURF 0x00
mat 0
refs 4
7 0.517946064472 0.762528419495
11 0.517946064472 0.73246049881
8 0.548013985157 0.73246049881
4 0.548013985157 0.762528419495
SURF 0x00
mat 0
refs 4
10 0.517946064472 0.762528419495
6 0.517946064472 0.73246049881
5 0.548013985157 0.73246049881
9 0.548013985157 0.762528419495
kids 0
OBJECT poly
name "APPR.btn"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 8
0.006368 -0.01082 -0.013205
0.006368 -0.021694 -0.013205
0.006368 -0.021694 -0.02684
0.006368 -0.01082 -0.02684
0.004439 -0.010216 -0.012448
0.004439 -0.022298 -0.012448
0.004439 -0.022298 -0.027597
0.004439 -0.010216 -0.027597
numsurf 5
SURF 0x00
mat 0
refs 4
4 0.542991161346 0.749106705189
0 0.542991161346 0.782164275646
3 0.509610176086 0.782164275646
7 0.509610176086 0.749106705189
SURF 0x00
mat 0
refs 4
0 0.542991161346 0.749106705189
4 0.542991161346 0.782164275646
5 0.509610176086 0.782164275646
1 0.509610176086 0.749106705189
SURF 0x00
mat 0
refs 4
6 0.509610176086 0.782164275646
2 0.509610176086 0.749106705189
1 0.542991161346 0.749106705189
5 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
7 0.509610176086 0.782164275646
3 0.509610176086 0.749106705189
2 0.542991161346 0.749106705189
6 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
3 0.509610176086 0.782164275646
0 0.509610176086 0.749106705189
1 0.542991161346 0.749106705189
2 0.542991161346 0.782164275646
kids 0
OBJECT poly
name "HDG.btn"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 8
0.006368 0.017165 0.026773
0.006368 0.006291 0.026773
0.006368 0.006291 0.013139
0.006368 0.017165 0.013139
0.004439 0.017769 0.02753
0.004439 0.005687 0.02753
0.004439 0.005687 0.012382
0.004439 0.017769 0.012382
numsurf 5
SURF 0x00
mat 0
refs 4
4 0.542991161346 0.749106705189
0 0.542991161346 0.782164275646
3 0.509610176086 0.782164275646
7 0.509610176086 0.749106705189
SURF 0x00
mat 0
refs 4
0 0.542991161346 0.749106705189
4 0.542991161346 0.782164275646
5 0.509610176086 0.782164275646
1 0.509610176086 0.749106705189
SURF 0x00
mat 0
refs 4
6 0.509610176086 0.782164275646
2 0.509610176086 0.749106705189
1 0.542991161346 0.749106705189
5 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
7 0.509610176086 0.782164275646
3 0.509610176086 0.749106705189
2 0.542991161346 0.749106705189
6 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
3 0.509610176086 0.782164275646
0 0.509610176086 0.749106705189
1 0.542991161346 0.749106705189
2 0.542991161346 0.782164275646
kids 0
OBJECT poly
name "BC.btn"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 8
0.006368 -0.01082 0.007034
0.006368 -0.021694 0.007034
0.006368 -0.021694 -0.0066
0.006368 -0.01082 -0.0066
0.004439 -0.010216 0.007791
0.004439 -0.022298 0.007791
0.004439 -0.022298 -0.007357
0.004439 -0.010216 -0.007357
numsurf 5
SURF 0x00
mat 0
refs 4
4 0.542991161346 0.749106705189
0 0.542991161346 0.782164275646
3 0.509610176086 0.782164275646
7 0.509610176086 0.749106705189
SURF 0x00
mat 0
refs 4
0 0.542991161346 0.749106705189
4 0.542991161346 0.782164275646
5 0.509610176086 0.782164275646
1 0.509610176086 0.749106705189
SURF 0x00
mat 0
refs 4
6 0.509610176086 0.782164275646
2 0.509610176086 0.749106705189
1 0.542991161346 0.749106705189
5 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
7 0.509610176086 0.782164275646
3 0.509610176086 0.749106705189
2 0.542991161346 0.749106705189
6 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
3 0.509610176086 0.782164275646
0 0.509610176086 0.749106705189
1 0.542991161346 0.749106705189
2 0.542991161346 0.782164275646
kids 0
OBJECT poly
name "Pitch.down"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004439 -0.000516 0.054247
0.004439 -0.000516 0.039137
0.004439 0.01762 0.054247
0.004439 0.01762 0.039137
numsurf 1
SURF 0x00
mat 0
refs 4
2 0.503951311111 0.726048648357
0 0.503951311111 0.686451256275
1 0.543548703194 0.686451256275
3 0.543548703194 0.726048648357
kids 0
OBJECT poly
name "Plane"
crease 30.000000
numvert 0
numsurf 0
kids 0
OBJECT poly
name "FD.btn"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 8
0.006368 0.017165 0.006784
0.006368 0.006291 0.006784
0.006368 0.006291 -0.00685
0.006368 0.017165 -0.00685
0.004439 0.017769 0.007541
0.004439 0.005687 0.007541
0.004439 0.005687 -0.007607
0.004439 0.017769 -0.007607
numsurf 5
SURF 0x00
mat 0
refs 4
4 0.542991161346 0.749106705189
0 0.542991161346 0.782164275646
3 0.509610176086 0.782164275646
7 0.509610176086 0.749106705189
SURF 0x00
mat 0
refs 4
0 0.542991161346 0.749106705189
4 0.542991161346 0.782164275646
5 0.509610176086 0.782164275646
1 0.509610176086 0.749106705189
SURF 0x00
mat 0
refs 4
6 0.509610176086 0.782164275646
2 0.509610176086 0.749106705189
1 0.542991161346 0.749106705189
5 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
7 0.509610176086 0.782164275646
3 0.509610176086 0.749106705189
2 0.542991161346 0.749106705189
6 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
3 0.509610176086 0.782164275646
0 0.509610176086 0.749106705189
1 0.542991161346 0.749106705189
2 0.542991161346 0.782164275646
kids 0
OBJECT poly
name "FDbase"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 8
9.5e-05 0.029311 -0.059503
9.5e-05 -0.029344 -0.059503
9.5e-05 -0.029344 0.059532
9.5e-05 0.029311 0.059532
0.004367 0.029311 -0.059503
0.004367 -0.029344 -0.059503
0.004367 -0.029344 0.059532
0.004367 0.029311 0.059532
numsurf 5
SURF 0x00
mat 0
refs 4
4 0.904559373856 0.84440433979
7 0.477707833052 0.844404459
6 0.477707713842 0.634072244167
5 0.904559135437 0.634072005749
SURF 0x00
mat 0
refs 4
0 0.407198339701 0.838163256645
4 0.407198339701 0.81044459343
5 0.434916943312 0.81044459343
1 0.434916943312 0.838163256645
SURF 0x00
mat 0
refs 4
1 0.407198339701 0.838163256645
5 0.407198339701 0.81044459343
6 0.434916943312 0.81044459343
2 0.434916943312 0.838163256645
SURF 0x00
mat 0
refs 4
2 0.407198339701 0.838163256645
6 0.407198339701 0.81044459343
7 0.434916943312 0.81044459343
3 0.434916943312 0.838163256645
SURF 0x00
mat 0
refs 4
4 0.407198339701 0.838163256645
0 0.407198339701 0.81044459343
3 0.434916943312 0.81044459343
7 0.434916943312 0.838163256645
kids 0
OBJECT poly
name "Pitch.up"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.004439 -0.000516 0.054247
0.004439 -0.000516 0.039137
0.004439 -0.018652 0.054247
0.004439 -0.018652 0.039137
numsurf 1
SURF 0x00
mat 0
refs 4
0 0.503767073154 0.729045391083
2 0.503767073154 0.689704537392
3 0.543107926846 0.689704537392
1 0.543107926846 0.729045391083
kids 0
OBJECT poly
name "NAV.btn"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 8
0.004439 -0.010216 0.012382
0.004439 -0.022298 0.012382
0.004439 -0.022298 0.02753
0.004439 -0.010216 0.02753
0.006368 -0.01082 0.013139
0.006368 -0.021694 0.013139
0.006368 -0.021694 0.026773
0.006368 -0.01082 0.026773
numsurf 5
SURF 0x00
mat 0
refs 4
4 0.509610176086 0.782164275646
7 0.509610176086 0.749106705189
6 0.542991161346 0.749106705189
5 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
0 0.509610176086 0.782164275646
4 0.509610176086 0.749106705189
5 0.542991161346 0.749106705189
1 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
1 0.509610176086 0.782164275646
5 0.509610176086 0.749106705189
6 0.542991161346 0.749106705189
2 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
2 0.509610176086 0.782164275646
6 0.509610176086 0.749106705189
7 0.542991161346 0.749106705189
3 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
4 0.509610176086 0.782164275646
0 0.509610176086 0.749106705189
3 0.542991161346 0.749106705189
7 0.542991161346 0.782164275646
kids 0
OBJECT poly
name "ALT.btn"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 8
0.004439 0.017769 -0.028096
0.004439 0.005687 -0.028096
0.004439 0.005687 -0.012948
0.004439 0.017769 -0.012948
0.006368 0.017165 -0.027339
0.006368 0.006291 -0.027339
0.006368 0.006291 -0.013705
0.006368 0.017165 -0.013705
numsurf 5
SURF 0x00
mat 0
refs 4
4 0.509610176086 0.782164275646
7 0.509610176086 0.749106705189
6 0.542991161346 0.749106705189
5 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
0 0.509610176086 0.782164275646
4 0.509610176086 0.749106705189
5 0.542991161346 0.749106705189
1 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
1 0.509610176086 0.782164275646
5 0.509610176086 0.749106705189
6 0.542991161346 0.749106705189
2 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
2 0.509610176086 0.782164275646
6 0.509610176086 0.749106705189
7 0.542991161346 0.749106705189
3 0.542991161346 0.782164275646
SURF 0x00
mat 0
refs 4
4 0.509610176086 0.782164275646
0 0.509610176086 0.749106705189
3 0.542991161346 0.749106705189
7 0.542991161346 0.782164275646
kids 0
OBJECT poly
name "APtoggle"
texture "kfc200.rgb"
texrep 1 1
crease 30.000000
numvert 26
0.005934 0.007089 -0.052557
0.007697 0.005245 -0.052557
0.008622 0.002868 -0.052557
0.008566 0.000318 -0.052557
0.007539 -0.002018 -0.052557
0.005696 -0.003781 -0.052557
0.003318 -0.004706 -0.052557
-0.001329 0.007247 -0.052557
0.001048 0.008172 -0.052557
0.003598 0.008116 -0.052557
0.005934 0.007089 -0.039439
0.007697 0.005245 -0.039439
0.008622 0.002868 -0.039439
0.008566 0.000318 -0.039439
0.007539 -0.002018 -0.039439
0.005696 -0.003781 -0.039439
0.003318 -0.004706 -0.039439
-0.001329 0.007247 -0.039439
0.001048 0.008172 -0.039439
0.003598 0.008116 -0.039439
0.002183 0.001733 -0.052557
0.002183 0.001733 -0.039439
0.017077 0.006153 -0.052557
0.017077 0.006153 -0.039439
0.016208 0.008379 -0.052557
0.016208 0.008379 -0.039439
numsurf 31
SURF 0x10
mat 0
refs 3
20 0.507779479027 0.760139346123
0 0.507779479027 0.725842237473
1 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
11 0.507779479027 0.725842237473
10 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
20 0.507779479027 0.760139346123
1 0.507779479027 0.725842237473
2 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
12 0.507779479027 0.725842237473
11 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
20 0.507779479027 0.760139346123
2 0.507779479027 0.725842237473
3 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
13 0.507779479027 0.725842237473
12 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
20 0.507779479027 0.760139346123
3 0.507779479027 0.725842237473
4 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
14 0.507779479027 0.725842237473
13 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
20 0.507779479027 0.760139346123
4 0.507779479027 0.725842237473
5 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
15 0.507779479027 0.725842237473
14 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
20 0.507779479027 0.760139346123
5 0.507779479027 0.725842237473
6 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
16 0.507779479027 0.725842237473
15 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
20 0.507779479027 0.760139346123
7 0.507779479027 0.725842237473
8 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
18 0.507779479027 0.725842237473
17 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
20 0.507779479027 0.760139346123
8 0.507779479027 0.725842237473
9 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
19 0.507779479027 0.725842237473
18 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
9 0.507779479027 0.760139346123
0 0.507779479027 0.725842237473
20 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 3
21 0.507779479027 0.760139346123
10 0.507779479027 0.725842237473
19 0.542076587677 0.725842237473
SURF 0x10
mat 0
refs 4
0 0.507779479027 0.760139346123
10 0.507779479027 0.725842237473
11 0.542076587677 0.725842237473
1 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
2 0.507779479027 0.760139346123
12 0.507779479027 0.725842237473
13 0.542076587677 0.725842237473
3 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
3 0.507779479027 0.760139346123
13 0.507779479027 0.725842237473
14 0.542076587677 0.725842237473
4 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
4 0.507779479027 0.760139346123
14 0.507779479027 0.725842237473
15 0.542076587677 0.725842237473
5 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
5 0.507779479027 0.760139346123
15 0.507779479027 0.725842237473
16 0.542076587677 0.725842237473
6 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
7 0.507779479027 0.760139346123
17 0.507779479027 0.725842237473
18 0.542076587677 0.725842237473
8 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
8 0.507779479027 0.760139346123
18 0.507779479027 0.725842237473
19 0.542076587677 0.725842237473
9 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
10 0.507779479027 0.760139346123
0 0.507779479027 0.725842237473
9 0.542076587677 0.725842237473
19 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
12 0.507779479027 0.760139346123
2 0.507779479027 0.725842237473
22 0.542076587677 0.725842237473
23 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
1 0.507779479027 0.760139346123
11 0.507779479027 0.725842237473
25 0.542076587677 0.725842237473
24 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
11 0.507779479027 0.760139346123
12 0.507779479027 0.725842237473
23 0.542076587677 0.725842237473
25 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
2 0.507779479027 0.760139346123
1 0.507779479027 0.725842237473
24 0.542076587677 0.725842237473
22 0.542076587677 0.760139346123
SURF 0x10
mat 0
refs 4
22 0.642654716969 0.748234629631
24 0.642654716969 0.728802919388
25 0.666600644588 0.728802919388
23 0.666600644588 0.748234629631
kids 0

View file

@ -1,198 +0,0 @@
<?xml version="1.0"?>
<!--
KFC-200 FlightDirector / Autopilot Controller
Syd Adams
-->
<PropertyList>
<path>fd-control.ac</path>
<animation>
<type>material</type>
<object-name>FDbase</object-name>
<emission>
<red>0.028</red>
<green>0.014</green>
<blue>0.007</blue>
<factor-prop>systems/electrical/outputs/instrument-lights</factor-prop>
</emission>
</animation>
<!--
<animation>
<type>pick</type>
<object-name>Pitch.down</object-name>
<condition>
<not-equals>
<property>/autopilot/locks/altitude</property>
<value></value>
</not-equals>
</condition>
<action>
<button>0</button>
<repeatable>true</repeatable>
<interval-sec>0.1</interval-sec>
<binding>
<command>property-adjust</command>
<property>/autopilot/settings/target-pitch-deg</property>
<step>-0.05</step>
<min>-15.0</min>
<max>15.0</max>
<wrap>false</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>Pitch.up</object-name>
<condition>
<not-equals>
<property>/autopilot/locks/altitude</property>
<value></value>
</not-equals>
</condition>
<action>
<button>0</button>
<repeatable>true</repeatable>
<interval-sec>0.1</interval-sec>
<binding>
<command>property-adjust</command>
<property>/autopilot/settings/target-pitch-deg</property>
<step>0.05</step>
<min>-15.0</min>
<max>15.0</max>
<wrap>false</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>HDG.btn</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
if(getprop("/instrumentation/kfc200/fdmode") != "hdg"){
setprop("/instrumentation/kfc200/fdmode","hdg");}
else{setprop("/instrumentation/kfc200/fdmode","off");}
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>FD.btn</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-toggle</command>
<property>/instrumentation/kfc200/fd-on</property>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>ALT.btn</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
if(getprop("/instrumentation/kfc200/fdmodeV") != "alt-arm"){
setprop("/instrumentation/kfc200/fdmodeV","alt-arm");}
else{setprop("/instrumentation/kfc200/fdmodeV","off");}
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>NAV.btn</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
if(getprop("/instrumentation/kfc200/fdmode") != "nav-arm"){
setprop("/instrumentation/kfc200/fdmode","nav-arm");}
else{setprop("/instrumentation/kfc200/fdmode","off");}
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>BC.btn</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
if(getprop("/instrumentation/kfc200/fdmode") != "bc"){
setprop("/instrumentation/kfc200/fdmode","bc");}
else{setprop("/instrumentation/kfc200/fdmode","off");}
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>APPR.btn</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
if(getprop("/instrumentation/kfc200/fdmode") != "appr"){
setprop("/instrumentation/kfc200/fdmode","appr");}
else{setprop("/instrumentation/kfc200/fdmode","off");}
</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>APtoggle</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-toggle</command>
<property>/autopilot/locks/passive-mode</property>
</binding>
</action>
</animation>
-->
<animation>
<type>rotate</type>
<object-name>APtoggle</object-name>
<property>/autopilot/locks/passive-mode</property>
<factor>40</factor>
<axis>
<x>0.0</x>
<y>1.0</y>
<z>0.0</z>
</axis>
<center>
<x-m>0.002</x-m>
<y-m>0.046</y-m>
<z-m>0.002</z-m>
</center>
</animation>
</PropertyList>

Binary file not shown.

View file

@ -1,649 +0,0 @@
AC3Db
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
MATERIAL "metal" rgb 1 1 1 amb 0 0 0 emis 0 0 0 spec 0.755939 0.755939 0.755939 shi 32 trans 0
MATERIAL "illum" rgb 1 1 1 amb 0 0 0 emis 0.4 0.4 0.4 spec 0.5 0.5 0.5 shi 32 trans 0
MATERIAL "led" rgb 1 1 1 amb 0 0 0 emis 0.9 0.9 0.9 spec 0 0 0 shi 32 trans 0
OBJECT world
kids 13
OBJECT poly
name "Alt.increase"
data 6
Circle
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001909 0.003508 -0.027819
0.001909 -0.004004 -0.027819
0.001909 -0.007759 -0.021314
0.001909 0.007263 -0.021314
numsurf 1
SURF 0x10
mat 1
refs 4
0 0.191024214029 0.863663256168
3 0.254288256168 0.863663256168
2 0.254288256168 0.800399184227
1 0.191024214029 0.800399184227
kids 0
OBJECT poly
name "Alt.decrease"
data 10
Circle.001
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001909 0.007263 -0.021314
0.001909 0.003508 -0.014809
0.001909 -0.004004 -0.014809
0.001909 -0.007759 -0.021314
numsurf 1
SURF 0x10
mat 1
refs 4
3 0.223378121853 0.796153068542
0 0.128184348345 0.796153068542
1 0.128184348345 0.891346871853
2 0.223378121853 0.891346871853
kids 0
OBJECT poly
name "Display"
data 4
Mesh
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001347 0.01115 0.017398
0.001347 -0.004529 0.017398
0.001347 -0.004529 -0.014807
0.001347 0.01115 -0.014807
numsurf 1
SURF 0x00
mat 2
refs 4
3 0.259085595608 0.683385789394
0 0.131304383278 0.683385848999
1 0.131304353476 0.621174097061
2 0.259085536003 0.621174037457
kids 0
OBJECT poly
name "altmsg.004"
data 8
Mesh.001
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001514 0.008404 -0.008098
0.001514 0.000694 -0.006926
0.001514 0.000694 -0.011749
0.001514 0.008404 -0.012921
numsurf 1
SURF 0x00
mat 3
refs 4
3 0.978541493416 0.101732596755
0 0.921992182732 0.10173265636
1 0.922260224819 0.011345628649
2 0.978809595108 0.0113455690444
kids 0
OBJECT poly
name "altmsg.003"
data 8
Mesh.002
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001514 0.008404 -0.002857
0.001514 0.000694 -0.001685
0.001514 0.000694 -0.006508
0.001514 0.008404 -0.00768
numsurf 1
SURF 0x00
mat 3
refs 4
3 0.978541493416 0.101732596755
0 0.921992182732 0.10173265636
1 0.922260224819 0.011345628649
2 0.978809595108 0.0113455690444
kids 0
OBJECT poly
name "altmsg.002"
data 8
Mesh.003
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001514 0.008404 0.002384
0.001514 0.000694 0.003556
0.001514 0.000694 -0.001267
0.001514 0.008404 -0.002439
numsurf 1
SURF 0x00
mat 3
refs 4
3 0.978541493416 0.101732596755
0 0.921992182732 0.10173265636
1 0.922260224819 0.011345628649
2 0.978809595108 0.0113455690444
kids 0
OBJECT poly
name "altmsg.001"
data 8
Mesh.004
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001514 0.008404 0.008429
0.001514 0.000694 0.009602
0.001514 0.000694 0.004778
0.001514 0.008404 0.003606
numsurf 1
SURF 0x00
mat 3
refs 4
3 0.978541493416 0.101732596755
0 0.921992182732 0.10173265636
1 0.922260224819 0.011345628649
2 0.978809595108 0.0113455690444
kids 0
OBJECT poly
name "Set.knob"
data 8
Mesh.010
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 33
0.007698 -0.000248 -0.021314
0.007698 0.004631 -0.023335
0.007698 0.005033 -0.021315
0.007698 0.004631 -0.019294
0.007698 0.003486 -0.01758
0.007698 0.001773 -0.016436
0.007698 -0.000248 -0.016034
0.007698 -0.002269 -0.016436
0.007698 -0.003982 -0.01758
0.007698 -0.005127 -0.019294
0.007698 -0.005529 -0.021314
0.007698 -0.005127 -0.023335
0.007698 -0.003982 -0.025049
0.007698 -0.002269 -0.026193
0.007698 -0.000248 -0.026595
0.007698 0.001773 -0.026193
0.007698 0.003486 -0.025049
0.001909 0.004631 -0.023335
0.001909 0.005033 -0.021314
0.001909 0.004631 -0.019294
0.001909 0.003486 -0.01758
0.001909 0.001773 -0.016436
0.001909 -0.000248 -0.016034
0.001909 -0.002269 -0.016436
0.001909 -0.003982 -0.01758
0.001909 -0.005127 -0.019294
0.001909 -0.005529 -0.021314
0.001909 -0.005127 -0.023335
0.001909 -0.003982 -0.025049
0.001909 -0.002269 -0.026193
0.001909 -0.000248 -0.026595
0.001909 0.001773 -0.026193
0.001909 0.003486 -0.025049
numsurf 32
SURF 0x00
mat 1
refs 4
16 0.434804230928 0.0668970048428
32 0.434804230928 0.019956022501
17 0.48174521327 0.019956022501
1 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
18 0.434804230928 0.0668970048428
2 0.434804230928 0.019956022501
1 0.48174521327 0.019956022501
17 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
19 0.434804230928 0.0668970048428
3 0.434804230928 0.019956022501
2 0.48174521327 0.019956022501
18 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
20 0.434804230928 0.0668970048428
4 0.434804230928 0.019956022501
3 0.48174521327 0.019956022501
19 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
21 0.434804230928 0.0668970048428
5 0.434804230928 0.019956022501
4 0.48174521327 0.019956022501
20 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
22 0.434804230928 0.0668970048428
6 0.434804230928 0.019956022501
5 0.48174521327 0.019956022501
21 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
23 0.434804230928 0.0668970048428
7 0.434804230928 0.019956022501
6 0.48174521327 0.019956022501
22 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
24 0.434804230928 0.0668970048428
8 0.434804230928 0.019956022501
7 0.48174521327 0.019956022501
23 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
25 0.434804230928 0.0668970048428
9 0.434804230928 0.019956022501
8 0.48174521327 0.019956022501
24 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
26 0.434804230928 0.0668970048428
10 0.434804230928 0.019956022501
9 0.48174521327 0.019956022501
25 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
27 0.434804230928 0.0668970048428
11 0.434804230928 0.019956022501
10 0.48174521327 0.019956022501
26 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
28 0.434804230928 0.0668970048428
12 0.434804230928 0.019956022501
11 0.48174521327 0.019956022501
27 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
29 0.434804230928 0.0668970048428
13 0.434804230928 0.019956022501
12 0.48174521327 0.019956022501
28 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
30 0.434804230928 0.0668970048428
14 0.434804230928 0.019956022501
13 0.48174521327 0.019956022501
29 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
31 0.434804230928 0.0668970048428
15 0.434804230928 0.019956022501
14 0.48174521327 0.019956022501
30 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 4
32 0.434804230928 0.0668970048428
16 0.434804230928 0.019956022501
15 0.48174521327 0.019956022501
31 0.48174521327 0.0668970048428
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
16 0.648551821709 0.181237071753
1 0.619323253632 0.20076712966
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
1 0.619323253632 0.20076712966
2 0.584845423698 0.207625299692
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
2 0.584845423698 0.207625299692
3 0.550367593765 0.200767368078
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
3 0.550367593765 0.200767368078
4 0.52113866806 0.181237310171
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
4 0.52113866806 0.181237310171
5 0.501608431339 0.152008503675
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
5 0.501608431339 0.152008503675
6 0.494750291109 0.117530703545
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
6 0.494750291109 0.117530703545
7 0.50160831213 0.0830528438091
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
7 0.50160831213 0.0830528438091
8 0.521138370037 0.0538239479065
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
8 0.521138370037 0.0538239479065
9 0.550367176533 0.0342937111855
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
9 0.550367176533 0.0342937111855
10 0.584844946861 0.0274356007576
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
10 0.584844946861 0.0274356007576
11 0.619322836399 0.0342935919762
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
11 0.619322836399 0.0342935919762
12 0.648551702499 0.0538237094879
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
12 0.648551702499 0.0538237094879
13 0.668081879616 0.0830525457859
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
13 0.668081879616 0.0830525457859
14 0.674939990044 0.117530345917
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
14 0.674939990044 0.117530345917
15 0.66808193922 0.152008146048
SURF 0x00
mat 1
refs 3
0 0.58484518528 0.117530435324
15 0.66808193922 0.152008146048
16 0.648551821709 0.181237071753
kids 0
OBJECT poly
name "Arm.btn"
data 8
Mesh.009
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 8
0.003493 9.8e-05 0.026987
0.003493 -0.003792 0.026987
0.003493 -0.003792 0.019984
0.003493 9.8e-05 0.019984
0.001722 9.8e-05 0.026987
0.001722 -0.003792 0.026987
0.001722 -0.003792 0.019984
0.001722 9.8e-05 0.019984
numsurf 5
SURF 0x00
mat 1
refs 4
4 0.0582099035382 0.00707477238029
0 0.0582099035382 0.0574415288866
3 0.007843144238 0.0574415288866
7 0.007843144238 0.00707477238029
SURF 0x00
mat 1
refs 4
0 0.0582099035382 0.00707477238029
4 0.0582099035382 0.0574415288866
5 0.007843144238 0.0574415288866
1 0.007843144238 0.00707477238029
SURF 0x00
mat 1
refs 4
6 0.007843144238 0.0574415288866
2 0.007843144238 0.00707477238029
1 0.0582099035382 0.00707477238029
5 0.0582099035382 0.0574415288866
SURF 0x00
mat 1
refs 4
7 0.007843144238 0.0574415288866
3 0.007843144238 0.00707477238029
2 0.0582099035382 0.00707477238029
6 0.0582099035382 0.0574415288866
SURF 0x00
mat 1
refs 4
3 0.007843144238 0.0574415288866
0 0.007843144238 0.00707477238029
1 0.0582099035382 0.00707477238029
2 0.0582099035382 0.0574415288866
kids 0
OBJECT poly
name "altmsg"
data 8
Mesh.006
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001514 0.008404 0.01367
0.001514 0.000694 0.014843
0.001514 0.000694 0.010019
0.001514 0.008404 0.008847
numsurf 1
SURF 0x00
mat 3
refs 4
3 0.978541493416 0.101732596755
0 0.921992182732 0.10173265636
1 0.922260224819 0.011345628649
2 0.978809595108 0.0113455690444
kids 0
OBJECT poly
name "Arm.msg"
data 8
Mesh.007
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001514 0.000233 0.016068
0.001514 -0.003128 0.016068
0.001514 -0.003128 0.00581
0.001514 0.000233 0.00581
numsurf 1
SURF 0x00
mat 3
refs 4
3 0.618501126766 0.957134366035
0 0.496961891651 0.957134366035
1 0.496961891651 0.917311787605
2 0.618501007557 0.917311787605
kids 0
OBJECT poly
name "Alert.msg"
data 8
Mesh.008
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 4
0.001514 0.000233 0.003243
0.001514 -0.003128 0.003243
0.001514 -0.003128 -0.012595
0.001514 0.000233 -0.012595
numsurf 1
SURF 0x00
mat 3
refs 4
3 0.664733886719 0.870237469673
0 0.477083057165 0.870237469673
1 0.477083057165 0.830414891243
2 0.664733827114 0.830414891243
kids 0
OBJECT poly
name "KAS297"
data 8
Mesh.005
texture "kas297.rgb"
texrep 1 1
crease 30.000000
numvert 20
0.000162 0.013777 -0.022431
0.000162 -0.013777 -0.022431
0.000162 -0.013777 0.022431
0.000162 0.013777 0.022431
0.00167 0.013777 -0.022431
0.00167 -0.013777 -0.022431
0.00167 -0.013777 0.022431
0.00167 0.013777 0.022431
0.000162 0.006275 0.030102
0.00167 0.006275 0.030102
0.000162 -0.006275 0.030102
0.00167 -0.006275 0.030102
0.000162 0.006275 -0.030102
0.00167 0.006275 -0.030102
0.000162 -0.006275 -0.030102
0.00167 -0.006275 -0.030102
0.00167 0.009957 -0.013718
0.00167 -0.003336 -0.013718
0.00167 -0.003336 0.016309
0.00167 0.009957 0.016309
numsurf 14
SURF 0x00
mat 1
refs 4
1 0.457330584526 0.851326823235
5 0.45733076334 0.851326525211
6 0.457330405712 0.145992904902
2 0.457330524921 0.145992904902
SURF 0x00
mat 1
refs 4
4 0.020636677742 0.851326942444
0 0.020636677742 0.851326823235
3 0.0206364393234 0.145993202925
7 0.0206365585327 0.145992994308
SURF 0x00
mat 1
refs 4
7 0.0206365585327 0.145992994308
3 0.0206364393234 0.145993202925
8 0.139534652233 0.0253909472376
9 0.139534652233 0.0253906790167
SURF 0x00
mat 1
refs 4
2 0.457330524921 0.145992904902
6 0.457330405712 0.145992904902
11 0.338432312012 0.0253906194121
10 0.338432431221 0.0253906790167
SURF 0x00
mat 1
refs 4
0 0.020636677742 0.851326823235
4 0.020636677742 0.851326942444
13 0.139534711838 0.971929192543
12 0.139534711838 0.971929192543
SURF 0x00
mat 1
refs 4
5 0.45733076334 0.851326525211
1 0.457330584526 0.851326823235
14 0.338432490826 0.971929192543
15 0.338432490826 0.971928715706
SURF 0x00
mat 1
refs 4
6 0.457330405712 0.145992904902
7 0.0206365585327 0.145992994308
9 0.139534652233 0.0253906790167
11 0.338432312012 0.0253906194121
SURF 0x00
mat 1
refs 4
4 0.020636677742 0.851326942444
5 0.45733076334 0.851326525211
15 0.338432490826 0.971928715706
13 0.139534711838 0.971929192543
SURF 0x00
mat 1
refs 4
10 0.338432431221 0.0253906790167
11 0.338432312012 0.0253906194121
9 0.139534652233 0.0253906790167
8 0.139534652233 0.0253909472376
SURF 0x00
mat 1
refs 4
12 0.139534711838 0.971929192543
13 0.139534711838 0.971929192543
15 0.338432490826 0.971928715706
14 0.338432490826 0.971929192543
SURF 0x00
mat 1
refs 4
5 0.45733076334 0.851326525211
4 0.020636677742 0.851326942444
16 0.0811778306961 0.71433955431
17 0.291848778725 0.714339256287
SURF 0x00
mat 1
refs 4
6 0.457330405712 0.145992904902
5 0.45733076334 0.851326525211
17 0.291848778725 0.714339256287
18 0.291848599911 0.242245286703
SURF 0x00
mat 1
refs 4
7 0.0206365585327 0.145992994308
6 0.457330405712 0.145992904902
18 0.291848599911 0.242245286703
19 0.0811777710915 0.242245346308
SURF 0x00
mat 1
refs 4
4 0.020636677742 0.851326942444
7 0.0206365585327 0.145992994308
19 0.0811777710915 0.242245346308
16 0.0811778306961 0.71433955431
kids 0

Binary file not shown.

View file

@ -1,229 +0,0 @@
<?xml version="1.0"?>
<!--
KAS 297 ALTITUDE SELECTOR
Syd Adams
*** requires kfc200.nas to run ***
-->
<PropertyList>
<path>kas297.ac</path>
<animation>
<type>material</type>
<object-name>Arm.btn</object-name>
<object-name>Set.knob</object-name>
<emission>
<red>0.028</red>
<green>0.014</green>
<blue>0.007</blue>
<factor-prop>systems/electrical/outputs/instrument-lights</factor-prop>
</emission>
</animation>
<animation>
<type>select</type>
<object-name>altmsg</object-name>
<object-name>altmsg.001</object-name>
<object-name>altmsg.002</object-name>
<object-name>altmsg.003</object-name>
<object-name>altmsg.004</object-name>
<condition>
<greater-than>
<property>systems/electrical/volts</property>
<value>1</value>
</greater-than>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>Alert.msg</object-name>
<condition>
<and>
<property>/instrumentation/kfc200/alt-alert</property>
<greater-than>
<property>systems/electrical/volts</property>
<value>1</value>
</greater-than>
</and>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>Arm.msg</object-name>
<condition>
<and>
<equals>
<property>/instrumentation/kfc200/vnav</property>
<value>1</value>
</equals>
<greater-than>
<property>systems/electrical/volts</property>
<value>1</value>
</greater-than>
</and>
</condition>
</animation>
<!-- Altitude Select -->
<animation>
<type>textranslate</type>
<object-name>altmsg</object-name>
<property>instrumentation/kfc200/alt-preset</property>
<factor>0.00001</factor>
<step>10000</step>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>textranslate</type>
<object-name>altmsg.001</object-name>
<property>instrumentation/kfc200/alt-preset</property>
<factor>0.0001</factor>
<step>1000</step>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>textranslate</type>
<object-name>altmsg.002</object-name>
<property>instrumentation/kfc200/alt-preset</property>
<factor>0.001</factor>
<step>100</step>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>textranslate</type>
<object-name>altmsg.003</object-name>
<property>instrumentation/kfc200/alt-preset</property>
<factor>0.01</factor>
<step>10</step>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>textranslate</type>
<object-name>altmsg.004</object-name>
<property>instrumentation/kfc200/alt-preset</property>
<factor>0.1</factor>
<step>1</step>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<!-- OSG animations
<animation>
<type>pick</type>
<object-name>Alt.decrease</object-name>
<action>
<button>0</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/kfc200/alt-preset</property>
<step>-100</step>
<min>0.0</min>
<max>99999.0</max>
<wrap>false</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>Alt.decrease</object-name>
<action>
<button>1</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/kfc200/alt-preset</property>
<step>-1000</step>
<min>0.0</min>
<max>99999.0</max>
<wrap>false</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>Alt.increase</object-name>
<action>
<button>0</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/kfc200/alt-preset</property>
<step>100</step>
<min>0.0</min>
<max>99999.0</max>
<wrap>false</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>Alt.increase</object-name>
<action>
<button>1</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>instrumentation/kfc200/alt-preset</property>
<step>1000</step>
<min>0.0</min>
<max>99999.0</max>
<wrap>false</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>Alt.arm</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
if(getprop("instrumentation/kfc200/vnav")!= 1){
setprop("instrumentation/kfc200/vnav",1);
setprop("autopilot/settings/target-altitude-ft",getprop("instrumentation/kfc200/alt-preset"));
}else{
setprop("instrumentation/kfc200/vnav",0);
}
</script>
</binding>
</action>
</animation>
-->
</PropertyList>

View file

@ -1,219 +0,0 @@
#### Bendix-King KFC-200 Flight Director ####
#Buttons
# HDG ...heading hold
# FD ..... flightdirector on/off
# ALT ....altitude arm
# NAV ...VOR / LOC arm
# BC ....LOC back course
# APPR ... LOC / GS arm
#### lnav ####
# 0 = wingleveler
# 1 = heading hold
# 2 = NAV arm
# 3 = NAV cap
# 4 = APPR arm
# 5 = APPR cap
#### vnav ####
# 0 = pitch hold
# 1 = ALT arm
# 2 = ALT cap
# 3 = GS arm
# 4 = GS cap
var L_list=["wing-leveler","dg-heading-hold","dg-heading-hold","nav1-hold","dg-heading-hold","nav1-hold","dg-heading-hold","nav1-hold"];
var V_list=["pitch-hold","pitch-hold","altitude-hold","pitch-hold","gs1-hold"];
var fdprop = props.globals.getNode("/instrumentation/kfc200",1);
var lnav = 0;
var vnav = 0;
var current_alt=0.0;
var alt_select = 0.0;
var DH = 0;
var HASGS = "/instrumentation/nav/has-gs";
var NAVLOC = "/instrumentation/nav/nav-loc";
var NAVDST = "/instrumentation/nav/nav-dist";
var NAVRNG = "/instrumentation/nav/in-range";
var HDEFL = "/instrumentation/nav/heading-needle-deflection";
var GSDEFL = "/instrumentation/nav/gs-needle-deflection";
var BC = "/instrumentation/nav/back-course-btn";
var HDG = props.globals.getNode("/autopilot/locks/heading",1);
var ALT = props.globals.getNode("/autopilot/locks/altitude",1);
var SPD = props.globals.getNode("/autopilot/locks/speed",1);
var SRVC = 0;
setlistener("/sim/signals/fdm-initialized", func {
fdprop.getNode("serviceable",1).setBoolValue(1);
fdprop.getNode("armed",1).setBoolValue(0);
fdprop.getNode("cpld",1).setBoolValue(0);
fdprop.getNode("pitch-trim",1).setIntValue(0);
fdprop.getNode("alt-trim",1).setIntValue(0);
fdprop.getNode("fd-on",1).setBoolValue(0);
fdprop.getNode("gs-arm",1).setBoolValue(0);
fdprop.getNode("lnav",1).setValue(0);
fdprop.getNode("vnav",1).setValue(0);
fdprop.getNode("alt-preset",1).setDoubleValue(0.0);
fdprop.getNode("alt-alert",1).setBoolValue(0);
fdprop.getNode("dh-alert",1).setBoolValue(0);
DH = getprop("/autopilot/route-manager/min-lock-altitude-agl-ft");
alt_select = 0;
ALT.setValue(V_list[vnav]);
HDG.setValue(L_list[lnav]);
settimer(update,5);
print("KFC-200 ... Check");
});
setlistener("/instrumentation/kfc200/fd-on", func(fd){
var fdON = fd.getBoolValue();
clear_ap();
},0,0);
setlistener("/autopilot/locks/passive-mode", func(ap){
if(!ap.getBoolValue()){
setprop("autopilot/settings/target-pitch-deg",getprop("/orientation/pitch-deg"));
}
},0,0);
setlistener("/instrumentation/kfc200/serviceable", func(srv){
if(srv.getBoolValue()){SRVC=1;
}else{
SRVC=0;
}
},0,0);
setlistener("/autopilot/settings/target-altitude-ft",func(at){
alt_select = at.getValue();
},0,0);
setlistener("/autopilot/route-manager/min-lock-altitude-agl-ft",func(dh){
DH = dh.getValue();
},0,0);
setlistener("/instrumentation/kfc200/lnav",func(ln){
if(SRVC == 0)return;
lnav = ln.getValue();
if(lnav == 4){
if(!getprop(NAVLOC)){
lnav=2;
setprop("/instrumentation/kfc200/lnav",lnav);
}else{
if(getprop(HASGS)){
if(!getprop(BC)){
setprop("/instrumentation/kfc200/gs-arm",1);
}
}
}
}
HDG.setValue(L_list[lnav]);
},0,0);
setlistener("/instrumentation/kfc200/vnav", func(vn){
if(SRVC == 0)return;
vnav = vn.getValue();
ALT.setValue(V_list[vnav]);
},0,0);
var clear_ap = func {
setprop("/autopilot/settings/target-pitch-deg",getprop("/orientation/pitch-deg"));
vnav = 0;
lnav=0;
setprop("/instrumentation/kfc200/lnav",lnav);
setprop("/instrumentation/kfc200/vnav",vnav);
HDG.setValue(L_list[lnav]);
ALT.setValue(V_list[vnav]);
}
#### PITCH TRIM = 1 degree per second ####
var pitch_trim = func {
var temp_pitch = getprop("autopilot/settings/target-pitch-deg");
var FR =getprop("sim/frame-rate");
if(FR > 0){
var trim = (1/FR) * arg[0];
setprop("autopilot/settings/target-pitch-deg",temp_pitch + trim);
}
}
#### ALTITUDE TRIM = 600 fpm ####
var alt_trim = func {
var temp_alt = getprop("autopilot/settings/target-altitude-ft");
var FR =getprop("sim/frame-rate");
if(FR > 0){
var trim = (10/FR) * arg[0];
setprop("autopilot/settings/target-altitude-ft",temp_alt + trim);
}
}
var update_nav = func {
if(SRVC == 1){
var inrange= getprop(NAVRNG);
if(inrange){
if(lnav == 2 or lnav == 4){
setprop("instrumentation/kfc200/armed",1);
setprop("instrumentation/kfc200/cpld",0);
var DF = getprop(HDEFL);
if(DF > -9 and DF < 9){
setprop("/instrumentation/kfc200/lnav",lnav + 1);
setprop("instrumentation/kfc200/armed",0);
setprop("instrumentation/kfc200/cpld",1);
}
}
if(lnav ==5){
if(getprop("instrumentation/kfc200/gs-arm")){
if(getprop("instrumentation/nav/gs-distance") < 25000){
var GS1 = getprop(GSDEFL);
if( GS1< 1.0 and GS1 > -1.0){vnav = 4;
setprop("/instrumentation/kfc200/vnav",vnav);
}
}
}
}
}
if(vnav == 1){
var offset = get_altoffset();
if(offset > -990 and offset < 990){
setprop("/instrumentation/kfc200/vnav",vnav + 1);
}
}
}
}
var get_altoffset = func(){
current_alt = getprop("/instrumentation/altimeter/pressure-alt-ft");
var offset = (current_alt - alt_select);
var alert =0;
if(offset > -1000 and offset < -1000){
if(offset < -300 and offset > 300)alert = 1;
}
fdprop.getNode("alt-alert").setBoolValue(alert);
return(offset);
}
var update = func {
var PT = getprop("instrumentation/kfc200/pitch-trim");
var AT = getprop("instrumentation/kfc200/alt-trim");
if(PT !=0)pitch_trim(PT);
if(AT!=0)alt_trim(AT);
if(getprop("/position/altitude-agl-ft") < DH){
props.globals.getNode("/autopilot/locks/passive-mode").setBoolValue(1);
setprop("instrumentation/kfc200/dh-alert",1);
}else{
setprop("instrumentation/kfc200/dh-alert",0);
}
update_nav();
settimer(update, 0);
}

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