From: Stuart Buchanan Date: Thu, 21 Apr 2011 19:55:49 +0000 (+0100) Subject: Merge branch 'next' of git://gitorious.org/fg/flightgear X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=0becb0df2b3364f92bdcad5b9bfd3f87a1649f06;p=flightgear.git Merge branch 'next' of git://gitorious.org/fg/flightgear Conflicts: src/Environment/environment_mgr.cxx --- 0becb0df2b3364f92bdcad5b9bfd3f87a1649f06 diff --cc src/Environment/environment_mgr.cxx index 04208d304,40ca18f20..c6451eef1 --- a/src/Environment/environment_mgr.cxx +++ b/src/Environment/environment_mgr.cxx @@@ -116,73 -115,73 +116,73 @@@ FGEnvironmentMgr::bind ( _tiedProperties.setRoot( fgGetNode( "/environment", true ) ); _tiedProperties.Tie( "effective-visibility-m", thesky, - &SGSky::get_visibility ); + &SGSky::get_visibility ); _tiedProperties.Tie("rebuild-layers", fgClouds, - &FGClouds::get_update_event, - &FGClouds::set_update_event); + &FGClouds::get_update_event, + &FGClouds::set_update_event); _tiedProperties.Tie("turbulence/use-cloud-turbulence", &sgEnviro, - &SGEnviro::get_turbulence_enable_state, - &SGEnviro::set_turbulence_enable_state); + &SGEnviro::get_turbulence_enable_state, + &SGEnviro::set_turbulence_enable_state); for (int i = 0; i < MAX_CLOUD_LAYERS; i++) { - SGPropertyNode_ptr layerNode = fgGetNode("/environment/clouds",true)->getChild("layer", i, true ); + SGPropertyNode_ptr layerNode = fgGetNode("/environment/clouds",true)->getChild("layer", i, true ); - _tiedProperties.Tie( layerNode->getNode("span-m",true), this, i, - &FGEnvironmentMgr::get_cloud_layer_span_m, - &FGEnvironmentMgr::set_cloud_layer_span_m); - _tiedProperties.Tie( layerNode->getNode("span-m",true), this, i, ++ _tiedProperties.Tie( layerNode->getNode("span-m",true), this, i, + &FGEnvironmentMgr::get_cloud_layer_span_m, + &FGEnvironmentMgr::set_cloud_layer_span_m); - _tiedProperties.Tie( layerNode->getNode("elevation-ft",true), this, i, - &FGEnvironmentMgr::get_cloud_layer_elevation_ft, - &FGEnvironmentMgr::set_cloud_layer_elevation_ft); - _tiedProperties.Tie( layerNode->getNode("elevation-ft",true), this, i, ++ _tiedProperties.Tie( layerNode->getNode("elevation-ft",true), this, i, + &FGEnvironmentMgr::get_cloud_layer_elevation_ft, + &FGEnvironmentMgr::set_cloud_layer_elevation_ft); - _tiedProperties.Tie( layerNode->getNode("thickness-ft",true), this, i, - &FGEnvironmentMgr::get_cloud_layer_thickness_ft, - &FGEnvironmentMgr::set_cloud_layer_thickness_ft); - _tiedProperties.Tie( layerNode->getNode("thickness-ft",true), this, i, ++ _tiedProperties.Tie( layerNode->getNode("thickness-ft",true), this, i, + &FGEnvironmentMgr::get_cloud_layer_thickness_ft, + &FGEnvironmentMgr::set_cloud_layer_thickness_ft); - _tiedProperties.Tie( layerNode->getNode("transition-ft",true), this, i, - &FGEnvironmentMgr::get_cloud_layer_transition_ft, - &FGEnvironmentMgr::set_cloud_layer_transition_ft); - _tiedProperties.Tie( layerNode->getNode("transition-ft",true), this, i, ++ _tiedProperties.Tie( layerNode->getNode("transition-ft",true), this, i, + &FGEnvironmentMgr::get_cloud_layer_transition_ft, + &FGEnvironmentMgr::set_cloud_layer_transition_ft); - _tiedProperties.Tie( layerNode->getNode("coverage",true), this, i, - &FGEnvironmentMgr::get_cloud_layer_coverage, - &FGEnvironmentMgr::set_cloud_layer_coverage); - _tiedProperties.Tie( layerNode->getNode("coverage",true), this, i, ++ _tiedProperties.Tie( layerNode->getNode("coverage",true), this, i, + &FGEnvironmentMgr::get_cloud_layer_coverage, + &FGEnvironmentMgr::set_cloud_layer_coverage); - _tiedProperties.Tie( layerNode->getNode("coverage-type",true), this, i, - &FGEnvironmentMgr::get_cloud_layer_coverage_type, - &FGEnvironmentMgr::set_cloud_layer_coverage_type); - _tiedProperties.Tie( layerNode->getNode("coverage-type",true), this, i, ++ _tiedProperties.Tie( layerNode->getNode("coverage-type",true), this, i, + &FGEnvironmentMgr::get_cloud_layer_coverage_type, + &FGEnvironmentMgr::set_cloud_layer_coverage_type); - _tiedProperties.Tie( layerNode->getNode( "visibility-m",true), this, i, - &FGEnvironmentMgr::get_cloud_layer_visibility_m, - &FGEnvironmentMgr::set_cloud_layer_visibility_m); + _tiedProperties.Tie( layerNode->getNode( "visibility-m",true), this, i, + &FGEnvironmentMgr::get_cloud_layer_visibility_m, + &FGEnvironmentMgr::set_cloud_layer_visibility_m); - _tiedProperties.Tie( layerNode->getNode( "alpha",true), this, i, - &FGEnvironmentMgr::get_cloud_layer_maxalpha, - &FGEnvironmentMgr::set_cloud_layer_maxalpha); + _tiedProperties.Tie( layerNode->getNode( "alpha",true), this, i, + &FGEnvironmentMgr::get_cloud_layer_maxalpha, + &FGEnvironmentMgr::set_cloud_layer_maxalpha); } _tiedProperties.setRoot( fgGetNode("/sim/rendering", true ) ); _tiedProperties.Tie( "clouds3d-enable", fgClouds, - &FGClouds::get_3dClouds, - &FGClouds::set_3dClouds); + &FGClouds::get_3dClouds, + &FGClouds::set_3dClouds); _tiedProperties.Tie( "clouds3d-density", thesky, - &SGSky::get_3dCloudDensity, - &SGSky::set_3dCloudDensity); + &SGSky::get_3dCloudDensity, + &SGSky::set_3dCloudDensity); _tiedProperties.Tie("clouds3d-vis-range", thesky, - &SGSky::get_3dCloudVisRange, - &SGSky::set_3dCloudVisRange); + &SGSky::get_3dCloudVisRange, + &SGSky::set_3dCloudVisRange); - + _tiedProperties.Tie("precipitation-enable", &sgEnviro, - &SGEnviro::get_precipitation_enable_state, - &SGEnviro::set_precipitation_enable_state); - &SGEnviro::get_precipitation_enable_state, ++ &SGEnviro::get_precipitation_enable_state, + &SGEnviro::set_precipitation_enable_state); _tiedProperties.Tie("lightning-enable", &sgEnviro, - &SGEnviro::get_lightning_enable_state, - &SGEnviro::set_lightning_enable_state); + &SGEnviro::get_lightning_enable_state, + &SGEnviro::set_lightning_enable_state); sgEnviro.config(fgGetNode("/sim/rendering/precipitation")); } @@@ -208,6 -207,33 +208,33 @@@ FGEnvironmentMgr::update (double dt _cloudLayersDirty = false; fgClouds->set_update_event( fgClouds->get_update_event()+1 ); } + + _positionTimeToLive -= dt; + if( _positionTimeToLive <= 0.0 ) + { + // update closest airport information + _positionTimeToLive = 30.0; + + SG_LOG(SG_ALL, SG_INFO, "FGEnvironmentMgr::update: updating closest airport"); + + SGGeod pos = SGGeod::fromDeg(_longitude_n->getDoubleValue(), + _latitude_n->getDoubleValue()); + + FGAirport * nearestAirport = FGAirport::findClosest(pos, 100.0); + if( nearestAirport == NULL ) + { + SG_LOG(SG_ALL,SG_WARN,"FGEnvironmentMgr::update: No airport within 100NM range"); + } + else + { - const string currentId = fgGetString("/sim/airport/closest-airport-id", ""); ++ const string currentId = fgGetString("/sim/airport/closest-airport-id", ""); + if (currentId != nearestAirport->ident()) + { + fgSetString("/sim/airport/closest-airport-id", + nearestAirport->ident().c_str()); + } + } + } } FGEnvironment @@@ -347,10 -373,7 +374,7 @@@ FGEnvironmentMgr::set_cloud_layer_maxal thesky->get_cloud_layer(index)->setMaxAlpha(maxalpha); } - - - -void +void FGEnvironmentMgr::set_cloud_layer_coverage_type (int index, int type ) { if( type < 0 || type >= SGCloudLayer::SG_MAX_CLOUD_COVERAGES ) {