]> git.mxchange.org Git - flightgear.git/blobdiff - src/Environment/metarproperties.cxx
Merge branch 'next' of git://gitorious.org/fg/flightgear into next
[flightgear.git] / src / Environment / metarproperties.cxx
index 6a147c9f525f280b8b89068ce71e7930efa9c36a..9582c9ee66210a0b1d336fdbb6a1b7046e0e1588 100644 (file)
@@ -239,7 +239,12 @@ void MetarProperties::set_metar( const char * metar )
         SGPropertyNode_ptr cloudsNode = _rootNode->getNode("clouds", true );
         const vector<SGMetarCloud> & metarClouds = m->getClouds();
         unsigned layerOffset = 0; // Oh, this is ugly!
-        bool setGroundCloudLayer = _rootNode->getBoolValue("set-ground-cloud-layer", false );
+
+        // fog/mist/haze cloud layer does not work with 3d clouds yet :-(
+        bool setGroundCloudLayer = _rootNode->getBoolValue("set-ground-cloud-layer", false ) &&
+              false == (fgGetBool("/sim/rendering/shader-effects", false ) && 
+                        fgGetBool("/sim/rendering/clouds3d-enable", false ) );
+
         if( setGroundCloudLayer ) {
             // create a cloud layer #0 starting at the ground if its fog, mist or haze
 
@@ -266,13 +271,18 @@ void MetarProperties::set_metar( const char * metar )
                 coverage = SGMetarCloud::getCoverage(fgGetString("/environment/params/fog-mist-haze-layer/mist-2dlayer-coverage", SGMetarCloud::COVERAGE_OVERCAST_STRING));
                 thickness =  fgGetDouble("/environment/params/fog-mist-haze-layer/mist-thickness-ft",2000) - LAYER_BOTTOM_STATION_OFFSET;
                 alpha =  fgGetDouble("/environment/params/fog-mist-haze-layer/mist-2dlayer-alpha",0.8);
-            } else if( isHZ ) { // hase
+            } else if( isHZ ) { // haze
                 coverage = SGMetarCloud::getCoverage(fgGetString("/environment/params/fog-mist-haze-layer/mist-2dlayer-coverage", SGMetarCloud::COVERAGE_OVERCAST_STRING));
                 thickness =  fgGetDouble("/environment/params/fog-mist-haze-layer/haze-thickness-ft",2000) - LAYER_BOTTOM_STATION_OFFSET;
                 alpha =  fgGetDouble("/environment/params/fog-mist-haze-layer/haze-2dlayer-alpha",0.6);
             }
 
             if( coverage != SGMetarCloud::COVERAGE_NIL ) {
+
+                // if there is a layer above the fog, limit the top to one foot below that layer's bottom
+                if( metarClouds.size() > 0 && metarClouds[0].getCoverage() != SGMetarCloud::COVERAGE_CLEAR )
+                    thickness = metarClouds[0].getAltitude_ft() - LAYER_BOTTOM_STATION_OFFSET - 1;
+
                 SGPropertyNode_ptr layerNode = cloudsNode->getChild(LAYER, 0, true );
                 layerNode->setDoubleValue( "coverage-type", SGCloudLayer::getCoverageType(coverage_string[coverage]) );
                 layerNode->setStringValue( "coverage", coverage_string[coverage] );