From eb47297d940401ecedf57428c816cb70183d758a Mon Sep 17 00:00:00 2001 From: Frederic Bouvier Date: Fri, 4 Jun 2010 23:05:32 +0200 Subject: [PATCH] Thorsten Renk: local weather 0.61 --- Docs/README.local_weather.html | 75 +- Docs/carrier-ops08.jpg | Bin 0 -> 42927 bytes Docs/clouds-detailed01.jpg | Bin 0 -> 95293 bytes Docs/clouds-lpb01.jpg | Bin 0 -> 101563 bytes Docs/menu2.jpg | Bin 10302 -> 17492 bytes Effects/clouds-thin.eff | 132 ++-- Effects/clouds-thinlayer.eff | 64 ++ Effects/test.eff | 81 ++ Nasal/local_weather.nas | 1077 +++++++++++++++++++++++---- Nasal/weather_tile_management.nas | 539 ++++++++++++++ Nasal/weather_tiles.nas | 1001 ++++++++++++++++++++++--- Shaders/clouds-layered.vert | 12 +- Shaders/clouds-thick.vert | 2 +- Shaders/clouds-thinlayer.frag | 11 + Shaders/clouds-thinlayer.vert | 63 ++ Shaders/test.frag | 11 + Shaders/test.vert | 91 +++ gui/dialogs/local_weather.xml | 11 + gui/dialogs/local_weather_tiles.xml | 102 ++- gui/menubar.xml.alt | 654 ++++++++++++++++ 20 files changed, 3603 insertions(+), 323 deletions(-) create mode 100644 Docs/carrier-ops08.jpg create mode 100644 Docs/clouds-detailed01.jpg create mode 100644 Docs/clouds-lpb01.jpg create mode 100644 Effects/clouds-thinlayer.eff create mode 100644 Effects/test.eff create mode 100644 Nasal/weather_tile_management.nas create mode 100644 Shaders/clouds-thinlayer.frag create mode 100644 Shaders/clouds-thinlayer.vert create mode 100644 Shaders/test.frag create mode 100644 Shaders/test.vert create mode 100644 gui/menubar.xml.alt diff --git a/Docs/README.local_weather.html b/Docs/README.local_weather.html index dea448563..f9bff84cd 100644 --- a/Docs/README.local_weather.html +++ b/Docs/README.local_weather.html @@ -7,7 +7,7 @@ -

Local Weather Package - v0.5

+

Local Weather Package - v0.61

1. Introduction

@@ -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.

-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.

+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.

-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 not be controlled from the local weather algorithms.

+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 not be controlled from the local weather algorithms.

2. Installation

-The package needs to be unpacked in the Flightgear root directory. It writes content into the Nasal/, gui/, gui/dialogs/, Shaders, Effects/, and Models/Weather/ subdirectories. The installation does not overwrite any of the default Flightgear files, but to be accessible from the menu, one must copy gui/menubar.xml.alt to the default menubar.xml or copy the last two lines of the environemnt menu calling local_weather and local_weather_tiles into the default file.

+The package needs to be unpacked in the Flightgear root directory. It writes content into the Nasal/, gui/, gui/dialogs/, Shaders, Effects/, Docs/, and Models/Weather/ subdirectories. The installation does not overwrite any of the default Flightgear files, but to be accessible from the menu, one must copy gui/menubar.xml.alt to the default menubar.xml or copy the last two lines of the environemnt menu calling local_weather and local_weather_tiles into the default file.

This adds the items Local Weather and Local weather tiles to the Environment menu when Flightgear is up. The central functionality is contained in local_weather.nas which is loaded at startup and identifies itself with a message, but does not start any functions unless called from the GUI.

@@ -29,7 +29,7 @@ This adds the items Local Weather and Local weather tiles 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.

-The first menu contains the low level cloud placement functions. Currently four options are supported: Place a single cloud, Place a cloud streak, Start the convective system, Create barrier clouds and Place a cloud layer.

+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: Place a single cloud, Place a cloud streak, Start the convective system, Create barrier clouds and Place a cloud layer.

@@ -83,31 +83,47 @@ The picture illustrates the result of a layer generation call for Nimbostratus c

Tile placement

-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.

+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.

-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).

+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.

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.

-The following pictures show the results of tile setups 'Incoming rainfront' and 'Summer rain':

+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.

+ +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.

+ + + +The following pictures show the results of tile setups 'Low-pressure-border' and 'High-pressure-border':

- +

- +

4. Cloud models

-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.

+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.

-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.

+

+ +

+ +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.

+ +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.

+ + + +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.

5. Local weather parameters

@@ -141,16 +157,20 @@ Effect volumes are always specified between a minimum and a maximum altitude, an where geometry is a flag (1: circular, 2: elliptical and 3: rectangular), lat and lon are the latitude and longitude, r1 and r2 are the two size parameters for the elliptic or rectangular shape (for the circular shape, only the first is used), phi is the rotation angle of the shape (not used for circular shape), alt_low and alt_high are the altitude boundaries, vis, rain, snow, turb and lift 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.

+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. +

6. Property tree structure

The internal state of the local weather system is found in the property tree under local-weather/. 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.

-The local-weather folder contains various subdirectories. clouds/ contains the record of all visible weather phenomena (clouds, precipitation layers, lightning...) in a subdirectory cloud[i]/. The total number of all models placed is accessible as local-weather/clouds/cloud-number. Inside each cloud/ subdirectory, there is a string type specifying the type of object and subdirectories position/ and orientation 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.

+The local-weather folder contains various subdirectories. clouds/ contains the record of all visible weather phenomena (clouds, precipitation layers, lightning...) in a subdirectory tile[j]/cloud[i]/. The total number of all models placed is accessible as local-weather/clouds/cloud-number. Inside each cloud/ subdirectory, there is a string type specifying the type of object and subdirectories position/ and orientation 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.

The local-weather/effect-volumes/ 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 local-weather/effect-volumes/effect-volume[i]/. In each folder, there are position/ and volume/ storing the spatial position and extent of the volume, as well as the active-flag which is set to 1 if the airplane is in the volume and the geometry flag which determines if the volume has circular, elliptical or rectangular shape. Finally, the effects/ 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 restore/ in which the conditions as they were when the volume was entered are saved.

local-weather/interpolation/ holds all properties which are set by the interpolation system, as well as subfolders station[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 local-weather/current/ 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.

+local-weather/tiles 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.

+

7. Weather tile setup

Examples for weather tile setup can be found in Nasal/weather-tiles.nas. 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.

@@ -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 gui/dialogs/local_weather_tiles.xml needs to be created and the name needs to be added with a tile setup call to the function set_tile in Nasal/local_weather.nas. +

8. Performance tuning

-

8. Known issues

+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:

+ +* 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.

+ +* 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 local-weather/config/distance-to-load-tile-m and local-weather/config/distance-to-remove-tile-m. Note that the removal range must 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.

+ +* 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.

+ +* 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.

+ +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.

+ +* 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 Nasal/local-weather.nas to a larger value.

+ +

9. Known issues

* 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.

@@ -174,8 +209,18 @@ To make your own tile visible, an entry in the menu 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.

+* 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.

-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.

+ +* The thermals in the soaring scenarios need a CVS patch to work.

+ +

10. Credits

+ +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.

+ + +Thorsten Renk, May 2010 diff --git a/Docs/carrier-ops08.jpg b/Docs/carrier-ops08.jpg new file mode 100644 index 0000000000000000000000000000000000000000..139c48e3bf1e390cc4f67fbe859065d8466fc32e GIT binary patch literal 42927 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

LdUS>6Z-6jB!ufV^aVM;EdynfQk|}#y-_H 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 Yg~$W-6sc5%RC+o~mUI43{{S=p*~O0yuK)l5 literal 0 HcmV?d00001 diff --git a/Docs/clouds-lpb01.jpg b/Docs/clouds-lpb01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a8def0199662010514df14a928930a9feb7d7f3 GIT binary patch literal 101563 zcmb@u2Q-}B+dewFs1Zc(q6?$W=pt%##^}+@2*DtF4Pv6pAR_wcMzkPGh>Ss$=z{27 zNYo(6f4uMa`_6aHI_Lb?S?i3IJ$v@EXYVI7*LB_3eLoL>XZ|h$ZtG}hYXI=@@Bmu4 zAHd&h0Iiy@v%R0Q6X!E`KQ~TIZ9T)ka{x5}5dk3~ApsGtAtE9oCZQlD!9A$S$!}56 zP~W*jLrp_NdzY1gmX4X8hK7-gk(rH+gM)*Xft#0`otKrJgZ*X^JltDJh)JkONvYWB zXz1AgKR^C<0cc3^p#+=+c-#Pd8ax6TyuY6TEC2vL!Oef+zaIpI0DK}mViMdzgWCXn zJOToI+{qK;&K(br1`nSAKuAM$hYP4m%WY&&=M$AiEK$hwpssuL7rn8=GOwiX0m)sp z==7p{CZEO_q#mkkKw>gpNyAI($8ifX;{k3q`yaaja4QlL5#x^W(fo4+x53Q`0SIs> zghzvahl>EHN@zsOZSO-zBoXy@7C=FOhdX@&8h|q35GiC@+YqR2jMBk3tuT(ny)3w= zgA};+za1b2ZW~@!{yUpgxIGvuWat4XE5!Km1&dcgA$8Lvn_40c5jt@)+XxY7YTx*M zfl6Ki1-U=W`9gsP9#jP>Z{hSMRV=>(&!?ID4c7aLhr?6u`s=v=_#Q+c#rGn4{sN+p z5+Or9Al(r%;fEk{V|3NMdny=FmBtPF)^4J|wluO@s@YBH`CGhN*QRG!&5vLE z*8SuB0&2Qi8Ff@WK09u8&#`+r-C6`)YOe18ee` z^xI8H*`a~3VQNp>5MKjLvbWplyw}pig8NpNYcX{inqDb)VxDDOy6bFd>{iPvAq~Xe zjFD$oeT3}=nx0LQ&P`yH9&8IMIl#`o>7@pt6<`ZUTlMGD`ESkKnyE~~$`2nxQ4sTE zpOeb03qIXnNdB>?M6=z`XhnDJA6Q#q+i>lRH(#U>TegBt@4Gk4-c_9uFp~CG4d1;@ zzH3;)mZaoq#YFZgD_xM`w;p&Z6Q6d^umBq@;@uWZ{kn?9U2fl4$?r0bL9kb~a`aRj zgr(Os(l_qffd)*>x@RDT>?XSZ{a$S-dJ55|1*G*+=V@AhOvI%q0$G^T%jG5({MMgZ zwHMfFx9#dOgcoy8Q5bNiZP@?J8EtO$i5w*TT`jj62-`7`-;*vnrW+9}K=)OiYIU1LDB$bv=RINHv1v(sg4nB}QQF zXSZ_j^s6xjpy!k1SIlE?6<+UJ42w^W4owAs$36(TP8CQ$Z0WBOIR82wqi&Rw(nR>ND3YU(w=qrp-?g=_bA)_cE(+Ukj+)KtgD4kb!xFN%vPW1mC{&+d{y+1;W zl`U&@03WHvuSOl-@_&w6Manli*Lon~OoOxnVK?c{cS z)?M7=1L!)!ULcYiH^j28PF5$39Kt$CmA+x_$Rx$5O?Eb_CmBF6&agFqHrAjx#ob!` zW)LC7QapDl#Tz!-%Erp^*5F!zNt7OIP)Jw(0iJAnU|HFR%@sTa6$$+&;hA?yI5fAF zXg~TkFNlpZ7>FJi@a`e*;7yB`!#hN+MOnq;b^4bn%bvdJAw#(v*#GHk58W2D^HZdr zYI-~Hawy7(D=n>8z%^z_r|L(Jwm46D)mh{TeKy+cMSYsZ0)w1e6~R0dzHPB$8zxXC z$lfFyGk&1=rv}@>Dx=B2Yq2e$7=HZOH)>0>$#q)j)tIE<(q#5#2az=mQrde7k!Xzh z7N~%TY8cNcw+kGCVEsW-c8tnRM(MJO-fkZJAUh#!o~ETFL7R=d69k)WSAo`8@}7VQ zMf}wHYO57EFwJe;p&?iu%)I|K+%Jei$dq>CD=N0lCI4HLDpEqBj7~o`vDNX(p_^_u zv83L-U^hw4Jx=>>`q7d1&&C1~!8yf3&1$9>rj*+`?K*QlruH`c6VoapfkWb@vr%we z&0C6Er96?rrVAwsoF;6QDC)u*qdQbprvA1Ag8JB(BGK|t!G4IQk*WZ-&X`{=G0M7B zC|lY#A#f%p(rtV95g^3KJ}oO+LMS+1aOR%Vmiy;at;WP~mTR-wFaZQR-zHLVm#U=Z z9vjwiEc#1K$}04}9BmpTgUDz06%|%6FrD_QH zYAN|KuK&4!@`1s|>bh%g-7!h6CF=uyYKZz)3h|%{_y&^#bA<%bG!i-x{wnvtmDm5c zD1j`Ob*1>WuZFO8o$NPmsvvav5KR|<6oPSSs;z;XDjYP$1fZB%F*c(j6)OK{=CPRx`Q9R#8K<$;eS1$CLY!Hlb0qfd zOVZ1brPVt^btfh%V<~?D)cic0*G*A}#p?c2VJtig^&hE^TNh8i&BPQR999)@I$MWP za#1dY-nt!%k&tN_P?kn+j5O)^kmnCd?hB(-cYs<<_YyZVG?Fj<(!!etgXbn%`(zS^uN)!3V=3GP|hh=%CN=cZwnUmcxBE} zkIRUWeoi3n_nD>^FQ`H$Cp&@)@wUx4bVLXUw%pSCRC|0>Ow7Op(lYG1npn;Q4QKG%eAdu@?2}$*;KEf0wNp=n(V@yN`(wdJ>fCJ@|a`2ZBhI&>%8A7&0QK zQ7r#t45G_UMHI`k9|vyDyWfKT&UX3GD*=Liq0p3$pii;PKgdtZnhDt`|C0QQiyvj- zJi=J{g&g9{dt?fqF`5IR<}yKLWJR9Cx3C=&sqz%X!qgqYh@DImq(j;4+njsS%L5%I z%0dbf?-+@Pg#CF>TBgkZHv=uAtcQCy{6;gQymQ<_OF1#k6 zCLd)$DBu{?sbVU*Nffp81Mseyb(-O2MeM6c;m#9PGkhezFciK}8C{baV){Bb8@*Dh zxcjgbu^}{rw)@J8(S>@$93nS_9NI=uIt1Ajh`s-`ICKk;O;ni{2piWJN7m@P7jnS0 z`?z-f|F$(`t*}A=6H^E)5I8G^$gVKX)-}cGydq>`yG3WdE))bhH^jLZH67t}%{PMr zoto?>$JHo@GR`zzby>Zh9Z>a$)eGyb8A_(UVojfnIKmJFzIKcExAR{fiQXX<tse#upIvx$wSyBzrakxe+&I6<7MLc}(emUQA@z##{{dqmP)7ggg!ukTe*=vS{AFV?x< z5z;lMLz1cb9Pn-GJF>dRyfiinm$|=X%w*pToo=&DRVQoGDXi9*GZ!(oaJPM|+lXmn z6Y6gGIl*3bVu&O|D?WW(>chfDH9MVU^$5aG_o;$vG8}nO< z9YdS8M#`NWqj6$|U!GfG(^V0*t)e%S=+bI~{z_kAR-s~6%YsxCMh;jM%o_`?v2y76 z3Wm066PoGdvW`BFYuJq)PJToR<|KGjk2gVMrkxVpCT>4l`b623&idF6hM`8O02ClS zWKK5IBprqadRlF9>LR;{3Z07l4&7;Sj{-R4`P-^oNSttdjrbCJ<%5t*;f?2h7ST{E2Tm+6)C~^E$EdtoN|K^JLzSdxIsHZqGV^15ytac;@8>^_DP#-pVGQY z{dVDs1M9NfxlOL~>9E%K^BmpoR9r_He~L5ow}Y+6ts_1cWA5b31oE$2UFe9I;Met% zysOoErv_*G&e;ERp?xvy{8_%S+}WA)>95(Or26u^ZLea6wWV{Pc+ETCrv2eDW4m3M z!RlR%5?t=BXvAkx&Stib;O^h@KTwxqDr$@rR^KGZ8H+nq<#GlQS9!YMY8G+iP1Y_@ zPc=ZnPh8EWGMs|hlswn&%ul`lx6i_0Xq>YR#d|izffcTk6nh)Vic~_7-fFl{uVJNzkx<;Ee5^prC`_@cI*i zsj~cxJhZy)6N=nvSv!Z89+KJCv@}buC(~*)58YH!I5(wkyFZe3sBdU3aZuq+K!fwP|gZ8pbHxbbfEL@8@`MT|{_3N&8_3428ZgH#&+%T$yl z3eOTbk6Z1=czEM*%G!1O4=Zq;|9Zy2|J}(HV};w`ABal>HDbMCcGE$}6&ms4up7yL zM&|~l2by7PXfnl>3sGL|1c=eEb5HhV9l0}984$AR#`&gAD(I3}rMDhpSvA?6{2jsa z+A`u`>E^P&MLtp~m;u*dG_aY(CRudIq!MjC8x@Tc= zbsut{AVC44bxO|}O8Ze+Ncw}kUEcR0tDb{vY>?#F~CtQqZCpHp`fNl~vvR_RP`+ zl}R zGtpIncrS=6SM2G+ZAw|$gpp%J&+t>Bvu#tjh0v7G=x1LY=W>?{w_licmw4T*I8j!z zA!Ij=bIQXvN{*B7bxRcU4OTT`ai}#av_!(P>D@>W?3SiK*e!1`!BlL-EaW- zQw5G+N`&jE!0CZD*bZI88*}1gLL7+}a;S+hp(DceanJcW_$|^vT)cwj6)I1rngwn}+ zXqIq8c3B)?SiqCim(&_=K-AZ_ZFXx*n3^ve;`zpffpJ$8F%#^Ph(~~s;@N2B`Pm4q>|X<$X*4e&U z61*;qSec1Udm-BVj;*ra(Qikq>zHJ$Rjz(&T+7xnfdQ~Ib#Ect@XnxRhy3io>prIQ zv4*Z60Z0NxNvqJu(wjTQo%e!nam@yxwb6k(m7#jyP8Ed%9zC?U#pz_+JQbS(+>~A% zIg}mGxirU;`s7X8`9R-V5HDz*6jDq-mUXFXxI5AjP=$y`IPHp8(&jvODOKEF_Q<9e z7jD6M0H+NioIk}$BF^OCL=lG#ThM~$9P{0$Dgvcb>I8u^1}=29#;loH6`JY9j|bGK zn<$Ej=1rpxi~I!!PzI=gHeKZASeX)Xexd*zV?vBW{l*RIb1w|N92ao*`3Cp}xfoq) z+&+#AF}`gk_-#?D|JY=lH73#}BfwRjOuGv1`L-eU|M4w1u6v8hF8BuWs|%$9vf@H^ zP@kVBBva8i)C;#LHT?^Fj4m_fV8{fv;~8-&CEkDa%B1eJNQ-;4UqFM7Z)^>5jmfqO z6gMFNg@@xCeA^6d$a;axNQZDSYjzJuuh~~5!j-b(hAKk=IpZteIlbh5)7A9(dgx&F z7Gef~DLP)ODhGR~4_>6Z#_^!swo3@{8(n;PNK2fisUM3OU-;?sDQI0PR-{86oLK#@ zJjUFZ$>umED94_ymJM_e=Orw~k!O|`@f6<&nqTJk|Ezeqxsox5{}*8Jvdd2he>LYQ zQznJ=5Q{H?ALz5aZM(7}`VHr1Ej*1#a0#ix<@D?LaK&nd7f45L+J;VHj!SS^(7ou{ z2bI1voAi6e{g)36gn~zFJk6w>k|22eQ4g=xH@E%*FtvG)>^KJVEFWln;}wqf*|R+| z8J)csw8BFsVfyUc`1G!zZ(BQnrOtVydGkC-`t4c3>cF?{@%j5d$#h-c)k2H5l-McK zJQeG~wI*fXdOY!kK9l1`hv_MHfUaIk_a8;bqOY{(QdWn<#xl)FUq+W9!sP{8N0jB1 zwnmA~DK4fJOpV&Su}wi&&payOoDx=q?3NtQ0Yegecc^Y%Oe~$!E1CYPFr<=$tOB5} zvtSS!;|b^fsr82a(xmw-W(Gfye)w%m>E0d(IE&CRk`nmK`+1Mp4&1^P$s^B0$KCdZ zALZ5_P)Q0b4Z{eEz`E+i34?te7UKiN08?HyPOe9Sgvm2yX4Z9tk(#!!?s{*9-m1J> zS$hkSUP7~aE5L)j&2+(r)-2wQ#!_`9sCDQTZEuk{;M}3af8A^l*-MkD^$@yf&XKR2A8 zh*|@TCrf(xy$??zq zg>{C8^q?(uVV{!0N<*IdwY!YFkF_%e5O!$AE$!PQq(rQL0kSP(2j`&+Vm(8`BveN7 zXo>J+N|T3~le%elw&Y?apkw#<=nwnE7mDilf4HVGg>nY2^2b;nT<-798BHIYV~1d7 zZ+l-xunv~qyTlgzsJ?mBks#Yh(R0Nwy=##5@?xdkU-_0PdX+F*T+_$|zt$xACQpI7 zjUsRfc(H~sj`PMzjQ@N-|Aa-@KT3qFRb}8}B`y>ax5e0?jS9tKb`$8)LTlW|347&+ z!TG!qlx1s<6c`sZ_dOc_8NtQmL^GU$WCr4bGH%jMd@iQ1uvsaibHfTj195qwMj|fb zx{1`xz+oXDT&_hX<%mng=*0yX*Kb4*r*QbV#H^~Mh&Hk-Z>6C)C5UIX=|{SNp{F4W zYtG18Cvxy~MpK~B&^KiK)aM*8Jj~<%f+v=(%B8QOYh!hIGAnEVz8*$_Gsk|O7zm<^EhEM54;uKg%iRo1c z@{SqfoEJ1L-Gr8WhMdO=sNU3*E?rDJ#F`!gxAi3K4d}<(y#wjr?!l4tKI15V{c&uK zpYV@T z!LTp-V`&aj1`S}E;LC!HJzUS)YrioqZli&k3CJ6E34U=u#o5g49`$`O2f zHg4^hufB7ZiGj3?q{jGBRHDPH)V+ef&(Xog%#A8TPBc=_o2k+(YF7B8Ep4Y)|~dl zQjv7UtyT2d2f5r6#?SP;>`emcvGdxjkUi17fPp1I$aJy%Nz)hC`g3|o+c^2#{n235 zeq&nFm(+zO$&Iy3VRn@AHRIXVH&j_u4r``$)B^gMpfj0l;JnyM8AY5v{PvrFn0K;K8>zBUHZtGbf=>RWmbE82>H4(w^diiZeswFR0Y zeWseq4bTG-Ts5~TjTdR43$&BAo;e>@hMm^0EoUW9C3rQ8v2Sh{w# z)zXz`D*6X?7C|C&QR8$37wL1Zg#SN z;XK{Ldwe)4G>9^KexXR5y&<{<~f+oL%LBtA9*;+!Ru96t6(w^GL|7gQSf7l{E8HQVVfM`_&#B zv@S?~-7JOM#ux-R2xBe!mvwJ#1xoK6&!4%4Rb^~$GG9KkMUO$8tn*;H=hFGGAMyvf zk{j&{WzE)A`&j-Cid-elU+AZ+3J~uIV0k6G3{!V$q4Uz_y7uR4YkCqAG^Op2aGfpRfhv$qt?TUUy!PS3VHCScmgOoNmxz|-`#FQEE&Sdaz!lRTjmK8S|f!J{qW zxk$yP$^gEZ~vTuF->sL-w zBj*+eeU57$X^{}}&!QR$Vh|o40DM#bg{r)ViMP8o=>|SCCLZZ5tO zk89O@!f=pO{17C6@%-BZkb=Y8*NMs6Xm0#qqxra1Jevg~4uj^v0xsox9qOo?0 z>i=mub@xGl3s0H8P}YU-r(W}4#GyU&ql<_9k9Red>GPKVSoCn>YB_;x4xvr)t}^}Y z3QJ}acyo+|)T`Ey`9WKoHByOKCaJCnQDR=~lhM!j1Gj|VRIzBPMeTUBm0ZpAvmdM0 zOaCA;4nabQ6=bK1zg#GIS3GfcW1wkZ7l{7x;|ssi#4WFx+!tqMqUGw*c2u=7ctV0e(!6h{f3 zXeJkG!ja2V-}EN=oB5MA zNsB90-el}IrThOmdQ-|o;NzHlQ?LKOzNJHRnMjuK6Jtg*h`&_%r>!e}^O@j+qQ4C7 zh6V|T4tDbm<}nst))Y57;nzps`+!Q^W75*HTeMV_><73DlUP zrTxr$iOgQK@9{t|-15M^NWmx9e@MnY)_{@KulmFJN7OKTs4(X;;P*-47s+V4+~BE+ zUs?Qa-w#pDpYI+eUsVKs+0QdJix-P^c*HvH!Z57O{U-W5Z6xp#Hb~A&C_>^ZtkgEQ zZIW(f;gcynLhC~OWBkrTU!U#*1%5EU==LMOU+U1b(2@utg@Elyt8@XG(I=bXiWR9E zLZV>YeJ5S?#$AYF@r$p6C9M7xz( zvl7puUnR3c8J1AZ;m>0dpEpzvnh7a3It*f}zymAieBa&X-Vx9ZtM-mtczdaB@V$-G zCxRNHINbTF8CWOj58V)|pz56!*Sz-0RZcP%ibJ8@bC~;ksckdRgLj)Xch-2{y3FenLT`<;O1G4q@6^#RyOETSFB-9MAe^%=lO`p(7Iy%a~4UjXasLjD&DR_oz{* z#L9y~gKQ4V8OlUJZ}H~)c_>!dfRg~FZ7!5CV_dpww>FkBFWLEMSrfMYYj#d|L?B~; z7zk0fHcr=pKUZKsaef`i13=U=TY8>G>GZcY3@ZX52fg6kM|xm>a*R^o2QzFa7fTk? zNVwbmX>Pqf-{SYMrvYAzFd1rn8c#g($3G%SVolaJQCJsB6Z=aC~$Vd9TlJFJ$ z3&2yaJclqXRb_t0b?33(;fa}JN&wP9Y>D0lqsl?ll`d%+h8*ub}tp0FTw#v^s zfpL4}C6~x-Yd)z-Kr;IQd|swodzS&D3pt&bv)rNkx1$jYG@%b`k{K<;T^M`psn_Uc zLJx$_nRqh)|1m+QbM}qfSJeO8lV>t72YM}K8tq(92<+Xzy8jJUA)dRtqnn0qZ< zsqw4tF!bpwsDiY8JP3Dpf$aF>`XHk%>Vdd3e((@bL92txJ%T#-2!Wr3<*6}zG`zT} z>1X&cGb2+*G`0v&g@Q`%!tfsJAth0PZ-hLVgA^y;hO!(Xz>6diA>|ZXrBy&hL zWY!=YA_$>)evmjxzJl%{hX8Gz_Q)gZYj_0u&>0Q4)3Y3SR%JWls5l#Ueox9)#vx3d3L=_PMYiK!x2Q|K}>ecMs;_^x^t?auB`0{43VS{`19{G8qr&A|N zN&Hb1ZweE!dF>mC4HRoY>D)sv#lWhPm(2jD$%Tk|WJpy}`ZMkrwy&;Vg4F2|Elh^t z{@qWX{^`lF8jP8#n^$j(QBPOt5uR#DbdUk@&n8gJELT32+-Lnbvz)Lrf%_WYh)yFu zfR0f=J{yvp6s;zHeJ047uB1^Ipg^%wv{PKmor1*M2lj2Q2_%r~%rGi74qCz}B-s{< zoAh?GgFL|N3*wrOVT}Qz-21-$KjfyGdmgs`c-*9kUv!y2R>mp?4ZW$Ujo7|d;OGijqB!}>NVSf@!(ha6Q^do*`O~1d(;H`yPw{&?R zXZX10>A{?0!;a1)99M0cWTpdJ--+Vr8!$1akw}gkvo^&ri{FgkF7LQ?y`PwSh|x7F zCcrV8mL8~)NR69-mOw-C^T&V4BaHwkCG zN2B&C-Y2{-9o5Jrd0#qvp9m)yH=C&6D8@hA{`ZOC79TC9OXl8d4AXPBeA3L>D;|=! zfs9O*IW3AAa$amY+TM$xg3;WO_zMvCm{NOomw1Y})52Bqp_-WGw}we4V}d)vL+2k; znjLFb&wZ7W=$4RJ+|2};DjL8GGvX{bZvrg?q3m%@foZZ{(Dx(cYsR6)uX&7 z_hfCXjzt#<>Oq#|>PLF*`#k$W1t5X~%&j6(17gH5wK9ywTJHF12Wf9ts&bM>?5B(t zV<6EC4+Z$NN@Vam5b>~Tvk)EYzs71v*%-rir0TBkllH*XajM(^Jj6}c_o;j=@5E-n zz@D=++FGGA zd$w@`T%mF5e~hzcjc@DPs!cepG4Gy*TQG*^8e2XQR65*@UBz#lqb4XIjAP_MIcy&c zXT@gM3-s|!y)QhhZSL?3&HPzvZJ@q1=6Q*UN!KLs`SceMeyr6Pn{1lqsxuPYOVLU0^xE9n#14!yiBqkJgNj%Z08Cy=kPr{SH9{bnykm~1pYIYi z4Yr~S?J;rXaWBX!)zZa5{)fUC=+46A?!HKk z6(yYx>FLI+K%NvHH`YTyMZTEw=z{RjSv(s&4{5?VuNnM3=hLls#}NocYv6rNtYUSfA)<> znfa1A`y}x2kI_H$q<%V3x`?E`iS}KmmzAF9Mlur^=0J8_u+FYPNZl|ScgtB4BfDaf zF76OcS*YoO5C5UKf+>d96IXt-3#>r!5#f}D4g;tAS5WAI>Niq@kI^fAiFo5S8ikXR zJ@vV(mD0thV@Zs66)PQQUpCJjSK$5?YY?TtvQLZlPOpSKPp@#g;y7EXSl$NnEY=`t zp2h8tJD1U@NOf!G{nEvR9V;D`8%Zl|u-T&g1qW?>_bHab$4)Ay*R93JG> zHU%4xA$yO^IpU*KRBeH&9$!gVJTT{f0atnP*kkgxQZ+K#0j(vIJMXq4EX~xmJcyI` z`_>@O@UAz?nJSY@BikH(K+u;^~LVe!G97 z6G{cGBo`#ZRpTVIzFPu&Sb90q=~i<(!^a^p{J-4}1)YV{RhN9s;zU@HpGLV;L$yt! ziTvTbrvr<<-s7(BzQs&ilIoAhjewCY5cC zwKIB_WK6RWdChHWfT9z`0lh%WfI40QI&UH}SC&4GEQKkC^$xR)1p2sdhLPaXJaJ;U zYBGdPW+LZ_hE}&?l{~CaK0CF|%S&>+iJ&L(8SzWW2K+LDJfBBk$O%S~SVh+d11VPf zlKYinS)~_lbKotZ;fAN%&j=z((XnFZ$?~E*#YhXsZPMNKXRCwUnt%`>-Ya%C5~p>* z4*JNBqKqagk)g?pHIVnKW3iG^eW)Ct5osm^P1o)|bb_jF@K~Jnv9t*%>)NE2B}{W8 z@@L+0V?*w;nvx0vTdmvS&=#i{t zyqNPLGrhsHe=!l+OZsQRBgk<%{XrQ1WU!cB;GrLj=2)eEkd(%IUtjUoA8wv>k*lr- z!PWV(jj{j)E$6;Kb+ugFABQ;A;h-8&W*C31ooB`S+LWL4z^j!GQJ)nY6LBQW`-gfM zUE|Rx9FLIy#&EZaMk8EQ#*z1rDfTyRnrE>};PrtC$AZ8Of9?JgtPu_^GY}ChfFeD_ z$OnRCD)N6oK+mQ9!)?5a@N~_|fQh{gW6Pfm5v8q0P~9>nB^hh;Kbs{_`U{{X6#sx< zf6J@pk(Vvml9s+NFj~p~4Lz!C<)KH7@}rz{(@2-bh9H?tR(vDn{l zLw^C5ffXsRUy|YXn?~0UJWt{#YRK__4W>&W@e>lx+p0ybm zy6e6AyZ8w{B;G;t3bB259Ug8_s(5MRbBeq6u7OZI6mn%rmQ0+kdEYQ9=7{LSFwZ}f zSl1ZS3{69XU3LuiqcbDA zD#d;$Y6P6}H^GlCJ33dbemMofSz;HAqW=QkutI^Bw0dw>l=ED^D#9qvJQcWSqwxFb z9Lr!7&iCMiscMXz{y#noCw2d*p$If!6sM1maGLc8qxW$^;0?_4=4<&22rNCGc{afE z^{dS2kG0!hGQR$<*qKvg{Sy+#S)fww?PK{GtCnVKJn#!Z_Ks&}YLMYqcKl233dR0f z{*AN4-R9&DHe}Q;hDw@nE%C}-P>i$xbHNoQWv%@z0IAvOLE&C=S1luD72>4{LOFD3 z7|WKD6qdVcYzF?BFt52|3+fGTY_E+P$8QxKgq394D(=dyoJ!2Nas+F*uX}wecMd;J z`xtAmc|~bdyBtoCQlrS@3I3@jOPNO`;%v6Ar7X1Z7XT|_+vk|0T{s!st}Lx{!1&`J|QV!Ihh++bSE8EJb92(Oh}8^wjZ2 z*ICP}yg?ru2K#(WoVtB4SuSEc&$AQpjlE3o*Jdv7rjs3f$V;u*YOc>ESwkcuFt4bc zdq=lhhwl~-*h_A@HpcK-k|VpJTxAzx3MBnTaWLH;-lW>k{jOG; zyg5}OJNmw_ECq7{+ENhmc1+=ztD6JGvD&>^tIF0RNa(r_4T;YH2-}$fF4ar9*XHAS z-kIq3oMmFYmatE+q}d#bAB%k1uy&n_;p7<*H>j(AlY+U62`#tYoTh*6e^wBb1A-WI z>gm4Q9dm}%2fsQgQkd~&It+L4xpNIT0%eD1XZ)&-pux-P@*1wU;OC@P$ zf%JIPt)Eg|y*XAT@(^uO>!VE`EeBN+ZAhGWoVckL2Ut!9T6?_c0%1g@mU~%pAYF<> zf(PS=Qb*}>u47q2i;R4+acmsQI#phZ80$^4$(aVYuKU;-ErVbt!51xU<>=R`l>%2Q z-hz*kY`>ADCDv>epN~#o37pgh-DX+)RL8_4b+;Aa)b|t>m~is?+k4Dy19*R-cGaS= zJylrrl#FjjtrfhEg(p+#n1E|v_zSur!12I2NBsLMK7*<14_BW)Gg}2NlBCu&UhcH+ zW<$2#HcUM?m3F|M<$M8Uf{T?oH5c;YA>*iZF>Zn@&8G(#Ke+3-3HrJ%% zO*T3!`&Mtta~?331oryGB*tv#*LZ}pkD)(OV4v9+g>y~&oq0|By?h$%NZr@}DVdQq zs0H+dO49N+E$hJ92uSh6Xp_MH0{+w~t~!^e@Z~n)YT=jPgegxp+DG#9IWqnNY(6qr z^?cSlBmZ^bZTC99z3kk~_1ZY)*VVTPT$!i+eZ#?u#+W2loa4ief#Ug>vM~$Xr7w zVf3taj@zt?1YNmtK}_DcJ+`iTMjC`Jdla}FLDRce(>rr;o-+L<#rl+~di_gXz>`z{ zJa-25k%oCUQFwH<1I#Wx@82q~RhwFwbx;^01o>CCC)0QdBZUbFY@FE+p? z<)=yoze!>YuGyx|u7;2onjYm9JfBFu2(0bv9tN@|7q3T$T#MyB+qr6$KWh)e*1a@$ z1dFb{@MG*p8&uu8b;$8FcyLa8@$u}pb0^<1M|p;f>qX13&jc{hCts^I9H-)dBJdGE2R1Oa!+c|KouI z>IsBc|KJt7bQvxm_>^@ZVizPDuV2Hjc1UnOHWtp+;Y(=rDe@f~RfLIAMB3*oWwPTr zm}f1UPvy?@p#8^ebOmI$j#syJ78cH4Ch$r)rGOo~PpWGVH`kys-}J&9N%usO8@`SSZHW8W`N$@#78KiC))QO6dqHY2iQ8 z`h*sH8#t`8rGi>f$V1*&0ne+mJ+&f`FybZ9a~OVnFtNa~2UC$wnKGcc#yZZJUf_fDh}nI&^!tE8N4M)gqalq8pQaCn zu7B9{9Z^Nr$;ZEsn5_|8v9s!(WqMO;b(RZF(SG*Mo>n3z-BvB7gLc*O?qN5@>rK&N z#YzK@DcP070S2eao)#=eshjb&a4LF{5_K%1DZOsHOJ=dGx3_hrq{c|cM1JbR^U+d~ zvgTa*wn1CCOz!CulXutmv%1N?Imr8Q1Ro02<%Jq#Zy;t8@nge$+NoDH3)gM07Z33J zN$ol`^r>~|a{9eUB7zSL7tcHzHHzoo>(T$*5dG-ZeJs^((7(esA&IT+z^k1k$xap? zk}1%nY+*e{YgX_Gi@Y}3otCnjE{i*rmCw|@tjuD5`Ea?|g@Q_zgt1nP{;Nr=1o-Dz zjr6%T@iNoTY0lA@{$oYzgB+sUus4xx{A32Bk=M$D@e< zA7(BbpBj~q0;;zZSb7+bh3dnrZ`JUB5u4X{+#y=Q;*E?|NS%uFo$se}%?0*)tT$Zq zPCF;Yl-I5P<}tlep?@Q~H{QAVI>D=Ys2?>A|D_jZrU%zHT%b$WHH9~ka+FsqnjEmA zL*9GVMBy#M*+mcv8)&M0%Ce5=k?!yvB?$wC{EyZv zZF1KJCyc|ES-};q5W|tS-zj9uHBLKnNj-l7eJ&7%pg{gV$EerczOEV$Jp=M6)7;YU zgOcWp8R*WPdI266f)G!D9p1K{I;&2e^Ki&tfJ;_l$3s}5KmVjw}BjmQr`}`Lmr-|XymAz*WeyfbTHN{al-WEIyIw#YhvB^G=i8g?% z?PPt37vXAqGmGjXd z=_Bty(zVZ{VP+=M$G&s(B80+A*}th}Wbyj2>xBMSJ8H|GxW62*nzq!l{C@xZ$=aXv z2+Nt)RtXJ*?(eU{{tE)`&n0OUD;fvAIu;S;xSU^82wKz;v zTzc&4Rtt`+cVC|R(%al7z$y=pjR*$t_OV{<53%={xqlLTLi{8*sA1$6YWCnQaAWBx zCQ2*1=ZGTtauh%PHBWvppcc*rzF!kbti^;D#bEab0@))Y7Ah4GfW&>JJS5g9_jVsc z!LYzFJ=LG#O$T7I9+c5bF4%}E+wQuNK%DBCu(Tq1B(;zbI&{G(#d^|AwO=5JBzNU` zcfzoQoJ%AZCx^s)O?_C~t7zcJaJgEZrh%@hkWWV2B0}muqaP#phsQ-}SWEV?K+v`S zSP5lMfTqz@FseuBuPSyVc`alK0lg39CY=&OAIPb*(NT!k_h~!|Wpv@63 zZb<{gZ@nsk7=<#b`<|73y>_}2j+y3`!}f3D=G(;VJ+oJi>ULrl;l?}fKdon(7#uJ; z@0v2mrvbPC^U&syG}o637#o>*{{Ua}sx8dKa`PSiM~HoCS*K9NP%q+^~!#Rv`?j4;kCgakQL!Qh_MfwOe! z^uS2Q z48)-8&S+L969mQPRoXm(k1T(kE#f;UQtg~^fm800scwQ{5ptuWu*N^$l~+u*^OAbv zsOuo*hkSBDp-(d`L7V`j;XwW4?dw&t5!7`^gSFTLjcEicIN?j=uJnF;312U5gFK?!zb-dM1l~)M_AnQqd8(f z?Mtc_gp(`n#!5t_05SUf>d{%oCT2w67Qznmxw%p^kC`6e;->VcOm=Sa-E2uqdA!ZQ zAAT`hn9UooQ{k>Wq^Qq4dVda|!F#KD?at`rSkbYC-m8)7dB#2S-`LX6@hAgra-fmZ zKKSE5YCgfz(65Ncb7zG=<|ErYADKOB=6K9_VouKIA^7Lt)2~i?b*1ehyLCcZNB~o{ zh;TqWU~&47<4%h^=|D!Eqai^Jv#+Ns(}H^S#yv1o0?`tA0xTYEkgK?441t`U+~fLj zP26eUw99QQ_-_t0Vlj;VYyrUj#a;Ht0;!miJfvif2VCRVC$D_tinMVfL{%gT7xx>d zQc2D}TyfT-^eItc9FqYkjdI_Wn{PQh5;}bSsB-Dc5fUpCyYt~s^CS6xO#uurta7~3 zZE`k@j(EYyCyxH-9XZ8Xd7^R(86It%=t$qd=( zMn-ZE`{$>6esuAfYiQF;AC5#Q4kT=VKqrzr9CZFwS!@c%(#0!2PnI?#c0K<9zV!6% z3rD;Fz@549v-0BlubSoSj;a7P1jWECHC=}*p+8d)Sp@XD%{{M=;M7UD(ZR5$lIU$hr$r=0q00U0Mvq+$Z zRV=wVVlY3x^`j+)j?(Kf;N?L~Z5bWN>-4VpFqYjL$WY}$5ae;m{`+xC_omIbw7XYT z@ls-Ol~*M5o`4LVlsC7y44!ZUlB?&)$RuO<)|B@1NQd^;!X+3XpOMs#J7*`ZD>b4; zeps^%j+q@X$8vq?`4USE@sfrtuo(Q~27%x#3VvNz<%BgL%cw;-xk0AmE$;2e)sPL382U9~hR%=M8{=zG?YN2Z}jd?m7EYGP
M83#YFAFW8%S(|8Wk>L4=z~invnpdbE*%DbIDi8%e*azlK z5+!&PI+)2F!i@b-^`bdg&~8)CLu3*&{U{E>*vHq5^S~$N{RLK}8Sb7#fw-LHkbBiP zsxARx>&|mmSn$WfjZ0%Eo(Hu@iggNJGz*;JNAarIOG1k%{F{L5kTHrJvBS_x-d=;K zKSNAg%u!e%P>gfX;C{8;?VZaXiU{No00-wwOq6&MdAz_3jo1U{lSB;pW>yEWTx1{R zRBeoMN~dz8Cz^@jkO6)VP#2{=2)mzZ0~&+DB#eCM>X9hH@aDnbscxS_KU$f03M2S{?u9)Bm@h*DvoiJ){6u&zFII(`iL!)=~6g+Qq3DP4m_)an!k)8 zh{JCPk<@a)eqQ{aQB!(63TUQN-ews-EXoKUPL**y z^SLG4Aay;3Nv$MflB(XhV1J%zf9Pf1Uh9*^;u}3N8$D&2iyv{de~JE7xtsAZP>KE$ zgFQFN&VFlKrWnj+BuNm1C&~ORbn?U9<)n1{6``v_iY)^b5GFPLRo(wPa>H=7HRkP~QAN220npO0l#FtkAfAc1zJn}FYI{_s6mY5H@uT?F)&_sMdT%YpskE!SBN|tXB z4>86ugPc_PADv`>__6#)E3@5R+(uaBvkPa*KlI!aR<-{C!)c31ms+L!GPW|YB7y$^ z*4eML{uzmNJs#faV+_S`=a0-dHF&M@pI}ip>&;iG#J9DJl+@V)ogIfgHFI%Yo^;2`F zFaH3Xr7aH^FX0D;gIP_rMsXXAul4vlEsPB!m4Yn)*v>8gl;t>jOcPRItbA z2AN(Ze466ZP>AAtX;cDngwOD#rR#?!ThNRe`qcW3gYZBj+*W1T(xwM6uRhfEALEai z?HDJeR4(E+kFG1*-07M-lEM`SwgwF<`c|8a0NDQksMFH_03CUVlzv7$^D_np&6p0hRJ64>xz8n za1YCOFV`Q^pwih77hr%o6#oEvTA%UKjTl%)@8OE4!>%_rIq6MFr_5U>c-RhuX&9lk zozCorkAugUpXEl63aoP&RH`bR{{W{n87EVp*ubFjHpT(P5=btF0>vL4^U3~{vA4V@ zEgNUpiVMcC3r6j=BRL({)c*i|s^JiMaK2oeVwPC$VM1QqUry+)yDW1A*oHQ3M3ww~+er(tz@yJQ6|d z6w?;>_!vAMfr{pp(UnV!cT@#@E7IJHy9P}!igH?o{~EC%zD(=jPQoUNvW! zOb7`YD)lYSDSr?~o*<2wHgMZGKQCH+G`rGs`!F-WW!;J^==U>BW|+iSfC%vTisBpH968O50r?=ffy&W!gp#FgWz! zRfdei8J1oKGq~p;Iy`CkF}@z|RstAPhYMrQuF+^Oq3MX?*tR#K{{K zF{n8l^vCqB$8;H!!jwQr9%dO)@~=@J;m?RwofT$R0oB6>3=cvNe%#Ry;YTNNwaN9z zH2epH&&n=aWRhJ+CO8Bs86RvPtuY)DvS-97=$P6aSyz+O)70_l@~s*F01t?P-3u>j z$JDG+(c)OzaW%tiK@mHf0H5Vkemnh~L;A0$i_xaL#ef{K-Of2qXnX<}6pd1l_&zE=q09Sg^j_}^w%(pN@49cXb zK5$Q55rK~5zhj=Yo>(l#U7WJKF7ey=fgBD8Oy{pXI3LfgJsze+X#}8KkO5Mx!yM<| zsmE{9sT7v*L*S&b&Aj>9MmG1r9eDL4=~GttZIPHG!B5$p_a44xwJR|ug-R1A8M_dSL<82%k9EKzA@@uiUlp&Eo`D~-#!$UO(P zd-emc$RtrWER)9|Ace%35+1&9F$DDI2exQ-x^v8}<0S3TQ^QP=!RKi^yL1DlaoY?{ zWh^;&RRn;D+p>L6&+bnI=QUQqBv)2;Cw9Sca@j*BQMLjHe1A^!jw7+e2#1i5xD|NWdxaHs_w1+%Rd2 znQe?fA{1p9Vo(#2^&i-!5@eeZ{4CQq)qcY!mW6Ix!*>wM5fp7Kk%5t(>^aBur36N@@Efa>tG#;cyBkm0x=GI92*(TZ9| zPF7D9069{m5uAE|I&t**cJ75+XdvVeFuwl)(w2|nu2qW@@^4?L{*=U4H-ZB+Y~c?( ze80pTaZ1yWl+4OXovqX!J-w>C<~*sx6Zx__XWoT!vZSR*kTQ@NTgp$j$kmDw7-1k| z(2NbhdvlY{d(|Y#n1%*Pr6C3bG=S&d7(S<=s+m|Ks!toHcLmy{atOgZdeZTHKnl$( zDxCTA#z$k0hpz^$iPHqAlL`*poPqK*jO>?9Ib$>m%-jO3F@xAIPw%~6R1!pyhFFzG zKsg6+?iZ(gezdb*#E7cU@_Mr_@1K8avAMTW&kOiq;1wqa9rAD~8OY)?gSO@++H;)w zf`RuL^c;#>3rLpXoPNy4jhI z>NLc7P)8Z*T)2_libjRQFDwZpXV$6kfGCni+aG3T?c0hho*YmKL%OeRqa^3pnqG`3 zhTfJ{&UTJ|-TAERd4k8`vYc+@w;&Ji z`|n4dDOpxc?Tlq|bAjvB^Tl2o*K;P$ir5^H^UpMokG=7n9@IlCJdU!G#PSbQj{g9m z{V7KX8IcLVY%WfHs-#KlFtcuQNh!-GayaBxwYDLjb+x>Rg;&ZLoF3;t-ZNQNcOu?Z zc5H${d>*8974)yeUyFYV+1f!D_(V-QMxmvVw-z|-gVL8;zB$*HHhPWZyW_Ky3ZzD% zcm#pZA1r+;(S8}#*f3iuM)Q{26@3<8$F^lLZXk(!1yC!&>za(Z<@D{T%`MHjkcgq> zqE!ci5F9gOoSuGNrbeC|m$%Yxvaj-#;xx9$G`@iN64Kk+>@Bpb0T@XAky zzvkFikUR6!?Nq4F_zUIh8;_-M+1-w+)$Vl-Pe5RPA6wJ&=;g=%0DD+BcUJNe6J62N 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 H|K9`v^H$)x literal 10302 zcmbt(byS>BlkN;2EDQt&cS3>&cMHJ-L~u=T7$n2s5FijF5IhV)1A*W$xJz(%89cbV z6Ksd%x4Yl>$KJd5+?R7W{dPTFRbAE7@6*+{6SwmKB4v3cc>oXy1Sq2Z0Jk>)5?M#{ zw@&6}^sd%UR`d!=sxNM*0kQy0bPNm(bWGGgOiWBHYyX?;bwrJ~1)qJ_tlY zMhzx;KuHP$ku#7}($LV+(UE`|nHg!BscGqG@00*hL$R^232|@;X&-{Au7GNY?x0#4(84v2<@j){$dgOW;sfGBS;FmQ1&(J}w}gEEdXNBS}<8jF~W zfk)=`Ta#fD-lwlL(wc^_A22dO!Ls|ze$5L9w^IOo)GW|I=pcX;U~KdIv9L#hSiBqi zuj0-R)8%3 zPE(b>Kou&g-Ux`1C#OqVLRnp{%+LKL`mC5@&Z_M;LY~STb)6~&VZn6YXxhPjATI%q z^;qf&r49LEDn}p^$LxDicllb5<62-xL`og^J7-UBE`m=hI}jz72&%6Jb4^=m7}rm{ zgp}7v7m6J%t#p5QkI;La7}9f!`EpL3x3mPmBY;{otNWNwE4Mf2RboC=jp3j4Nc}9) z(wwr!%ULiQcLJQU55Dt%7$^{i62Z-x%xjN;F(1G;Oa5_!Z%gsIkzF z-XXW`V~30f?8bPV;xWNeDW3!?wy=}$zI{W;44H%i!*am|vRId2&vb$qo=vVOiCH^9 z;}6=Y*J{&MsM2+g%KIU~_Ng>|v%5{r!W%_J1{Nkjj<2SX?w&K93-78X)OLC)%brx( z*{^|%c1Fptu_)1&>zi6$mv}y1l@AjwzmRHPSrru#>E)Fz;|ce%^R2QON~ILD9^?X7 zIi5;UnCxuiYCkcAho(B!bX$a4ocao20Ippjl_k#faBS@GY`meIpad`3L$%UZIA`^d zCDwR`V(Ab=dP~*Ra)k9zTWuv^wtu~$@?AuhOlhBYaB+9I<;dIuA5)}2ud7y|m{xrd z#9$4un`-AWco?fov4D3&hl#WM65fL72rp`{UTWe{RD>|I_|oS4=$wT&ZH?8OST03@b$=--SU&tDSxhdiPqg%%%RIS}2mQfM4Q_8PvQm!W!$aYvmtU@g z4V)s()Ps^3V7@Tfllxp$Dzf1tWy0_vU16tBMi=&D9i!p65niWs%wfO8(X=Y}pm8?R z?iV#e)|jp92DE6YTr#crm|457;JStY00HB_4k=FD$b@T2eM@|XmHdv*G_nuH1 z_k~ah+D1mtexx;fPr0~IXM+_!(uD(jL4^5&R8CqNsG<3%4QAHBKrJwUCeUWA?5AF_ zl9IVE*DmcS|6YYBDO2S=)1_$EbpgnPo{AENz`U4Nt!%olC=I`%bZ&0-$vP7#m?ITYCre0y z|D3cp*#BfqyLeDPt)J)rjn&BCzA3YSWsV3pwG&$R{P(EU%akuJke_D?=7pTJBpS6o z{#%t=zGuoiErn}EXRXa*=P9CHnh5iXhh3u9g*|Q!$!8k2rHWLIN#g`YeLAz~DmY`m zY18fLNr70}9~N%`G4K2-A#*EVe;_!V5sq(CL|n0J6i;amciaiwMG1;Ghbhu)vVz}= zi}#vZDLy1ezVK>)r>DQ**JD6Y`9fx9WJ+}NzAC>YTK4B!n)Vn?_)iG0W?D+U@Er64 zUC(YTb-8jcky=m~EL`c}Jy)O7AgRxL6^o?}CqRI=XJHqG-b+t{$xc5(M`Gs;lxC5& zuU7!M>=P{(iQ%nA8Ejol1w6g1&D0EToSf7XWeh6`aq{xR$Yix00Qhlix_2VYLxEes zV;qLUjlN_P{7+$~Dog|z;^ko&)%`REvhoGfOSx$H!)LUU)o~rmSrJTPTg#@MDg>Vs zmxDZMYRx#NFrJG>A>Glfu+uBu$-Qm?zFHl!^GO5f;kraSOO#O2Jej8q83*O6}kGqSIei$Yt}* zMz!&x+0X#EzP|swX%=LY<-K~P>yb*28=&zAc!$FMh=QOkhoqvwxoFwhH~==HKO>e= zgTJQ%{=54h$Z`k@kJ9mX00wRS*P75e%F$(tTSqHbS7lvhzfa2wZog9J|)z_ zo<&5KQsZLAOni^#9>(#wcK`f}w}u#t7TIE!E!i^MMIawaKp%sU$qNrq3atY#(cmB&N93eS2{9O;%-xa_-<|v-?0=)@hi7TM3ox!Gm?#$jUG2 zMoE|MS}aBF9S;|>rxu+=eHBMKYxyLTsBfIVGVZ&59C3&wG_Z7uaH;RxuFct)lr*VY z3;3GhSzCH$nYKH%1|g$nP5O=NV>Nyja-NlZ*Fv6!K8zk0W$o>97!BL!8Hg{8Pi-GB zFNC@p`C=DEd-_j#rM=ILzB7^i$HZPFp~k#E8?#+Q&to=yJPHtkgBeIOmngKnYA)wT%zuuD&IWXxOY11&Q*WTLsjq~?s zvvF}sR#6Mzi%PP?4kN@^A(eum4DGWNvc+N%@8rqLD1SrCLYHC(Qoe>T?K{oJ|JAY( zq$036)G6h7*Fu7~9Ib#=9)|u(Ndkc0UGvJEr+6a2Lnk7}NjheX$hgGew=))*J!1Uid0U@vEDCKE0mje#FEcB zo2olDvMb-$HtN!)=pxCrRA$aqs2^;meZs*SsFUP$;A+|1{Y0#6YpPjXW59#Op^W{q zO##=kp183R6>eeDYn4dErj8?$7^${>5hr7Kd0J#l3Y+_6JiT?<*3)KimWDk2eRE*> zv@yq#^jg_*ns|SAAl`}KS0eJGt0$G~`cm)eU4_r!+tbavSeD-SgYR%} zaJM20AFQ;qqSDH{j#ueD-f*BVwGQ%h_HoNzu%|!9sjq3Q)5nn(?+(U}S2I}jrkOmV zMB6EJDc=j3k-3nRvPbNZ9vBBpv3Bf~UoTF0MXhQ)74LT3BKhMW*bY{Xz{WekUS7Yh zXhi+8yy>r!2J8@fWG$fkymiH^uj6#G{Qr1Zvj#D8L$uPx=-w$J1TWHc6`W4p9M~Ee z=U~`4ZavtyN6i>)2rDnV(*94OY>RHY5>84CgITEp;gJm(t9lRLJ`KUDY9RJOpUN`F z+41>M*}zeN)Bz|@oe-*=$#lFsFdL>rFqL2dOD=$M3d%hWQ90IS@|@ZzWBLu&XPG~K zq~Zc8H>Oq{4gOW#(Fve+RMZUuUJq;@+ycl~A4y3Z8s-jmh(pgQ5)=B+jhtr&XERE( z+-FCs5LCO@KL_8@7)K|s92`C@W zex+pbhVxS^d7is1_x+JVvk(fVbe8x<&Q{{pigx(y1Og*UVJw zQ<)p5DX@l=L3coz3wc2upY|z=BYL#k=I3K4#WCE@(-3bz2j(r2Y|a``xe&!ge?Y{>x(aVz+l}@b610`~pF@K9Og$xnF}bCG_f3 zB95vb4ljw^EW_52H1D}-=kBv(S@i31c){Zdoea%DO61XQ;UeW-7He33v`g8r#G#BZ z5A-2dLd%AyzDdt~*d*JP3L&;~90cZ}T#>w5orBEz`{YLY8L0ruxe?#4I@_ELod`tf ze)sw0>)~QLW6K3N$hB?paYT=1UtFoS#&h$dZ&$0j71e4!wIjc1U?j&b!r#a*zbd7L zl);%HOK?F2cGE~n5z5o*fS;9~DzXW5lTd(gV6+y;4QbzWeaqP|qdJ)BLakVOjHzjY z_5j|Z?V@B-2Uhj2ClF#`(sK4_uH4!vbvc9R*|x>nk=EPhk|`6JmHa{<|-w~K4U)xbPnziNqtjyi?o_98p|Ry z+0TMva;f}lXuwsSZ3C5vK&6aN=Ze4hE~2YTCb1Ok2xgY%XVu2bY`lE$GyXoG)E|c4 z%{`803BQfAs`$cVk&*Yr@@n^nkwW*E{TIv2sDZh&k4(LYNA7XH!X=d%f4pU1GIvmH zegFPjpt0b`Hc8t0NyiN;gf*2eAlN+?^cyaM8dvP@RhXy(H5V#}#jf%;LBE zM%xL>TT}AmvOOnkOgd*_u{Ym9J7nGz##HRre_>YQuNSsvW0VX%6{k8yY_?ILqJK0r z2sRy0L|CD6_HQ6}?;p>+e?+)VVvm?ed>?3GU$UiB2|f*#!q4>k;~Re%vMek=C~i|5 zUi^#d?Qa8xGTn1?FT0=(DD8;lLX3>bonx6%HK$SKk-=jt`JU|)4RN3yL2n9iyU-1u zJJ6RwovapQ?ZZEyD95pt-*B-dTVti*(?ltJL|F0rhfGtpSG)<>56(T#%!Y-Gh6PKw zjB`-CuW5>4+xdBf_1#jNrCVB*$Q)>SoC-A#Lb#|hIqxt*m{tnmZxdu++yaDO-vUS| z554Ro4i4^&#`Sj)BP%u!`Ygft&&x3eJRcUFVRf(@Ibi{F#GLkMw%DF1*`nJMbY@rRe?UjPvH6I$&E^tysYmV!$A= z=(>livmtfwWKuYrjTFOSb)u*DgO<#2?AqVpbwS@VX}x5-fSl22-P|;^RJK$U!~Mf_ z|B_khTof(Ei$oFFkdJ^r)b@WQ!#F648(dA#h$6Q*cXW2N$Bt7uBct>km|0U3b#ygW zN=v{FRDTd9T#O*_RAec%f~gxbU=Vqw`uY21H)P&RG=$TTv~t6~cHyZZMN+{4&riU< zQFj4aC%Px3cpDgeYKNVSUWEj(PE#d@0?d91abGm0Lx6H=3;%um1lHEY@j8JWdN_(5 zpBxg&V0Ys@lC<&l<&s8`_e)Bbwj3ME(omwk)wUk7$s*!w1-B_6tI-Z&ea|ux>WJ^W z0B=2L!cd1>8&FW&TEkKnodCemXs^%^oJC3jD8Rkzb@Kh;j^8pKUVK*;Ew_MP_FKS? zP4~lrsXTt7=|zfEcuU38E_-;5whdMo#)*W2YZ9kE)dE2wjaw*{m~fu(K&EM-XV&ZT zs<%TP-)#~~x*gy6S$QW&4dWgy{IqQ4hCf+AEYH#jRa?%CSNHzyls9XK8MaVBH_5kLd8|B-oYw4`v#Y3uAE zSy^QJCRNT6fdN*7qxfbYevvq@)i!K+KVl(FyP5fV{sN_KrA74gk3o4t{sE^4pQVJrD^yjYuXXJex% zY~!$2=jY>Z4$I>veSb#(mf?8a+esf4-NWQh-YyIlX2v1Zjuu5E83R7`?S08CvcnN5^4k4P18~JfCOFExj-?e^fYIAM|~uOoyz`qHc7W z+^?e>-<0|-Kp=dDyni-Tn8tvbc4xNELNGpMAxCMiZptl7j`aC6UF_}mPd1V}-3bO8 z;fAcQ@O*D{k@{?COeRZjTiv{QV+~YE)LGida=^;%s!TQz9h}66g){@A5*byr1#Y9e zTW=_A_HgFkkmfej=|a*y*DKT}{8)?AQ+XAa8qMroqDAr{ zk=5B=mQ_{ibGHT0e8I<^mj1r0JeL?W@T=82V*bdjwR8N>WXXQ5O|VB(Ro^?QO)VyYCKt&j9F%OvO6{?|If{_cinCio+t!1}qE<3A;NV*FORYyn2#<`U zTGAEUVkv2t`V1l`iTf|ahI9w;#$iv2RJG}}lo8F#hV~<0g%luh=4s#6f?OXdoE0ce zshn<2Q}cZ(9^7{jWP{b9%jf0w^9(8Alq`VaRP--m#9lw)S$9eH0Me#oCGWu9SXOet~AG$Cf0CBHG)Xw!B%&aEF4Z_-)_*Ivh3tBO|hPu=ti7NZup zvS{`ByH8$1-9qYSWHE+$MG*6on2+Y>X)KHv=sU=zB&O<cw$ zT+6)G#qt|8I)JX_!5a-dQC$tuRmFQ?l(7^`6Q(#UC|p-~ya7CKxlu8OUB5UiChnHbw5l z*82z2?mTE-*QX@^vi#Uy9&}D-yqzbx^R7=YWjh5P=8&S9AopM2c_cL__D4&ITm_h< zs=TD5cScqTm_K@tR*_1_Lu6XdgSbLqnsLof#t8nR(?QeKfkupya&igw3HB8LK=b&< zIJz}_3m`lS;RZ?4T?lv+jge|v^87lsyqMz1lV#;&SH)Xx7HW1c(|8gA*G6 z&QMTY{(~KkEi#UI{fJn!)_hrGn3H-f@;SlKNb-EysS>h;e|z65&xK0=&oMn38> zb%M*{J{1;y#chj3>Zt7%hfl-4_bt_vnhAH03TvXB4Xt?3%om>b<Wv^wE3HiC{H-)BymK^vv9YC8CS-vZdZmvROXBqH4iY+U0~Ci*-;{>EBV zQ~sw+|0%pA4}igHboq!Qj!p_tP|($NJc47XLarsM0!9TbLI3%-6UV!72m5o~Kf*Ar$0%iBB>rX`qA zP{zuK?^K(*MjbTthMP7WmiOI##xPv-;g6&bxkEY2y#HD0W0mPN$BwrE^T}HPHn9O}maD;RSG(ydZ%`2Kb*P?6s>)c14VPToR~Gn7cbC>cTHj z+P+4-_5=XHIFXb)8c~HBJa1iYA0Cd+G-1itO4oP7%#Pc5>|R#d_VNYk3(TjeD+nOK zz!!B1p+S%ObdyTo(KyVP8h_dbQ7?!98W_O8Z_*z$Fyy*`AXMM8yPJwU)MkxxfK5pNyfYKD1PI!AXFcQ+}(xGv%e7r{kiu6-3k5v#FQ*aKgznCg{62* zPFho%RPHW0nn1_9F@J80?%vQaUx2{OfArj?LKF1&{s`l*B{`Ik-uKQD=1Vkyo}ImB z=9e$63RQrvvDXW<0qH5l`T#9!^@4M>vT~(VNb&OzK_611P3^bk2iUcIi0eG$P+4*K zZV%)ZV7qcy+I&`Y(iR`)p61ztAA86%4WUV+7j8cbBt|d8R&}XWbx9VP{ApG!^+>46 zeDy^sji-rHub&Ww3z?sRjO&1?kkMyYO<*+6(T{}2Zn(8})Nsg-#Ri_BpTWJs`%fsH zuWkWJM?fd`FyR;ushOMRVlB7eJ;Wkmy)K{`KP1%oz>pOf+btp7X9iH4;+P?drN0J8=EoNoFIMC+j-r zcWoSlKFx*ti7U5gf$;q7KY*Kp*7aJAVq%4-p8F-*+Tl72QF}>^kU3gC0F*V`^s;W& zD_CUOLaC30Yl2yZmPnzcGG=fi0Q%_8-XF`L!u@uJ{Ek3 z_+i{|&yUgdztNBY`9-H)i8=G*7N49ApO%hG2GI1gyYTxFwl#%jnV;mF3o7>s2{p|) zjY8%mI=WzqN#n7(YV;6^N%gUrI^o3=u2!f= zq(@U#%WTX|Q_t5>TF(-x2@&`FFjrMP{4|0yg&*!eym%U4j&0*}QMw)z^ZmY-!&U%0 ziU&N@{}gWP0ILXcU8k02?e&0UofQrmDPZ}K<@z8m?Two0Q5z{^s7k>w+HkkBiWQ(l z(OynAe3r$(1n-GX4s$KuM}tjAd1S4s+TfayAy5>O$|_y_6D*D-ev=$mwE7G3^PT-_ zaVre~`zh8(r#;-y73JVJPcGc{bkmuuDf0_3oVnV}Hd#ZoMcRdg1ybd*UftuOL_-gK z?@+^e&R6|89on9BKPxgtk&3#pY4_PiXvP=es&J@-q4UrVL~js}9Jxhix!*j%zxr_U z*dV5|_7>2-XY6sw7hL3r6kg4oJQnvatyOQG-P)5uz8U#+gnr$z&9!c1N2R$3#nKv6 z5{Yb#DW6tE%3FER*3TnUfgne@KRefsf+HKX%LNCm0U2Z>>)&U}pZs^Gb(+XUF8XHm z=n}?myB(|}#?Q4?04J6V&`2X92NbuTNi)I4yRbFM5&lqk5}v=v*eNUdnHX)YdZ@b3 zR6i97rQ8~ML6cP(()g4X;D<9?Be=BP=7?>c9*C_ATV1I?5d`f;urgiB%}?oixWH;WP#u6Z;T3B(&;B5zGf~w=l1a71 zY~GfqA1Qx<&SpjP;6qq^-LUt$t98y-^!e){2eHQ;6rr>vG$A{+V(g-vbq(4At#;ER zvN=$uH87Y)iFy8%Z^GSWyH^z}VXNn3vXA5{X?MF10oQE&r@W2Ax~hA~qusYMRS)aA zBPMEN)*dxt%pCKXrU_26`fCwy;_2Pnx0>opEuNN&nG_?OOL;g=(V}Tefy30s2exNF z?t@n*LfgGnK2z>SwK&@`6EM{3kJ^ek+lA9N_f*EkCp4g}`u?>#K(xRz-P5OPtm?e- zQ*G~Vs>4+_N+CVVR8i>_{a67y3~Pi=(a$!+B5n8VM@Sk_46bap4rm?`pWZrvQ_wO8btGWpGi9-OB1JBD3ajp4D}22336t z=pF#gucGV@=>MnPpj!YAZ$wSvR-egL3Jpu`FBYGByp!fROq4yvg+)K9ct&1VIa|GZ zd-1_k$M{5o``qmoV8+#;A1v%)1HJ$Y>89j;r}K!kU*Ad39(0D@lutI_0{+=Xu1~y0R@&IkitsRh{@$vv1Li!K zjyr^7xbl?9CL^s00^oz0^zGz- E0LPm?MF0Q* diff --git a/Effects/clouds-thin.eff b/Effects/clouds-thin.eff index 86dfebe40..827da1893 100644 --- a/Effects/clouds-thin.eff +++ b/Effects/clouds-thin.eff @@ -1,68 +1,58 @@ - Effects/clouds-thin - - - - - - - - /sim/rendering/shader-effects - - 1.0 - - - - - - - true - - 0.5 0.5 0.5 1.0 - 0.5 0.5 0.5 1.0 - off - - - greater - 0.01 - - smooth - - src-alpha - one-minus-src-alpha - - - false - - - 10 - DepthSortedBin - - - 0 - - texture[0]/type - - - texture[0]/image - - - texture[0]/filter - - - texture[0]/wrap-s - - - texture[0]/wrap-t - - + true + + 0.5 0.5 0.5 1.0 + 0.5 0.5 0.5 1.0 + off + + + greater + 0.01 + + smooth + + src-alpha + one-minus-src-alpha + + + false + + + 10 + DepthSortedBin + + + 0 + texture[0]/type + texture[0]/image + texture[0]/filter + texture[0]/wrap-s + texture[0]/wrap-t + - - - Shaders/clouds-thin.vert - Shaders/clouds-thin.frag - - - - baseTexture - sampler-2d - 0 - - true - - + + + baseTexture + sampler-2d + 0 + + true + + diff --git a/Effects/clouds-thinlayer.eff b/Effects/clouds-thinlayer.eff new file mode 100644 index 000000000..8d22f82c5 --- /dev/null +++ b/Effects/clouds-thinlayer.eff @@ -0,0 +1,64 @@ + + + Effects/clouds-layered + + + + + + + + /sim/rendering/shader-effects + + 1.0 + + + + + + + true + + 0.5 0.5 0.5 1.0 + 0.5 0.5 0.5 1.0 + off + + + greater + 0.01 + + smooth + + src-alpha + one-minus-src-alpha + + + false + + + 10 + DepthSortedBin + + + 0 + texture[0]/type + texture[0]/image + texture[0]/filter + texture[0]/wrap-s + texture[0]/wrap-t + + + + Shaders/clouds-thinlayer.vert + Shaders/clouds-thinlayer.frag + + + baseTexture + sampler-2d + 0 + + true + + + diff --git a/Effects/test.eff b/Effects/test.eff new file mode 100644 index 000000000..c5b4e8435 --- /dev/null +++ b/Effects/test.eff @@ -0,0 +1,81 @@ + + + Effects/test + + + + + + + + /sim/rendering/shader-effects + + 1.0 + + + + + + + true + + 0.5 0.5 0.5 1.0 + 0.5 0.5 0.5 1.0 + off + + + greater + 0.01 + + smooth + + src-alpha + one-minus-src-alpha + + + false + + + 10 + DepthSortedBin + + + 0 + texture[0]/type + texture[0]/image + texture[0]/filter + texture[0]/wrap-s + texture[0]/wrap-t + + + + + Shaders/test.vert + Shaders/test.frag + + + + baseTexture + sampler-2d + 0 + + + shading + float + 0.5 + + true + + + diff --git a/Nasal/local_weather.nas b/Nasal/local_weather.nas index 72adbc244..3f9609731 100644 --- a/Nasal/local_weather.nas +++ b/Nasal/local_weather.nas @@ -1,8 +1,59 @@ -################################################# +######################################################## # routines to set up, transform and manage local weather -# Thorsten Renk, April 2010 -################################################# +# Thorsten Renk, May 2010 +# thermal model by Patrice Poly, April 2010 +######################################################## + +# function purpose +# +# calc_geo to compute the latitude to meter conversion +# calc_d_sq to compute a distance square in local Cartesian approximation +# volume_effect_loop to check if the aircraft has entered an effect volume +# interpolation_loop to continuously interpolate weather parameters between stations +# thermal_lift _loop to manage the detailed thermal lift model +# thermal_lift_start to start the detailed thermal model +# effect_volume_start to manage parameters when an effect volume is entered +# effect_volume_stop to manage parameters when an effect volume is left +# setVisibility to set the visibility to a given value +# setRain to set rain to a given value +# setSnow to set snow to a given value +# setTemperature to set temperature to a given value +# setPressure to set pressure to a given value +# setDewpoint to set the dewpoint to a given value +# setLift to set thermal lift to a given value - obsolete +# ts_factor (helper function for thermal lift model) +# tl_factor (helper function for thermal lift model) +# calcLift_max to calculate the maximal available thermal lift for given altitude +# calcLift to calculate the thermal lift at aircraft position +# randomize_pos to randomize the position of clouds placed in a streak call +# select_cloud_model to select a path to the cloud model, given the cloud type and subtype +# create_cloud to place a single cloud into the scenery +# create_cloud_vec to place a single cloud into an array to be written later +# clear_all to remove all clouds, effect volumes and weather stations and stop loops +# create_cumosys wrapper to place a convective cloud system based on terrain coverage +# cumulus_loop to place 25 Cumulus clouds each frame +# create_cumulus to place a convective cloud system based on terrain coverage +# terrain_presampling to get information about terrain elevation +# create_rise_clouds to create a barrier cloud system +# create_streak to create a cloud streak +# create_layer to create a cloud layer with optional precipitation +# cloud_placement_loop to place clouds from a storage array into the scenery +# create_effect_volume to create an effect volume +# effect_placement_loop to place effect volumes from a storage array +# create_effect_volume_vec to create effect volumes in a storage array +# set_weather_station to specify a weather station for interpolation +# streak_wrapper wrapper to execute streak from menu +# convection wrapper wrapper to execute convective clouds from menu +# barrier wrapper wrapper to execute barrier clouds from menu +# single_cloud_wrapper wrapper to create single cloud from menu +# layer wrapper wrapper to create layer from menu +# set_tile to call a weather tile creation from menu +# startup to prepare the package at startup + +################################### +# geospatial helper functions +################################### var calc_geo = func(clat) { @@ -12,66 +63,85 @@ m_to_lon = 1.0/lon_to_m; } +var calc_d_sq = func (lat1, lon1, lat2, lon2) { + +var x = (lat1 - lat2) * lat_to_m; +var y = (lon1 - lon2) * lon_to_m; + +return (x*x + y*y); +} + + ################################### # effect volume management loop ################################### -var effect_volume_loop = func { +var effect_volume_loop = func (index, n_active) { +var n = 25; var evNode = props.globals.getNode("local-weather/effect-volumes", 1).getChildren("effect-volume"); -var viewpos = geo.viewer_position(); +var esize = size(evNode); +var viewpos = geo.aircraft_position(); +var active_counter = n_active; + +var i_max = index + 25; +if (i_max > esize) {i_max = esize;} + +for (var i = index; i < i_max; i = i+1) + { + e = evNode[i]; -foreach (var e; evNode) { var flag = 0; #default assumption is that we're not in the volume - var geometry = e.getNode("geometry").getValue(); - var elat = e.getNode("position/latitude-deg").getValue(); - var elon = e.getNode("position/longitude-deg").getValue(); var ealt_min = e.getNode("position/min-altitude-ft").getValue() * ft_to_m; var ealt_max = e.getNode("position/max-altitude-ft").getValue() * ft_to_m; - var rx = e.getNode("volume/size-x").getValue(); - var ry = e.getNode("volume/size-y").getValue(); - var phi = e.getNode("volume/orientation-deg").getValue(); - phi = phi * math.pi/180.0; - - var evpos = geo.Coord.new(); - evpos.set_latlon(elat,elon,ealt_min); - - var d = viewpos.distance_to(evpos); - #print(d); - - var active_flag = e.getNode("active-flag").getValue(); # see if the node was active previously if ((viewpos.alt() > ealt_min) and (viewpos.alt() < ealt_max)) # we are in the correct alt range { + # so we load geometry next + var geometry = e.getNode("geometry").getValue(); + var elat = e.getNode("position/latitude-deg").getValue(); + var elon = e.getNode("position/longitude-deg").getValue(); + var rx = e.getNode("volume/size-x").getValue(); + + if (geometry == 1) # we have a cylinder { - if (d < rx) {flag =1;} + var d_sq = calc_d_sq(viewpos.lat(), viewpos.lon(), elat, elon); + if (d_sq < (rx*rx)) {flag =1;} } - if (geometry == 2) # we have an elliptic shape + else if (geometry == 2) # we have an elliptic shape { + # get orientation + var ry = e.getNode("volume/size-y").getValue(); + var phi = e.getNode("volume/orientation-deg").getValue(); + phi = phi * math.pi/180.0; # first get unrotated coordinates - var xx = (viewpos.lon() - evpos.lon()) * lon_to_m; - var yy = (viewpos.lat() - evpos.lat()) * lat_to_m; + var xx = (viewpos.lon() - elon) * lon_to_m; + var yy = (viewpos.lat() - elat) * lat_to_m; # then rotate to align with the shape var x = xx * math.cos(phi) - yy * math.sin(phi); var y = yy * math.cos(phi) + xx * math.sin(phi); # then check elliptic condition if ((x*x)/(rx*rx) + (y*y)/(ry*ry) <1) {flag = 1;} } - if (geometry == 3) # we have a rectangular shape + else if (geometry == 3) # we have a rectangular shape { + # get orientation + var ry = e.getNode("volume/size-y").getValue(); + var phi = e.getNode("volume/orientation-deg").getValue(); + phi = phi * math.pi/180.0; # first get unrotated coordinates - var xx = (viewpos.lon() - evpos.lon()) * lon_to_m; - var yy = (viewpos.lat() - evpos.lat()) * lat_to_m; + var xx = (viewpos.lon() - elon) * lon_to_m; + var yy = (viewpos.lat() - elat) * lat_to_m; # then rotate to align with the shape var x = xx * math.cos(phi) - yy * math.sin(phi); var y = yy * math.cos(phi) + xx * math.sin(phi); # then check rectangle condition if ((x>-rx) and (x-ry) and (y 80000.0) and (d<100000.0)) {s.remove();} } var vis = sum_vis/sum_norm; @@ -141,20 +244,30 @@ var p = sum_p/sum_norm; var D = sum_D/sum_norm; var T = sum_T/sum_norm; -iNode.getNode("visibility-m",1).setValue(vis); +# a simple altitude model for visibility - increase it with increasing altitude + +vis = vis + 0.3 * getprop("position/altitude-ft"); + +if (vis > 0.0) {iNode.getNode("visibility-m",1).setValue(vis);} # a redundancy check iNode.getNode("temperature-degc",1).setValue(T); iNode.getNode("dewpoint-degc",1).setValue(D); -iNode.getNode("pressure-sea-level-inhg",1).setValue(p); +if (p>0.0) {iNode.getNode("pressure-sea-level-inhg",1).setValue(p);} # a redundancy check # now check if an effect volume writes the property and set only if not flag = props.globals.getNode("local-weather/effect-volumes/number-active-vis").getValue(); -if (flag ==0) +if ((flag ==0) and (vis > 0.0)) { cNode.getNode("visibility-m").setValue(vis); setVisibility(vis); } +flag = props.globals.getNode("local-weather/effect-volumes/number-active-lift").getValue(); +if (flag ==0) + { + cNode.getNode("thermal-lift").setValue(0.0); + } + # no need to check for these, as they are not modelled in effect volumes cNode.getNode("temperature-degc",1).setValue(T); @@ -163,14 +276,87 @@ setTemperature(T); cNode.getNode("dewpoint-degc",1).setValue(D); setDewpoint(D); -cNode.getNode("pressure-sea-level-inhg",1).setValue(p); -setPressure(p); +if (p>0.0) {cNode.getNode("pressure-sea-level-inhg",1).setValue(p); setPressure(p);} if (getprop(lw~"interpolation-loop-flag") ==1) {settimer(interpolation_loop, 3.0);} } +################################### +# thermal lift loop +################################### + +var thermal_lift_loop = func { + +var cNode = props.globals.getNode(lw~"current", 1); +var lNode = props.globals.getNode(lw~"lift",1); + +var apos = geo.aircraft_position(); + +var tlat = lNode.getNode("latitude-deg").getValue(); +var tlon = lNode.getNode("longitude-deg").getValue(); +var tpos = geo.Coord.new(); +tpos.set_latlon(tlat,tlon,0.0); + +var d = apos.distance_to(tpos); +var alt = getprop("position/altitude-ft"); + + +var R = lNode.getNode("radius").getValue(); +var height = lNode.getNode("height").getValue(); +var cn = lNode.getNode("cn").getValue(); +var sh = lNode.getNode("sh").getValue(); +var max_lift = lNode.getNode("max_lift").getValue(); +var f_lift_radius = lNode.getNode("f_lift_radius").getValue(); + +# print(d," ", alt, " ", R, " ", height, " ", cn, " ", sh," ", max_lift," ", f_lift_radius, " ",0.0); + +var lift = calcLift(d, alt, R, height, cn, sh, max_lift, f_lift_radius, 0.0); +# print(lift); + +cNode.getChild("thermal-lift").setValue(lift); + +if (getprop(lw~"lift-loop-flag") ==1) {settimer(thermal_lift_loop, 0);} +} + +################################### +# thermal lift loop startup +################################### + +var thermal_lift_start = func (ev) { + +# copy the properties from effect volume to the lift folder + +var lNode = props.globals.getNode(lw~"lift",1); +lNode.getNode("radius",1).setValue(ev.getNode("effects/radius").getValue()); +lNode.getNode("height",1).setValue(ev.getNode("effects/height").getValue()); +lNode.getNode("cn",1).setValue(ev.getNode("effects/cn").getValue()); +lNode.getNode("sh",1).setValue(ev.getNode("effects/sh").getValue()); +lNode.getNode("max_lift",1).setValue(ev.getNode("effects/max_lift").getValue()); +lNode.getNode("f_lift_radius",1).setValue(ev.getNode("effects/f_lift_radius").getValue()); + +lNode.getNode("latitude-deg",1).setValue(ev.getNode("position/latitude-deg").getValue()); +lNode.getNode("longitude-deg",1).setValue(ev.getNode("position/longitude-deg").getValue()); + +# and start the lift loop, unless another one is already running +# so we block overlapping calls + +if (getprop(lw~"lift-loop-flag") == 0) +{setprop(lw~"lift-loop-flag",1); thermal_lift_loop();} + +} + +################################### +# thermal lift loop stop +################################### + +var thermal_lift_stop = func { + +setprop(lw~"lift-loop-flag",0); +setprop(lw~"current/thermal-lift",0.0); +} + #################################### # action taken when in effect volume #################################### @@ -222,9 +408,17 @@ if (ev.getNode("effects/thermal-lift-flag", 1).getValue()==1) var lift = ev.getNode("effects/thermal-lift").getValue(); ev.getNode("restore/thermal-lift",1).setValue(cNode.getNode("thermal-lift").getValue()); cNode.getNode("thermal-lift").setValue(lift); + #setLift(ev.getNode("position/latitude-deg").getValue(),ev.getNode("position/longitude-deg").getValue(),1); ev.getNode("restore/number-entry-lift",1).setValue(getprop(lw~"effect-volumes/number-active-lift")); setprop(lw~"effect-volumes/number-active-lift",getprop(lw~"effect-volumes/number-active-lift")+1); } +else if (ev.getNode("effects/thermal-lift-flag", 1).getValue()==2) # thermal by function + { + ev.getNode("restore/thermal-lift",1).setValue(cNode.getNode("thermal-lift").getValue()); + ev.getNode("restore/number-entry-lift",1).setValue(getprop(lw~"effect-volumes/number-active-lift")); + setprop(lw~"effect-volumes/number-active-lift",getprop(lw~"effect-volumes/number-active-lift")+1); + thermal_lift_start(ev); + } } @@ -289,6 +483,14 @@ if (ev.getNode("effects/thermal-lift-flag", 1).getValue()==1) else if ((n_active -1) == n_entry) {var lift = ev.getNode("restore/thermal-lift").getValue();} else {var lift = cNode.getNode("thermal-lift").getValue();} cNode.getNode("thermal-lift").setValue(lift); + # some cheat code + # setLift(ev.getNode("position/latitude-deg").getValue(),ev.getNode("position/longitude-deg").getValue(),0); + + setprop(lw~"effect-volumes/number-active-lift",getprop(lw~"effect-volumes/number-active-lift")-1); + } +else if (ev.getNode("effects/thermal-lift-flag", 1).getValue()==2) # thermal by function + { + thermal_lift_stop(); setprop(lw~"effect-volumes/number-active-lift",getprop(lw~"effect-volumes/number-active-lift")-1); } @@ -366,6 +568,7 @@ var setPressure = func (p) { # essentially we update the entry in config and reinit environment setprop(ec~"boundary/entry[0]/pressure-sea-level-inhg",p); +setprop(ec~"aloft/entry[0]/pressure-sea-level-inhg",p); fgcommand("reinit", props.Node.new({subsystem:"environment"})); } @@ -386,15 +589,115 @@ fgcommand("reinit", props.Node.new({subsystem:"environment"})); # set thermal lift to given value #################################### -var setLift = func (L) { +var setLift = func (lat, lon, flag) { -# this doesn't actually work with Flightgear 2.0.0 since environement overwrites the -# setting - so it's a hope for CVS -# -> probably obsolete as CVS patch reads out /local-weather/current +# this is a cheat - if you have an AI thermal present, this sets its coordinates to the +# current position -setprop("environment/thermal-lift",L); +if (flag==1) + { + setprop("ai/models/thermal/position/latitude-deg",lat); + setprop("ai/models/thermal/position/longitude-deg",lon); + } +else + { + setprop("ai/models/thermal/position/latitude-deg",0.1); + setprop("ai/models/thermal/position/longitude-deg",0.1); + + } + +#setprop("environment/thermal-lift",L); } +######################################### +# compute thermal lift in detailed model +######################################### + +var ts_factor = func (t, alt, height) { + +# no time dependence modelled yet +return 1.0; + + +var t_a = t - (alt/height) * t1 -t1; + +if (t_a<0) {return 0.0;} +else if (t_a= t1) and (t < t2)) {return 1.0;} +else if (t_a >= t2) {return 0.5 - 0.5 * math.cos((1.0-(t2-t_a)/(t3-t2))*math.pi);} +} + +var tl_factor = func (t, alt, height) { + +# no time dependence modelled yet +return 1.0; + +var t_a = t - (alt/height) * t1; + +if (t_a<0) {return 0.0;} +else if (t_a= t1) and (t < t2)) {return 1.0;} +else if (t_a >= t2) {return 0.5 - 0.5 * math.cos((1.0-(t2-t_a)/(t3-t2))*math.pi);} +} + + +var calcLift_max = func (alt, max_lift, height) { + +# no lift below ground +if (alt < 0.0) {return 0.0;} + +# lift ramps up to full within 200 m +else if (alt < 200.0*m_to_ft) + {return max_lift * 0.5 * (1.0 + math.cos((1.0-alt/(200.0*m_to_ft))*math.pi));} + +# constant max. lift in main body +else if ((alt > 200.0*m_to_ft) and (alt < height)) + {return max_lift;} + +# decreasing lift from cloudbase to 10% above base +else if ((alt > height ) and (alt < height*1.1)) + {return max_lift * 0.5 * (1.0 - math.cos((1.0-10.0*alt/height)*math.pi));} + +# no lift available above +else {return 0.0;} +} + + + +var calcLift = func (d, alt, R, height, cn, sh, max_lift, f_lift_radius, t) { + +# radius of slice at given altitude +var r_total = (cn + alt/height*(1.0-cn)) * (R - R * (1.0- sh ) * (1.0 - ((2.0*alt/height)-1.0)*((2.0*alt/height)-1.0))); + + +# print("r_total: ", r_total, "d: ",d); +# print("alt: ", alt, "height: ",height); + +# no lift if we're outside the radius or above the thermal +if ((d > r_total) or (alt > 1.1*height)) { return 0.0; } + +# fraction of radius providing lift +var r_lift = f_lift_radius * r_total; + +# print("r_lift: ", r_lift); + +# if we are in the sink portion, get the max. sink for this time and altitude and adjust for actual position +if ((d < r_total ) and (d > r_lift)) + { + var s_max = 0.5 * calcLift_max(alt, max_lift, height) * ts_factor(t, alt, height); + # print("s_max: ", s_max); + return s_max * math.sin(math.pi * (1.0 + (d-r_lift) * (1.0/(r_total - r_lift)))); + } +# else we are in the lift portion, get the max. lift for this time and altitude and adjust for actual position +else + { + var l_max = calcLift_max(alt, max_lift, height) * tl_factor(t, alt, height); + # print("l_max: ", l_max); + return l_max * math.cos(math.pi * (d/(2.0 * r_lift))); + } +} + + ########################################################### # randomize positions of clouds created in a fixed pattern ########################################################### @@ -404,14 +707,44 @@ var randomize_pos = func (type, alt_var, pos_var_x, pos_var_y, dir) { # it is rather stupid coding to force the randomization call after the streak call, and I'll probably # restructure the whole thing soon -var cloudNode = props.globals.getNode("local-weather/clouds", 1).getChildren("cloud"); +dir = dir * math.pi/180.0; + +if (getprop(lw~"tmp/thread-flag") == 1) + { + var s = size(clouds_type); + for (i=0; i 0.8) {path = "Models/Weather/cumulus_sl7.xml";} + else if (rn > 0.6) {path = "Models/Weather/cumulus_sl8.xml";} + else if (rn > 0.4) {path = "Models/Weather/cumulus_sl9.xml";} + else if (rn > 0.2) {path = "Models/Weather/cumulus_sl10.xml";} + else {path = "Models/Weather/cumulus_sl11.xml";} + } + else if (subtype == "large") { + if (rn > 0.8) {path = "Models/Weather/cumulus_sl1.xml";} + else if (rn > 0.6) {path = "Models/Weather/cumulus_sl2.xml";} + else if (rn > 0.4) {path = "Models/Weather/cumulus_sl3.xml";} + else if (rn > 0.2) {path = "Models/Weather/cumulus_sl4.xml";} + else {path = "Models/Weather/cumulus_sl5.xml";} + } + + } + else if (type == "Altocumulus"){ if (subtype == "small") { if (rn > 0.8) {path = "Models/Weather/altocumulus_shader6.xml";} @@ -516,13 +868,14 @@ else if ((type == "Cumulonimbus") or (type == "Cumulonimbus (rain)")) { } } else if (type == "Cirrus") { - if (subtype == "small") { - if (rn > 0.5) {path = "Models/Weather/cirrus1.xml";} - else {path = "Models/Weather/cirrus2.xml";} + if (subtype == "large") { + if (rn > 0.66) {path = "Models/Weather/cirrus1.xml";} + else if (rn > 0.33) {path = "Models/Weather/cirrus2.xml";} + else {path = "Models/Weather/cirrus3.xml";} } - else if (subtype == "large") { - if (rn > 0.5) {path = "Models/Weather/cirrus1.xml";} - else {path = "Models/Weather/cirrus2.xml";} + else if (subtype == "small") { + if (rn > 0.5) {path = "Models/Weather/cirrus_amorphous1.xml";} + else {path = "Models/Weather/cirrus_amorphous2.xml";} } } else if (type == "Cirrocumulus") { @@ -532,7 +885,7 @@ else if (type == "Cirrocumulus") { } else if (subtype == "large") { if (rn > 0.5) {path = "Models/Weather/cirrocumulus1.xml";} - else {path = "Models/Weather/cirrocumulus2.xml";} + else {path = "Models/Weather/cirrocumulus4.xml";} } } else if (type == "Nimbus") { @@ -567,6 +920,68 @@ else if (type == "Stratus") { else {path = "Models/Weather/stratus_layer5.xml";} } } +else if (type == "Stratus (thin)") { + if (subtype == "small") { + if (rn > 0.8) {path = "Models/Weather/stratus_tlayer1.xml";} + else if (rn > 0.6) {path = "Models/Weather/stratus_tlayer2.xml";} + else if (rn > 0.4) {path = "Models/Weather/stratus_tlayer3.xml";} + else if (rn > 0.2) {path = "Models/Weather/stratus_tlayer4.xml";} + else {path = "Models/Weather/stratus_tlayer5.xml";} + } + else if (subtype == "large") { + if (rn > 0.8) {path = "Models/Weather/stratus_tlayer1.xml";} + else if (rn > 0.6) {path = "Models/Weather/stratus_tlayer2.xml";} + else if (rn > 0.4) {path = "Models/Weather/stratus_tlayer3.xml";} + else if (rn > 0.2) {path = "Models/Weather/stratus_tlayer4.xml";} + else {path = "Models/Weather/stratus_tlayer5.xml";} + } + } +else if (type == "Cirrostratus") { + if (subtype == "small") { + if (rn > 0.75) {path = "Models/Weather/cirrostratus1.xml";} + else if (rn > 0.5) {path = "Models/Weather/cirrostratus2.xml";} + else if (rn > 0.25) {path = "Models/Weather/cirrostratus3.xml";} + else {path = "Models/Weather/cirrostratus4.xml";} + } + else if (subtype == "large") { + if (rn > 0.75) {path = "Models/Weather/cirrostratus1.xml";} + else if (rn > 0.5) {path = "Models/Weather/cirrostratus2.xml";} + else if (rn > 0.25) {path = "Models/Weather/cirrostratus3.xml";} + else {path = "Models/Weather/cirrostratus4.xml";} + } + } +else if (type == "Fog (thin)") { + if (subtype == "small") { + if (rn > 0.8) {path = "Models/Weather/stratus_thin1.xml";} + else if (rn > 0.6) {path = "Models/Weather/stratus_thin2.xml";} + else if (rn > 0.4) {path = "Models/Weather/stratus_thin3.xml";} + else if (rn > 0.2) {path = "Models/Weather/stratus_thin4.xml";} + else {path = "Models/Weather/stratus_thin5.xml";} + } + else if (subtype == "large") { + if (rn > 0.8) {path = "Models/Weather/stratus_thin1.xml";} + else if (rn > 0.6) {path = "Models/Weather/stratus_thin2.xml";} + else if (rn > 0.4) {path = "Models/Weather/stratus_thin3.xml";} + else if (rn > 0.2) {path = "Models/Weather/stratus_thin4.xml";} + else {path = "Models/Weather/stratus_thin5.xml";} + } + } +else if (type == "Fog (thick)") { + if (subtype == "small") { + if (rn > 0.8) {path = "Models/Weather/stratus_thick1.xml";} + else if (rn > 0.6) {path = "Models/Weather/stratus_thick2.xml";} + else if (rn > 0.4) {path = "Models/Weather/stratus_thick3.xml";} + else if (rn > 0.2) {path = "Models/Weather/stratus_thick4.xml";} + else {path = "Models/Weather/stratus_thick5.xml";} + } + else if (subtype == "large") { + if (rn > 0.8) {path = "Models/Weather/stratus_thick1.xml";} + else if (rn > 0.6) {path = "Models/Weather/stratus_thick2.xml";} + else if (rn > 0.4) {path = "Models/Weather/stratus_thick3.xml";} + else if (rn > 0.2) {path = "Models/Weather/stratus_thick4.xml";} + else {path = "Models/Weather/stratus_thick5.xml";} + } + } else {print("Cloud type ", type, " subtype ",subtype, " not available!");} @@ -578,20 +993,28 @@ return path; # place a single cloud ########################################################### -var create_cloud = func(type, path, lat, long, alt, heading, rain_flag) { +var create_cloud = func(type, path, lat, long, alt, heading, rnd_flag) { + +var tile_counter = getprop(lw~"tiles/tile-counter"); var n = props.globals.getNode("local-weather/clouds", 1); -var cloud_number = n.getNode("cloud-number").getValue(); - for (var i = cloud_number; 1; i += 1) - if (n.getChild("cloud", i, 0) == nil) - break; - cl = n.getChild("cloud", i, 1); +var c = n.getChild("tile",tile_counter,1); -var m = props.globals.getNode("models", 1); +var cloud_number = n.getNode("placement-index").getValue(); for (var i = cloud_number; 1; i += 1) + if (c.getChild("cloud", i, 0) == nil) + break; + cl = c.getChild("cloud", i, 1); + n.getNode("placement-index").setValue(i); + + +var model_number = n.getNode("model-placement-index").getValue(); +var m = props.globals.getNode("models", 1); + for (var i = model_number; 1; i += 1) if (m.getChild("model", i, 0) == nil) break; - model = m.getChild("model", i, 1); + model = m.getChild("model", i, 1); + n.getNode("model-placement-index").setValue(i); @@ -602,9 +1025,8 @@ var altN = cl.getNode("position/altitude-ft", 1); altN.setValue(alt); var hdgN = cl.getNode("orientation/true-heading-deg", 1); hdgN.setValue(heading); var pitchN = cl.getNode("orientation/pitch-deg", 1); pitchN.setValue(0.0); var rollN = cl.getNode("orientation/roll-deg", 1);rollN.setValue(0.0); -#cl.getNode("velocities/true-airspeed-kt", 1).setValue(kias); -#cl.getNode("velocities/vertical-speed-fps", 1).setValue(0.0); -#cl.getNode("position/trafo-flag", 1).setValue(1); + +cl.getNode("tile-index",1).setValue(tile_counter); model.getNode("path", 1).setValue(path); model.getNode("legend", 1).setValue("Cloud"); @@ -614,13 +1036,29 @@ model.getNode("elevation-ft-prop", 1).setValue(altN.getPath()); model.getNode("heading-deg-prop", 1).setValue(hdgN.getPath()); model.getNode("pitch-deg-prop", 1).setValue(pitchN.getPath()); model.getNode("roll-deg-prop", 1).setValue(rollN.getPath()); +model.getNode("tile-index",1).setValue(tile_counter); model.getNode("load", 1).remove(); n.getNode("cloud-number").setValue(n.getNode("cloud-number").getValue()+1); - } + +########################################################### +# place a single cloud into a vector to be processed +# in a split loop +########################################################### + +var create_cloud_vec = func(type, path, lat, long, alt, heading, rain_flag) { + +append(clouds_type,type); +append(clouds_path,path); +append(clouds_lat,lat); +append(clouds_lon,long); +append(clouds_alt,alt); +append(clouds_orientation,heading); + +} ########################################################### # clear all clouds and effects ########################################################### @@ -629,8 +1067,9 @@ var clear_all = func { # clear the clouds and models -var cloudNode = props.globals.getNode("local-weather/clouds", 1); -cloudNode.removeChildren("cloud"); +var cloudNode = props.globals.getNode(lw~"clouds", 1); +cloudNode.removeChildren("tile"); + var modelNode = props.globals.getNode("models", 1).getChildren("model"); foreach (var m; modelNode) @@ -652,6 +1091,8 @@ props.globals.getNode("local-weather/effect-volumes", 1).removeChildren("effect- setprop(lw~"effect-loop-flag",0); setprop(lw~"interpolation-loop-flag",0); +setprop(lw~"tile-loop-flag",0); +setprop(lw~"lift-loop-flag",0); setprop(lw~"tmp/generate-thermal-lift-flag",0); # also remove rain and snow effects @@ -659,14 +1100,100 @@ setprop(lw~"tmp/generate-thermal-lift-flag",0); setRain(0.0); setSnow(0.0); +# set placement indices to zero + +setprop(lw~"clouds/placement-index",0); +setprop(lw~"clouds/model-placement-index",0); +setprop(lw~"effect-volumes/effect-placement-index",0); +setprop(lw~"tiles/tile-counter",0); + + } + ########################################################### -# place a cumulus system +# detailed Cumulus clouds created from multiple sprites +########################################################### + +var create_detailed_cumulus_cloud = func (lat, lon, alt, size) { + +#print(size); + +if (size>2.0) + { + var height = 1200; + var n = 24; + var x = 800.0; + var y = 300.0; + var edge = 0.3; + } + +else if (size>1.0) + { + var height = 400; + var n = 8; + var x = 400.0; + var y = 200.0; + var edge = 0.3; + } +else + { + var height = 100; + var n = 4; + var x = 200.0; + var y = 200.0; + var edge = 1.0; + } + +var alpha = rand() * 180.0; + + + +create_streak("Cumulus (cloudlet)",lat,lon, alt+ 0.5* (height +cloud_vertical_size_map["Cumulus"] * ft_to_m),n,0.0,edge,1,0.0,0.0,alpha,1.0); +randomize_pos("Cumulus (cloudlet)",height,x,y,alpha); + +} + +########################################################### +# wrappers for convective cloud system to distribute +# call across several frames if needed ########################################################### var create_cumosys = func (blat, blon, balt, nc, size) { +# realistic Cumulus has somewhat larger models, so compensate to get the same coverage +if (getprop(lw~"config/detailed-clouds-flag") == 1) + {nc = int(0.5 * nc);} + +if (getprop(lw~"tmp/thread-flag") == 1) + {setprop(lw~"tmp/convective-status", "computing"); + cumulus_loop(blat, blon, balt, nc, size);} + +else + {create_cumulus(blat, blon, balt, nc, size); + print("Convective system done!");} +} + + + +var cumulus_loop = func (blat, blon, balt, nc, size) { + +var n = 25; + +if (nc < 0) {print("Convective system done!");setprop(lw~"tmp/convective-status", "idle");return;} + +#print("nc is now: ",nc); +create_cumulus(blat, blon, balt, n, size); + +settimer( func {cumulus_loop(blat, blon, balt, nc-n, size) },0); +} + +########################################################### +# place a convective cloud system +########################################################### + +var create_cumulus = func (blat, blon, balt, nc, size) { + var path = "Models/Weather/blank.ac"; @@ -674,6 +1201,8 @@ var i = 0; var p = 0.0; var rn = 0.0; var place_lift_flag = 0; +var strength = 0.0; +var detail_flag = getprop(lw~"config/detailed-clouds-flag"); var sec_to_rad = 2.0 * math.pi/86400; @@ -700,6 +1229,7 @@ while (i < nc) { p = 0.0; place_lift_flag = 0; + strength = 0.0; var x = (2.0 * rand() - 1.0) * size; var y = (2.0 * rand() - 1.0) * size; @@ -720,24 +1250,48 @@ while (i < nc) { { if (rand() + (2.0 * p) > 1.0) { - path = select_cloud_model("Cumulus","large"); place_lift_flag = 1; + path = select_cloud_model("Cumulus","large"); place_lift_flag = 1; strength=1.0; } else {path = select_cloud_model("Cumulus","small");} - create_cloud("Cumulus", path, lat, lon, balt, 0.0, 0); - + if (getprop(lw~"tmp/generate-thermal-lift-flag") != 3) # see if we produce blue thermals + { + if (getprop(lw~"tmp/thread-flag") == 1) + { + if (detail_flag == 0){create_cloud_vec("Cumulus",path,lat,lon, balt, 0.0, 0);} + else {create_detailed_cumulus_cloud(lat, lon, balt, p + strength+rand());} + } + else + { + if (detail_flag == 0){create_cloud("Cumulus", path, lat, lon, balt, 0.0, 0);} + else {create_detailed_cumulus_cloud(lat, lon, balt, p + strength+rand());} + } + } + # now see if we need to create a thermal - first check the flag if (getprop(lw~"tmp/generate-thermal-lift-flag") == 1) { # now check if convection is strong if (place_lift_flag == 1) - { - var lift = 1.0 + 20.0 * p * rand(); - var radius = 300 + 300 * rand(); - create_effect_volume(1, lat, lon, radius, radius, 0.0, 0.0, balt+500.0, -1, -1, -1, -1, lift, 1); - + { + var lift = 3.0 + 20.0 * p * rand(); + var radius = 500 + 500 * rand(); + create_effect_volume(1, lat, lon, radius, radius, 0.0, 0.0, balt+500.0, -1, -1, -1, -1, lift, 1); } # end if place_lift_flag } # end if generate-thermal-lift-flag + else if ((getprop(lw~"tmp/generate-thermal-lift-flag") == 2) or (getprop(lw~"tmp/generate-thermal-lift-flag") == 3)) + { + + if (place_lift_flag == 1) + { + var lift = 3.0 + 20.0 * p * rand(); + var radius = 500 + 500 * rand(); + create_effect_volume(1, lat, lon, 1.2*radius, 1.2*radius, 0.0, 0.0, balt+500.0, -1, -1, -1, -1, lift, -2); + } # end if place_lift_flag + + } # end if generate-thermal-lift-flag + + } # end if rand < p i = i + 1; } # end while @@ -750,7 +1304,7 @@ while (i < nc) { var terrain_presampling = func { -var size = 15000.0; +var size = 20000.0; var blat = getprop("position/latitude-deg"); var blon = getprop("position/longitude-deg"); var elevation = 0.0; @@ -895,8 +1449,17 @@ for (var i=0; i 5.0) {flag = 1;} else {path = select_cloud_model(type,"large");} } - #var label = get_label(type); - if (flag==0){create_cloud("tmp_cloud", path, lat, long, balt, 0.0, 0);} + + #if (rand() > 0.5) {var beta = 0.0;} else {var beta = 180.0;} + + if (flag==0){ + if (getprop(lw~"tmp/thread-flag") == 1) + {create_cloud_vec("tmp_cloud", path, lat, long, balt, 0.0, 0);} + else + {create_cloud("tmp_cloud", path, lat, long, balt, 0.0, 0);} + + + } } } @@ -944,7 +1507,10 @@ while(i 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; +} diff --git a/Nasal/weather_tiles.nas b/Nasal/weather_tiles.nas index 19de571c8..28911b3f0 100644 --- a/Nasal/weather_tiles.nas +++ b/Nasal/weather_tiles.nas @@ -2,11 +2,30 @@ # tile setup calls #################################### +var tile_start = func { + +if (getprop(lw~"tmp/thread-flag") == 1){setprop(lw~"tmp/thread-status","computing");} + +} + +var tile_finished = func { + +setprop(lw~"clouds/placement-index",0); + +if (getprop(lw~"tmp/thread-flag") == 1){setprop(lw~"tmp/thread-status","placing");} +} + + + + + #################################### -# Altocumulus sky +# test tile #################################### -var set_altocumulus_tile = func { +var set_4_8_stratus_tile = func { + +tile_start(); var x = 0.0; var y = 0.0; @@ -19,8 +38,558 @@ var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); # get tile center coordinates -var blat = getprop("position/latitude-deg"); -var blon = getprop("position/longitude-deg"); +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); +calc_geo(blat); + +# first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) + +local_weather.set_weather_station(blat, blon, 35000.0, 14.0, 12.0, 29.78); + +create_4_8_cirrostratus_patches(blat, blon, 25000, alpha); +# create_stratocumulus_bank(blat, blon, 3000+alt_offset, alpha); +# create_4_8_stratus_patches(blat, blon, 3000+alt_offset, alpha); +tile_finished(); + +} + + +#################################### +# high pressure core +#################################### + +var set_high_pressure_core_tile = func { + +tile_start(); + +setprop(lw~"tiles/code","high_pressure_core"); + +var x = 0.0; +var y = 0.0; +var lat = 0.0; +var lon = 0.0; + +var alpha = getprop(lw~"tmp/tile-orientation-deg"); +var phi = alpha * math.pi/180.0; +var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); + +# get tile center coordinates + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); +calc_geo(blat); + +# get probabilistic values for the weather parameters + +var vis = 35000.0 + rand() * 20000.0; +var T = 20.0 + rand() * 10.0; +var spread = 5.0 + 3.0 * rand(); +var D = T - spread; +var p = 1033.0 + rand() * 10.0; + +# and set them at the tile center +local_weather.set_weather_station(blat, blon, vis, T, D, p * hp_to_inhg); + +# weak cumulus development + +var alt = spread * 1000; +var strength = rand() * 0.05; + +local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + +tile_finished(); + +} + + +#################################### +# high pressure +#################################### + +var set_high_pressure_tile = func { + +tile_start(); + +setprop(lw~"tiles/code","high_pressure"); + +var x = 0.0; +var y = 0.0; +var lat = 0.0; +var lon = 0.0; + +var alpha = getprop(lw~"tmp/tile-orientation-deg"); +var phi = alpha * math.pi/180.0; +var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); + +# get tile center coordinates + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); +calc_geo(blat); + +# get probabilistic values for the weather parameters + +var vis = 25000.0 + rand() * 15000.0; +var T = 15.0 + rand() * 10.0; +var spread = 4.0 + 2.0 * rand(); +var D = T - spread; +var p = 1023.0 + rand() * 10.0; + +# and set them at the tile center +local_weather.set_weather_station(blat, blon, vis, T, D, p * hp_to_inhg); + +# moderate cumulus development + +var alt = spread * 1000; + + + +var rn = rand(); + +if (rn > 0.5) + { + # cloud scenario 1: possible Cirrus over Cumulus + var strength = 0.2 + rand() * 0.4; + local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + # if cumulus are weak, increase likelihood of Cirrus (the logic is the other way round + # but this makes no difference and is easier to implement) + + # try to place two spatially separated Cirrus clouds + + if (rand() > 2.0 * strength) + { + x = 2000.0 + rand() * 16000.0; + y = 2.0 * (rand()-0.5) * 18000; + alt = 25000.0 + rand() * 5000.0; + var path = local_weather.select_cloud_model("Cirrus", "small"); + local_weather.create_cloud("Cirrus", path, blat + get_lat(x,y,phi), blon+get_lon(x,y,phi), alt + alt_offset,alpha, 0); + } + + if (rand() > 2.0 * strength) + { + x = -2000.0 - rand() * 16000.0; + y = 2.0 * (rand()-0.5) * 18000; + alt = 25000.0 + rand() * 5000.0; + var path = local_weather.select_cloud_model("Cirrus", "small"); + local_weather.create_cloud("Cirrus", path, blat + get_lat(x,y,phi), blon+get_lon(x,y,phi), alt + alt_offset,alpha, 0); + } + } +else if (rn > 0.0) + { + # cloud scenario 2: Cirrostratus over weak Cumulus + + var strength = 0.2 + rand() * 0.2; + local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + create_2_8_cirrostratus(blat, blon, alt+alt_offset+25000.0, alpha); + } + +tile_finished(); + +} + + +#################################### +# high pressure border +#################################### + +var set_high_pressure_border_tile = func { + +tile_start(); + +setprop(lw~"tiles/code","high_pressure_border"); + +var x = 0.0; +var y = 0.0; +var lat = 0.0; +var lon = 0.0; + +var alpha = getprop(lw~"tmp/tile-orientation-deg"); +var phi = alpha * math.pi/180.0; +var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); + +# get tile center coordinates + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); +calc_geo(blat); + +# get probabilistic values for the weather parameters + +var vis = 20000.0 + rand() * 12000.0; +var T = 12.0 + rand() * 10.0; +var spread = 3.0 + 2.0 * rand(); +var D = T - spread; +var p = 1013.0 + rand() * 10.0; + +# and set them at the tile center +local_weather.set_weather_station(blat, blon, vis, T, D, p * hp_to_inhg); + + +# now a random selection of different possible cloud configuration scenarios + +var alt = spread * 1000; + +var rn = rand(); + + +if (rn > 0.833) + { + # cloud scenario 1: Altocumulus patch over weak Cumulus + var strength = 0.1 + rand() * 0.1; + local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + x = 2.0 * (rand()-0.5) * 5000; + y = 2.0 * (rand()-0.5) * 5000; + local_weather.create_streak("Altocumulus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 12000.0+alt+alt_offset,30,1000.0,0.2, 30,1000.0,0.2,alpha ,1.0); + local_weather.randomize_pos("Altocumulus",1500.0,800.0,800.0,alpha); + } +else if (rn > 0.666) + { + # cloud scenario 2: Altocumulus streaks + var strength = 0.15 + rand() * 0.2; + local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + x = 2.0 * (rand()-0.5) * 10000; + y = 2.0 * (rand()-0.5) * 10000; + local_weather.create_streak("Altocumulus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 12000.0+alt+alt_offset,25,700.0,0.2, 10,700.0,0.2,alpha ,1.4); + x = 2.0 * (rand()-0.5) * 10000; + y = 2.0 * (rand()-0.5) * 10000; + local_weather.create_streak("Altocumulus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 12000.0+alt+alt_offset,22,750.0,0.2, 8,750.0,0.2,alpha ,1.1); + local_weather.randomize_pos("Altocumulus",1500.0,800.0,800.0,alpha); + } +else if (rn > 0.5) + { + # cloud scenario 3: Cirrus + + var strength = 0.1 + rand() * 0.1; + local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + x = 2.0 * (rand()-0.5) * 3000; + y = 2.0 * (rand()-0.5) * 3000; + local_weather.create_streak("Cirrus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 22000.0+alt+alt_offset,3,9000.0,0.0, 1,8000.0,0.0,alpha ,1.0); + local_weather.randomize_pos("Cirrus",1500.0,800.0,800.0,alpha); + } +else if (rn > 0.333) + { + # cloud scenario 4: Cumulonimbus banks + + var strength = 0.7 + rand() * 0.3; + local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + for (var i = 0; i < 3; i = i + 1) + { + x = 2.0 * (rand()-0.5) * 16000; + y = 2.0 * (rand()-0.5) * 16000; + + create_cloud_bank("Cumulonimbus", blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset, 1600.0, 800.0, 3000.0, 9, alpha); + } + } +else if (rn > 0.166) + { + # cloud scenario 5: scattered Stratus + + var strength = 0.4 + rand() * 0.2; + local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + var size_offset = 0.5 * m_to_ft * local_weather.cloud_vertical_size_map["Stratus_structured"]; + + local_weather.create_streak("Stratus (structured)",blat, blon, alt+6000.0+alt_offset+size_offset,18,0.0,0.3,18,0.0,0.3,0.0,1.0); + local_weather.randomize_pos("Stratus (structured)",1000.0,20000.0,20000.0,0.0); + } +else if (rn > 0.0) + { + # cloud scenario 6: Cirrocumulus + + var strength = 0.2 + rand() * 0.2; + local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0); + + x = 2.0 * (rand()-0.5) * 5000; + y = 2.0 * (rand()-0.5) * 5000; + + + var path = local_weather.select_cloud_model("Cirrocumulus", "large"); + local_weather.create_cloud("Cirrocumulus", path, blat + get_lat(x,y,phi), blon+get_lon(x,y,phi), alt + alt_offset +22000,alpha, 0); + + } + + + +tile_finished(); + +} + +#################################### +# low pressure border +#################################### + +var set_low_pressure_border_tile = func { + +tile_start(); + +setprop(lw~"tiles/code","low_pressure_border"); + +var x = 0.0; +var y = 0.0; +var lat = 0.0; +var lon = 0.0; + +var alpha = getprop(lw~"tmp/tile-orientation-deg"); +var phi = alpha * math.pi/180.0; +var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); + +# get tile center coordinates + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); +calc_geo(blat); + +# get probabilistic values for the weather parameters + +var vis = 15000.0 + rand() * 10000.0; +var T = 10.0 + rand() * 10.0; +var spread = 2.0 + 2.0 * rand(); +var D = T - spread; +var p = 1003.0 + rand() * 10.0; + +# and set them at the tile center +local_weather.set_weather_station(blat, blon, vis, T, D, p * hp_to_inhg); + +# altitude for the lowest layer +alt = spread * 1000.0; + +# now a random selection of different possible cloud configuration scenarios + +var rn = rand(); + +if (rn > 0.75) + { + # cloud scenario 1: a low 4/8 stratus patches, thin patches above + + alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft; + create_4_8_stratus_patches(blat, blon, alt+alt_offset,alpha); + create_4_8_tstratus_patches(blat, blon, alt+alt_offset+6000,alpha); + } +else if (rn > 0.5) + { + # cloud scenario 2: a low 4/8 undulatus, thin patches above + + alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft; + create_4_8_sstratus_undulatus(blat, blon, alt+alt_offset,alpha); + create_2_8_tstratus(blat, blon, alt+alt_offset+7000,alpha); + } +else if (rn > 0.25) + { + # cloud scenario 3: low Stratocumulus + + alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft; + create_stratocumulus_bank(blat, blon, alt+alt_offset,alpha); + create_2_8_sstratus(blat, blon, alt+alt_offset+3000,alpha); + create_2_8_tstratus(blat, blon, alt+alt_offset+9000,alpha); + } +else if (rn > 0.0) + { + # cloud scenario 4: dense low Stratocumulus + + alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft; + create_stratocumulus_bank(blat, blon, alt+alt_offset,alpha); + create_stratocumulus_bank(blat, blon, alt+alt_offset,alpha); + create_2_8_sstratus(blat, blon, alt+alt_offset+8000,alpha); + } + + +tile_finished(); + +} + +#################################### +# low pressure +#################################### + +var set_low_pressure_tile = func { + +tile_start(); + +setprop(lw~"tiles/code","low_pressure"); + +var x = 0.0; +var y = 0.0; +var lat = 0.0; +var lon = 0.0; + +var alpha = getprop(lw~"tmp/tile-orientation-deg"); +var phi = alpha * math.pi/180.0; +var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); + +# get tile center coordinates + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); +calc_geo(blat); + +# get probabilistic values for the weather parameters + +var vis = 10000.0 + rand() * 10000.0; +var T = 5.0 + rand() * 10.0; +var spread = 1.0 + 2.0 * rand(); +var D = T - spread; +var p = 993.0 + rand() * 10.0; + +# and set them at the tile center +local_weather.set_weather_station(blat, blon, vis, T, D, p * hp_to_inhg); + +# altitude for the lowest layer +alt = spread * 1000.0; + +var rn = rand(); + + +if (rn > 0.75) + { + + # cloud scenario 1: two patches of Nimbostratus with precipitation + # overhead broken stratus layers + # cloud count 1050 + + x = 2.0 * (rand()-0.5) * 11000.0; + y = 2.0 * (rand()-0.5) * 11000.0; + var beta = rand() * 360.0; + + local_weather.create_layer("Nimbus", blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset, 500.0, 12000.0, 7000.0, beta, 1.0, 0.2, 1, 1.0); + local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 10000.0, 6000.0, beta, 0.0, alt + alt_offset, 5000.0, 0.3, -1, -1, -1,0 ); + local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 9000.0, 5000.0, beta, 0.0, alt+alt_offset-300.0, 1500.0, 0.5, -1, -1, -1,0 ); + + x = 2.0 * (rand()-0.5) * 11000.0; + y = 2.0 * (rand()-0.5) * 11000.0; + var beta = rand() * 360.0; + + local_weather.create_layer("Nimbus", blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset, 500.0, 10000.0, 6000.0, beta, 1.0, 0.2, 1, 1.0); + local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 9000.0, 5000.0, beta, 0.0, alt + alt_offset, 5000.0, 0.3, -1, -1, -1,0 ); + local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 8000.0, 4000.0, beta, 0.0, alt+alt_offset-300.0, 1500.0, 0.5, -1, -1, -1,0 ); + + create_4_8_sstratus_undulatus(blat, blon, alt+alt_offset +3000.0, alpha); + create_2_8_tstratus(blat, blon, alt+alt_offset +6000.0, alpha); + } +else if (rn >0.5) + { + # cloud scenario 2: 8/8 Stratus with light precipitation + # above broken cover + # cloud count 1180 + + alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft; + create_8_8_stratus(blat, blon, alt+alt_offset,alpha); + local_weather.create_effect_volume(3, blat, blon, 18000.0, 18000.0, 0.0, 0.0, 1800.0, 8000.0, -1, -1, -1, -1, 0); + local_weather.create_effect_volume(3, blat, blon, 14000.0, 14000.0, 0.0, 0.0, 1500.0, 6000.0, 0.1, -1, -1, -1,0 ); + create_2_8_sstratus(blat, blon, alt+alt_offset+3000,alpha); + } +else if (rn >0.25) + { + # cloud scenario 3: multiple broken layers + # cloud count 1350 + + alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft; + create_4_8_stratus(blat, blon, alt+alt_offset,alpha); + create_4_8_stratus_patches(blat, blon, alt+alt_offset+3000,alpha); + create_4_8_sstratus_undulatus(blat, blon, alt+alt_offset+6000,alpha); + create_2_8_tstratus(blat, blon, alt+alt_offset+8000,alpha); + } +else if (rn >0.0) + { + # cloud scenario 4: a low 6/8 layer and some clouds above + # cloud count 650 + + alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft; + create_6_8_stratus(blat, blon, alt+alt_offset,alpha); + create_2_8_sstratus(blat, blon, alt+alt_offset+6000,alpha); + } + +tile_finished(); + +} + + +#################################### +# low pressure core +#################################### + +var set_low_pressure_core_tile = func { + +tile_start(); + +setprop(lw~"tiles/code","low_pressure_core"); + +var x = 0.0; +var y = 0.0; +var lat = 0.0; +var lon = 0.0; + +var alpha = getprop(lw~"tmp/tile-orientation-deg"); +var phi = alpha * math.pi/180.0; +var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); + +# get tile center coordinates + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); +calc_geo(blat); + +# get probabilistic values for the weather parameters + +var vis = 8000.0 + rand() * 7000.0; +var T = 3.0 + rand() * 7.0; +var spread = 1.0 + 1.0 * rand(); +var D = T - spread; +var p = 983.0 + rand() * 10.0; + +# and set them at the tile center +local_weather.set_weather_station(blat, blon, vis, T, D, p * hp_to_inhg); + + +# set a closed Nimbostratus layer + +alt = spread * 1000.0 + local_weather.cloud_vertical_size_map["Nimbus"] * 0.5 * m_to_ft; + +#print("alt: ",spread*1000); + +create_8_8_nimbus(blat, blon, alt+alt_offset, alpha); + +# and a precipitation layer below, more rain in the center of the tile + +local_weather.create_effect_volume(3, blat, blon, 20000.0, 20000.0, alpha, 0.0, alt + alt_offset, 3000.0, 0.3, -1, -1, -1,0 ); +local_weather.create_effect_volume(3, blat , blon, 16000.0, 16000.0, alpha, 0.0, alt + alt_offset - 300.0, 1500.0, 0.5, -1, -1, -1,0 ); + + +# and some broken Stratus cover above + +var rn = rand(); + +if (rn > 0.5){create_4_8_stratus_patches(blat, blon, alt+alt_offset+3000.0, alpha);} +else {create_4_8_stratus(blat, blon, alt+alt_offset+3000.0, alpha);} + + +tile_finished(); + +} + +#################################### +# Altocumulus sky +# cloud count 1400/tile +#################################### + +var set_altocumulus_tile = func { + +tile_start(); + +var alpha = getprop(lw~"tmp/tile-orientation-deg"); +var phi = alpha * math.pi/180.0; +var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); + +# get tile center coordinates + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); calc_geo(blat); # first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) @@ -29,22 +598,26 @@ local_weather.set_weather_station(blat, blon, 35000.0, 22.0, 14.0, 30.02); # then draw the Altocumulus streaks, dense at 15.000 ft, sparse at 17.000 ft -local_weather.create_streak("Altocumulus",blat, blon, 15000.0+alt_offset,40,900.0,0.2, 40,900.0,0.2,0.0 ,1.0); -local_weather.create_streak("Altocumulus",blat, blon, 17000.0+alt_offset,18,1900.0,0.35,18,1900.0,0.35,0.0,1.0); -local_weather.randomize_pos("Altocumulus",1000.0,600.0,600.0,0.0); +local_weather.create_streak("Altocumulus",blat, blon, 15000.0+alt_offset,40,1000.0,0.2, 40,1000.0,0.2,alpha ,1.0); +local_weather.create_streak("Altocumulus",blat, blon, 17000.0+alt_offset,18,2000.0,0.35,18,2000.0,0.35,alpha,1.0); +local_weather.randomize_pos("Altocumulus",1500.0,800.0,800.0,alpha); -# start the interpolation loop +tile_finished(); -if (getprop(lw~"interpolation-loop-flag") == 0) -{setprop(lw~"interpolation-loop-flag",1); local_weather.interpolation_loop();} } + + + #################################### # Overcast stratus sky +# cloud count 1000/tile #################################### var set_overcast_stratus_tile = func { +tile_start(); + var x = 0.0; var y = 0.0; var lat = 0.0; @@ -56,8 +629,8 @@ var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); # get tile center coordinates -var blat = getprop("position/latitude-deg"); -var blon = getprop("position/longitude-deg"); +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); calc_geo(blat); # first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) @@ -67,12 +640,12 @@ local_weather.set_weather_station(blat, blon, 10000.0, 14.0, 12.0, 29.78); # then draw the Stratus layers var size_offset = 0.5 * m_to_ft * local_weather.cloud_vertical_size_map["Stratus"]; -local_weather.create_streak("Stratus",blat, blon, 1500.0+alt_offset+size_offset,30,1200.0,0.2, 30,1200.0,0.2,0.0 ,1.0); +local_weather.create_streak("Stratus",blat, blon, 1500.0+alt_offset+size_offset,32,1250.0,0.2, 32,1250.0,0.2,0.0 ,1.0); local_weather.randomize_pos("Stratus",0.0,600.0,600.0,0.0); size_offset = 0.5 * m_to_ft * local_weather.cloud_vertical_size_map["Stratus_structured"]; -local_weather.create_streak("Stratus (structured)",blat, blon, 5000.0+alt_offset+size_offset,18,2500.0,0.3,18,2500.0,0.3,0.0,1.0); -local_weather.randomize_pos("Stratus (structured)",0.0,600.0,600.0,0.0); +local_weather.create_streak("Stratus (structured)",blat, blon, 5000.0+alt_offset+size_offset,16,2500.0,0.3,16,2500.0,0.3,0.0,1.0); +local_weather.randomize_pos("Stratus (structured)",0.0,1200.0,1200.0,0.0); # reduce visibility even more below lowest layer @@ -81,25 +654,21 @@ local_weather.randomize_pos("Stratus (structured)",0.0,600.0,600.0,0.0); local_weather.create_effect_volume(3, blat, blon, 18000.0, 18000.0, 0.0, 0.0, 1800.0, 8000.0, -1, -1, -1, -1, 0); local_weather.create_effect_volume(3, blat, blon, 14000.0, 14000.0, 0.0, 0.0, 1500.0, 6000.0, 0.1, -1, -1, -1,0 ); -# start the interpolation loop -if (getprop(lw~"interpolation-loop-flag") == 0) -{setprop(lw~"interpolation-loop-flag",1); local_weather.interpolation_loop();} - -# start the effect volume loop - -if (getprop(lw~"effect-loop-flag") == 0) -{setprop(lw~"effect-loop-flag",1); local_weather.effect_volume_loop();} +tile_finished(); } #################################### # Incoming rainfront +# cloud count 1500/tile #################################### var set_rainfront_tile = func { +tile_start(); + var x = 0.0; var y = 0.0; var lat = 0.0; @@ -111,8 +680,8 @@ var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); # get tile center coordinates -var blat = getprop("position/latitude-deg"); -var blon = getprop("position/longitude-deg"); +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); calc_geo(blat); # first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) @@ -151,29 +720,22 @@ local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,ph local_weather.create_effect_volume(3, blat, blon, 20000.0, 20000.0, 0.0, 2100.0, 85000.0, 18000.0, -1, -1, -1, -1,0 ); -# start the interpolation loop +tile_finished(); -if (getprop(lw~"interpolation-loop-flag") == 0) -{setprop(lw~"interpolation-loop-flag",1); local_weather.interpolation_loop();} -# start the effect volume loop - -if (getprop(lw~"effect-loop-flag") == 0) -{setprop(lw~"effect-loop-flag",1); local_weather.effect_volume_loop();} } #################################### # Broken layers +# cloud count 550/tile #################################### var set_broken_layers_tile = func { -var x = 0.0; -var y = 0.0; -var lat = 0.0; -var lon = 0.0; +tile_start(); + var alpha = getprop(lw~"tmp/tile-orientation-deg"); var phi = alpha * math.pi/180.0; @@ -181,8 +743,8 @@ var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); # get tile center coordinates -var blat = getprop("position/latitude-deg"); -var blon = getprop("position/longitude-deg"); +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); calc_geo(blat); # first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) @@ -201,19 +763,21 @@ local_weather.randomize_pos("Stratus (structured)",1000.0,20000.0,20000.0,0.0); local_weather.create_streak("Stratus (structured)",blat, blon, 7000.0+alt_offset+size_offset,11,0.0,0.5,11,0.0,0.5,0.0,1.0); local_weather.randomize_pos("Stratus (structured)",1000.0,20000.0,20000.0,0.0); -# start the interpolation loop +tile_finished(); + -if (getprop(lw~"interpolation-loop-flag") == 0) -{setprop(lw~"interpolation-loop-flag",1); local_weather.interpolation_loop();} } #################################### # Fair weather and Cumulus +# cloud count max. 800/tile #################################### var set_fair_weather_tile = func { +tile_start(); + var x = 0.0; var y = 0.0; var lat = 0.0; @@ -225,8 +789,9 @@ var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); # get tile center coordinates -var blat = getprop("position/latitude-deg"); -var blon = getprop("position/longitude-deg"); + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); calc_geo(blat); # first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) @@ -235,15 +800,13 @@ local_weather.set_weather_station(blat, blon, 35000.0, 20.0, 16.0, 1018 * hp_to_ # add convective clouds -var strength = 1; + +var strength = 1.0; var n = int(4000 * strength); # calculate the number of placement tries from tile size 20x20km and strength -local_weather.create_cumosys(blat,blon, 3000.0+alt_offset,n, 20000.0); +local_weather.create_cumosys(blat,blon, 3000.0 + alt_offset, n, 20000.0); +tile_finished(); -# start the interpolation loop - -if (getprop(lw~"interpolation-loop-flag") == 0) -{setprop(lw~"interpolation-loop-flag",1); local_weather.interpolation_loop();} } @@ -254,6 +817,8 @@ if (getprop(lw~"interpolation-loop-flag") == 0) var set_gliders_sky_tile = func { +tile_start(); + var x = 0.0; var y = 0.0; var lat = 0.0; @@ -265,15 +830,15 @@ var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); # get tile center coordinates -var blat = getprop("position/latitude-deg"); -var blon = getprop("position/longitude-deg"); +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); calc_geo(blat); # first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) local_weather.set_weather_station(blat, blon, 35000.0, 20.0, 16.0, 1018 * hp_to_inhg); -# switch the placement of thermal effect volumes on -setprop(lw~"tmp/generate-thermal-lift-flag",1); +# switch the placement of thermal effect volumes on: 1: constant lift 2: by function +setprop(lw~"tmp/generate-thermal-lift-flag",2); # add convective clouds @@ -283,29 +848,18 @@ var n = int(4000 * strength); # calculate the number of placement tries from til local_weather.create_cumosys(blat,blon, 3000.0+alt_offset,n, 20000.0); -# start the interpolation loop - -if (getprop(lw~"interpolation-loop-flag") == 0) -{setprop(lw~"interpolation-loop-flag",1); local_weather.interpolation_loop();} - -# start the effect volume loop - -if (getprop(lw~"effect-loop-flag") == 0) -{setprop(lw~"effect-loop-flag",1); local_weather.effect_volume_loop();} - - +tile_finished(); } - - - #################################### -# Summer rain +# Blue thermals #################################### -var set_summer_rain_tile = func { +var set_blue_thermals_tile = func { + +tile_start(); var x = 0.0; var y = 0.0; @@ -318,8 +872,52 @@ var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); # get tile center coordinates -var blat = getprop("position/latitude-deg"); -var blon = getprop("position/longitude-deg"); +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); +calc_geo(blat); + +# first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) +local_weather.set_weather_station(blat, blon, 45000.0, 20.0, 15.0, 1018 * hp_to_inhg); + +# switch the placement of thermal effect volumes on: 1: constant lift 2: by function 3: blue +setprop(lw~"tmp/generate-thermal-lift-flag",3); + + +# add convective clouds + +var strength = 0.9; +var n = int(4000 * strength); # calculate the number of placement tries from tile size 20x20km and strength +local_weather.create_cumosys(blat,blon, 5000.0+alt_offset,n, 20000.0); + + +tile_finished(); + + +} + + +#################################### +# Summer rain +# cloud count max. 1200/tile +#################################### + +var set_summer_rain_tile = func { + +tile_start(); + +var x = 0.0; +var y = 0.0; +var lat = 0.0; +var lon = 0.0; + +var alpha = getprop(lw~"tmp/tile-orientation-deg"); +var phi = alpha * math.pi/180.0; +var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); + +# get tile center coordinates + +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); calc_geo(blat); # first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) @@ -336,15 +934,7 @@ var strength = 1.5; var n = int(4000 * strength); # calculate the number of placement tries from tile size 20x20km and strength local_weather.create_cumosys(blat,blon, 3000.0+alt_offset,n, 20000.0); -# start the interpolation loop - -if (getprop(lw~"interpolation-loop-flag") == 0) -{setprop(lw~"interpolation-loop-flag",1); local_weather.interpolation_loop();} - -# start the effect volume loop - -if (getprop(lw~"effect-loop-flag") == 0) -{setprop(lw~"effect-loop-flag",1); local_weather.effect_volume_loop();} +tile_finished(); } @@ -375,6 +965,8 @@ local_weather.randomize_pos("Cumulonimbus",1000.0,1000.0,1000.0,30.0); var set_cirrus_sky_tile = func { +tile_start(); + var x = 0.0; var y = 0.0; var lat = 0.0; @@ -386,8 +978,8 @@ var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft"); # get tile center coordinates -var blat = getprop("position/latitude-deg"); -var blon = getprop("position/longitude-deg"); +var blat = getprop(lw~"tiles/tmp/latitude-deg"); +var blon = getprop(lw~"tiles/tmp/longitude-deg"); calc_geo(blat); # first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure) @@ -435,10 +1027,244 @@ var strength = 0.4; var n = int(4000 * strength); # calculate the number of placement tries from tile size 20x20km and strength local_weather.create_cumosys(blat,blon, 4000.0+alt_offset,n, 20000.0); -# start the interpolation loop +tile_finished(); +} + + +#################################### +# mid-level cloud setup calls +#################################### + +var create_8_8_stratus = func (lat, lon, alt, alpha) { + +local_weather.create_streak("Stratus",lat, lon, alt,32,1250.0,0.0,32,1250.0,0.0,alpha,1.0); +local_weather.randomize_pos("Stratus",500.0,400.0,400.0,alpha); +} + + +var create_8_8_nimbus = func (lat, lon, alt, alpha) { + +local_weather.create_streak("Nimbus",lat, lon, alt,32,1250.0,0.0,32,1250.0,0.0,alpha,1.0); +local_weather.randomize_pos("Nimbus",500.0,200.0,200.0,alpha); +} + + +var create_6_8_stratus = func (lat, lon, alt, alpha) { + +local_weather.create_streak("Stratus",lat, lon, alt,20,0.0,0.2,20,0.0,0.2,alpha,1.0); +local_weather.randomize_pos("Stratus",500.0,20000.0,20000.0,alpha); +} + + +var create_4_8_stratus = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; +var x = 2.0 * (rand()-0.5) * 15000; +var y = 2.0 * (rand()-0.5) * 15000; +var beta = rand() * 360.0; + +local_weather.create_streak("Stratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,20,1200.0,0.3,12,1200.0,0.3,beta,1.2); +local_weather.randomize_pos("Stratus",500.0,400.0,400.0,beta); + +var x = 2.0 * (rand()-0.5) * 15000; +var y = 2.0 * (rand()-0.5) * 15000; +var beta = rand() * 360.0; + +local_weather.create_streak("Stratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,18,1000.0,0.3,10,1000.0,0.3,beta,1.5); +local_weather.randomize_pos("Stratus",500.0,400.0,400.0,beta); + +var x = 2.0 * (rand()-0.5) * 15000; +var y = 2.0 * (rand()-0.5) * 15000; +var beta = rand() * 360.0; + +local_weather.create_streak("Stratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,15,1000.0,0.3,18,1000.0,0.3,beta,2.0); +local_weather.randomize_pos("Stratus",500.0,400.0,400.0,beta); +} + +var create_4_8_stratus_patches = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; + +for (var i=0; i<16; i=i+1) + { + var x = 2.0 * (rand()-0.5) * 18000; + var y = 2.0 * (rand()-0.5) * 18000; + var beta = (rand() -0.5) * 180.0; + local_weather.create_streak("Stratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,4,950.0,0.2,6,950.0,0.2,alpha+beta,1.0); +local_weather.randomize_pos("Stratus",300.0,500.0,500.0,alpha+beta); + } + +} + +var create_4_8_tstratus_patches = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; + +for (var i=0; i<16; i=i+1) + { + var x = 2.0 * (rand()-0.5) * 18000; + var y = 2.0 * (rand()-0.5) * 18000; + var beta = (rand() -0.5) * 180.0; + local_weather.create_streak("Stratus (thin)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,4,950.0,0.2,6,950.0,0.2,alpha+beta,1.0); +local_weather.randomize_pos("Stratus (thin)",300.0,500.0,500.0,alpha+beta); + } + +} + + +var create_4_8_sstratus_patches = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; + +for (var i=0; i<16; i=i+1) + { + var x = 2.0 * (rand()-0.5) * 18000; + var y = 2.0 * (rand()-0.5) * 18000; + var beta = (rand() -0.5) * 180.0; + local_weather.create_streak("Stratus (structured)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,4,950.0,0.2,6,950.0,0.2,alpha+beta,1.0); +local_weather.randomize_pos("Stratus (structured)",300.0,500.0,500.0,alpha+beta); + } + +} + + +var create_4_8_cirrostratus_patches = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; + +for (var i=0; i<6; i=i+1) + { + var x = 2.0 * (rand()-0.5) * 12000; + var y = 2.0 * (rand()-0.5) * 12000; + var beta = (rand() -0.5) * 180.0; + local_weather.create_streak("Cirrostratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,4,2500.0,0.2,4,2500.0,0.2,alpha+beta,1.0); +local_weather.randomize_pos("Cirrostratus",300.0,600.0,600.0,alpha+beta); + } + +} + + +var create_4_8_stratus_undulatus = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; +var x = 2.0 * (rand()-0.5) * 5000; +var y = 2.0 * (rand()-0.5) * 5000; +var tri = 1.5 + 1.5*rand(); +var beta = (rand() -0.5) * 60.0; + +local_weather.create_streak("Stratus",lat+get_lat(x,y+4000,phi), lon+get_lon(x,y+4000,phi), alt,10,800.0,0.25,12,2800.0,0.15,alpha+90.0+beta,tri); +local_weather.randomize_pos("Stratus",500.0,400.0,600.0,alpha+90.0+beta); +local_weather.create_streak("Stratus",lat+get_lat(x,y-4000,phi), lon+get_lon(x,y-4000,phi), alt,10,800.0,0.25,12,2800.0,0.15,alpha+270.0+beta,tri); +local_weather.randomize_pos("Stratus",500.0,400.0,600.0,alpha+270.0+beta); +} + +var create_4_8_tstratus_undulatus = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; +var x = 2.0 * (rand()-0.5) * 5000; +var y = 2.0 * (rand()-0.5) * 5000; +var tri = 1.5 + 1.5*rand(); +var beta = (rand() -0.5) * 60.0; + +local_weather.create_streak("Stratus (thin)",lat+get_lat(x,y+4000,phi), lon+get_lon(x,y+4000,phi), alt,10,800.0,0.25,12,2800.0,0.15,alpha+90.0+beta,tri); +local_weather.randomize_pos("Stratus (thin)",500.0,400.0,600.0,alpha+90.0+beta); +local_weather.create_streak("Stratus (thin)",lat+get_lat(x,y-4000,phi), lon+get_lon(x,y-4000,phi), alt,10,800.0,0.25,12,2800.0,0.15,alpha+270.0+beta,tri); +local_weather.randomize_pos("Stratus (thin)",500.0,400.0,600.0,alpha+270.0+beta); +} + +var create_4_8_sstratus_undulatus = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; +var x = 2.0 * (rand()-0.5) * 5000; +var y = 2.0 * (rand()-0.5) * 5000; +var tri = 1 + 1.5*rand(); +var beta = (rand() -0.5) * 60.0; + +local_weather.create_streak("Stratus (structured)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,20,900.0,0.25,12,2800.0,0.15,alpha+90.0+beta,tri); +local_weather.randomize_pos("Stratus (structured)",500.0,400.0,600.0,alpha+90.0+beta); +} + + +var create_2_8_stratus = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; + +for (var i=0; i<8; i=i+1) + { + var x = 2.0 * (rand()-0.5) * 18000; + var y = 2.0 * (rand()-0.5) * 18000; + var beta = (rand() -0.5) * 180.0; + local_weather.create_streak("Stratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,5,900.0,0.2,7,900.0,0.2,alpha+beta,1.0); +local_weather.randomize_pos("Stratus",300.0,500.0,500.0,alpha+beta); + } + +} + +var create_2_8_tstratus = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; + +for (var i=0; i<8; i=i+1) + { + var x = 2.0 * (rand()-0.5) * 18000; + var y = 2.0 * (rand()-0.5) * 18000; + var beta = (rand() -0.5) * 180.0; + local_weather.create_streak("Stratus (thin)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,5,900.0,0.2,7,900.0,0.2,alpha+beta,1.0); +local_weather.randomize_pos("Stratus (thin)",300.0,500.0,500.0,alpha+beta); + } + +} + +var create_2_8_sstratus = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; + +for (var i=0; i<8; i=i+1) + { + var x = 2.0 * (rand()-0.5) * 18000; + var y = 2.0 * (rand()-0.5) * 18000; + var beta = (rand() -0.5) * 180.0; + local_weather.create_streak("Stratus (structured)",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,5,900.0,0.2,7,900.0,0.2,alpha+beta,1.0); +local_weather.randomize_pos("Stratus (structured)",300.0,500.0,500.0,alpha+beta); + } + +} + +var create_2_8_cirrostratus = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; + +for (var i=0; i<3; i=i+1) + { + var x = 2.0 * (rand()-0.5) * 12000; + var y = 2.0 * (rand()-0.5) * 12000; + var beta = (rand() -0.5) * 180.0; + local_weather.create_streak("Cirrostratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,4,2300.0,0.2,4,2300.0,0.2,alpha+beta,1.0); +local_weather.randomize_pos("Cirrostratus",300.0,600.0,600.0,alpha+beta); + } + +} + + +var create_stratocumulus_bank = func (lat, lon, alt, alpha) { + +var phi = alpha * math.pi/180.0; +var x = 2.0 * (rand()-0.5) * 10000; +var y = 2.0 * (rand()-0.5) * 10000; +var tri = 1.5 + 1.5*rand(); +var beta = (rand() -0.5) * 60.0; + +local_weather.create_streak("Cumulus",lat+get_lat(x,y+4000,phi), lon+get_lon(x,y+4000,phi), alt,15,400.0,0.2,20,400.0,0.2,alpha+90.0+beta,tri); +local_weather.randomize_pos("Cumulus",500.0,400.0,400.0,alpha+90.0+beta); +local_weather.create_streak("Cumulus",lat+get_lat(x,y-4000,phi), lon+get_lon(x,y-4000,phi), alt,15,400.0,0.2,20,400.0,0.2,alpha+270.0+beta,tri); +local_weather.randomize_pos("Cumulus",500.0,400.0,400.0,alpha+270.0+beta); +} + +var create_cloud_bank = func (type, lat, lon, alt, x1, x2, height, n, alpha) { + +local_weather.create_streak(type,lat,lon, alt+ 0.5* height,n,0.0,0.0,1,0.0,0.0,alpha,1.0); +local_weather.randomize_pos(type,height,x1,x2,alpha); -if (getprop(lw~"interpolation-loop-flag") == 0) -{setprop(lw~"interpolation-loop-flag",1); local_weather.interpolation_loop();} } ################### @@ -462,6 +1288,11 @@ return (x * math.cos(phi) + y * math.sin(phi)) * m_to_lon; } +var get_n = func(strength) { + +return int(4000 * strength); +} + ################### # global variables ################### diff --git a/Shaders/clouds-layered.vert b/Shaders/clouds-layered.vert index 8fe33a9cd..8846f0ee5 100644 --- a/Shaders/clouds-layered.vert +++ b/Shaders/clouds-layered.vert @@ -3,8 +3,8 @@ varying float fogFactor; -float shade = 0.2; -float cloud_height = 3000.0; +float shade = 0.4; +float cloud_height = 1000.0; void main(void) { @@ -23,13 +23,15 @@ void main(void) // 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.x * u ; 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.z * w * hScale; 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 // 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), @@ -56,6 +58,6 @@ void main(void) gl_BackColor = gl_FrontColor; // 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); } diff --git a/Shaders/clouds-thick.vert b/Shaders/clouds-thick.vert index f8024c3d0..996208295 100644 --- a/Shaders/clouds-thick.vert +++ b/Shaders/clouds-thick.vert @@ -3,7 +3,7 @@ varying float fogFactor; -float shade = 0.5; +float shade = 0.6; float cloud_height = 1000.0; void main(void) diff --git a/Shaders/clouds-thinlayer.frag b/Shaders/clouds-thinlayer.frag new file mode 100644 index 000000000..4222fbfc8 --- /dev/null +++ b/Shaders/clouds-thinlayer.frag @@ -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); +} + diff --git a/Shaders/clouds-thinlayer.vert b/Shaders/clouds-thinlayer.vert new file mode 100644 index 000000000..4f500a151 --- /dev/null +++ b/Shaders/clouds-thinlayer.vert @@ -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); +} diff --git a/Shaders/test.frag b/Shaders/test.frag new file mode 100644 index 000000000..4222fbfc8 --- /dev/null +++ b/Shaders/test.frag @@ -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); +} + diff --git a/Shaders/test.vert b/Shaders/test.vert new file mode 100644 index 000000000..e991cb9d1 --- /dev/null +++ b/Shaders/test.vert @@ -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); +} diff --git a/gui/dialogs/local_weather.xml b/gui/dialogs/local_weather.xml index a61f53eb4..40cc093f6 100644 --- a/gui/dialogs/local_weather.xml +++ b/gui/dialogs/local_weather.xml @@ -74,9 +74,12 @@ Cirrus Cumulus Cumulonimbus + Fog (thin) + Fog (thick) Nimbus Stratus Stratus (structured) + Stratus (thin) dialog-apply @@ -236,11 +239,15 @@ Altocumulus Cirrus Cumulus + Cumulus (cloudlet) Cumulonimbus Cumulonimbus (rain) + Fog (thin) + Fog (thick) Nimbus Stratus Stratus (structured) + Stratus (thin) dialog-apply @@ -647,10 +654,14 @@ Altocumulus Cirrus Cumulus + Cumulus (cloudlet) Cumulonimbus + Fog (thin) + Fog (thick) Nimbus Stratus Stratus (structured) + Stratus (thin) dialog-apply diff --git a/gui/dialogs/local_weather_tiles.xml b/gui/dialogs/local_weather_tiles.xml index 4c7ea9bfd..e1d072ca7 100644 --- a/gui/dialogs/local_weather_tiles.xml +++ b/gui/dialogs/local_weather_tiles.xml @@ -24,14 +24,23 @@ 25 true /local-weather/tmp/tile-type - Altocumulus sky - Broken layers - Cirrus sky - Fair weather + High-pressure-core + High-pressure + High-pressure-border + Low-pressure-border + Low-pressure + Low-pressure-core + --- + + + + Glider's sky - Incoming rainfront - Overcast stratus sky - Summer rain + Blue thermals + + + + dialog-apply @@ -44,27 +53,96 @@ - 120 + 115 170 - 50 + 40 25 /local-weather/tmp/tile-orientation-deg - 170 + 155 170 - 250 + 240 170 - 40 + 50 25 /local-weather/tmp/tile-alt-offset-ft + + 10 + 130 + + + + + 150 + 130 + 140 + 25 + true + /local-weather/tmp/tile-management + single tile + repeat tile + realistic weather + + dialog-apply + + + + + 10 + 90 + 15 + 15 + + /local-weather/tmp/presampling-flag + + dialog-apply + + + + + 150 + 90 + 15 + 15 + + /local-weather/tmp/thread-flag + + dialog-apply + + + + + 10 + 60 + 15 + 15 + + /local-weather/tmp/asymmetric-tile-loading-flag + + dialog-apply + + + + + 150 + 60 + 15 + 15 + + /local-weather/config/detailed-clouds-flag + + dialog-apply + + + 10 10 diff --git a/gui/menubar.xml.alt b/gui/menubar.xml.alt new file mode 100644 index 000000000..cf844318d --- /dev/null +++ b/gui/menubar.xml.alt @@ -0,0 +1,654 @@ + + + + + + + + + nasal + + + + + + + + nasal + + + + + + + + reset + + + + + + false + + hires-screen-capture + + + + + + + nasal + + + + + + + + old-print-dialog + + + + + + + dialog-show + sound-dialog + + + + + + + nasal + + + + + + + + dialog-show + logging + + + + + + + dialog-show + exit + + + + + + + + + + + dialog-show + display + + + + + + + dialog-show + rendering + + + + + + + dialog-show + view + + + + + + + dialog-show + cockpit-view + + + + + + + dialog-show + pilot_offset + + + + + + + dialog-show + hud + + + + + + + dialog-show + replay + + + + + + + dialog-show + static-lod + + + + + + + + + + + dialog-show + location-on-ground + + + + + + + dialog-show + location-in-air + + + + + + + dialog-show + airports + + + + + + + property-assign + /sim/presets/trim + false + + + property-randomize + /orientation/pitch-deg + 0 + 360 + + + property-randomize + /orientation/roll-deg + 0 + 360 + + + property-randomize + /orientation/heading-deg + 0 + 360 + + + + + + + dialog-show + location-of-tower + + + + + + + + autopilot + + + + + dialog-show + autopilot + + + + + + + dialog-show + route-manager + + + + + + + nasal + + + + + + + + nasal + + + + + + + + nasal + + + + + + + + + + + + dialog-show + weather_scenario + + + + + + + dialog-show + weather + + + + + + + dialog-show + clouds + + + + + + + dialog-show + timeofday + + + + + + + dialog-show + rainsnow + + + + + + + nasal + + + + + + + dialog-show + local_weather + + + + + + dialog-show + local_weather_tiles + + + + + + + + + + fuel-and-payload + + nasal + + + + + + + + dialog-show + radios + + + + + + + dialog-show + gps + + + + + + + dialog-show + instruments + + + + + + + dialog-show + stopwatch-dialog + + + + + + + dialog-show + random-failures + + + + + + + dialog-show + system-failures + + + + + + + dialog-show + instrument-failures + + + + + + + + + + + ATC-freq-search + + + + + + + dialog-show + atc-ai + + + + + + tanker + false + + dialog-show + tanker + + + + + + + multiplayer + + + + + dialog-show + chat-full + + + + + + + dialog-show + chat-menu + + + + + + + nasal + + + + + + + + nasal + + + + + + + + + + + + reinit + gui + + + + + + + reinit + input + + + + + + + panel-load + + + + + + + reinit + xml-autopilot + + + + + + + reinit + io + + + + + + + dialog-show + nasal-console + + + + + + + nasal + + + + + + + + dialog-show + devel-extensions + + + + + + + nasal + + + + + + + + dump-scenegraph + + + + + + + property-assign + /sim/rendering/print-statistics + true + + + + + + + property-adjust + /sim/rendering/on-screen-statistics + 1 + + + + + + + + + + + old-help-dialog + + + + + + joystick-info + + dialog-show + joystick-info + + + + + + + nasal + + + + + + + + nasal + + + + + + + + nasal + + + + + + + + nasal + + + + + + + tutorial-start + + dialog-show + tutorial + + + + + + tutorial-stop + false + + nasal + + + + + +