From 43bc61d1318abd52de6c723dbeef0e4058b1a823 Mon Sep 17 00:00:00 2001 From: James Turner Date: Sun, 30 Oct 2011 11:59:24 +0000 Subject: [PATCH] Make environment-manager closest airport updating quieter, and use an event instead of a manual time counter. --- src/Environment/environment_mgr.cxx | 56 ++++++++++++++++------------- src/Environment/environment_mgr.hxx | 5 +-- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/src/Environment/environment_mgr.cxx b/src/Environment/environment_mgr.cxx index 2e8ae0a92..fd1804f2f 100644 --- a/src/Environment/environment_mgr.cxx +++ b/src/Environment/environment_mgr.cxx @@ -28,6 +28,7 @@ #include #include #include +#include #include
#include
@@ -90,7 +91,6 @@ FGEnvironmentMgr::FGEnvironmentMgr () : _altitude_n(fgGetNode("/position/altitude-ft", true)), _longitude_n(fgGetNode( "/position/longitude-deg", true )), _latitude_n( fgGetNode( "/position/latitude-deg", true )), - _positionTimeToLive(0.0), _3dCloudsEnableListener(new FG3DCloudsListener(fgClouds) ) { set_subsystem("controller", Environment::LayerInterpolateController::createInstance( fgGetNode("/environment/config", true ) )); @@ -145,6 +145,15 @@ FGEnvironmentMgr::init () _altitude_n->setDoubleValue(fgGetDouble("/sim/presets/altitude-ft")); _longitude_n->setDoubleValue(fgGetDouble("/sim/presets/longitude-deg")); _latitude_n->setDoubleValue(fgGetDouble("/sim/presets/latitude-deg")); + + globals->get_event_mgr()->addTask("updateClosestAirport", this, + &FGEnvironmentMgr::updateClosestAirport, 30 ); +} + +void +FGEnvironmentMgr::shutdown() +{ + globals->get_event_mgr()->removeTask("updateClosestAirport"); } void @@ -258,33 +267,30 @@ FGEnvironmentMgr::update (double dt) _latitude_n->getDoubleValue(), _altitude_n->getDoubleValue() ))); +} - _positionTimeToLive -= dt; - if( _positionTimeToLive <= 0.0 ) +void +FGEnvironmentMgr::updateClosestAirport() +{ + SG_LOG(SG_ENVIRONMENT, SG_DEBUG, "FGEnvironmentMgr::update: updating closest airport"); + + SGGeod pos = globals->get_aircraft_position(); + FGAirport * nearestAirport = FGAirport::findClosest(pos, 100.0); + if( nearestAirport == NULL ) { - // update closest airport information - _positionTimeToLive = 30.0; - - SG_LOG(SG_ENVIRONMENT, 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_ENVIRONMENT,SG_WARN,"FGEnvironmentMgr::update: No airport within 100NM range"); - } - else - { - const string currentId = fgGetString("/sim/airport/closest-airport-id", ""); - if (currentId != nearestAirport->ident()) - { - fgSetString("/sim/airport/closest-airport-id", - nearestAirport->ident().c_str()); - } - } + SG_LOG(SG_ENVIRONMENT,SG_WARN,"FGEnvironmentMgr::update: No airport within 100NM range"); } + else + { + const string currentId = fgGetString("/sim/airport/closest-airport-id", ""); + if (currentId != nearestAirport->ident()) + { + SG_LOG(SG_ENVIRONMENT, SG_INFO, "FGEnvironmentMgr::updateClosestAirport: selected:" << nearestAirport->ident()); + fgSetString("/sim/airport/closest-airport-id", + nearestAirport->ident().c_str()); + } + } + } FGEnvironment diff --git a/src/Environment/environment_mgr.hxx b/src/Environment/environment_mgr.hxx index de669fd36..dab6e6169 100644 --- a/src/Environment/environment_mgr.hxx +++ b/src/Environment/environment_mgr.hxx @@ -56,6 +56,7 @@ public: virtual void init (); virtual void reinit (); + virtual void shutdown (); virtual void bind (); virtual void unbind (); virtual void update (double dt); @@ -74,7 +75,8 @@ public: virtual FGEnvironment getEnvironment(const SGGeod& aPos) const; private: - + void updateClosestAirport(); + double get_cloud_layer_span_m (int index) const; void set_cloud_layer_span_m (int index, double span_m); double get_cloud_layer_elevation_ft (int index) const; @@ -98,7 +100,6 @@ private: SGPropertyNode_ptr _altitude_n; SGPropertyNode_ptr _longitude_n; SGPropertyNode_ptr _latitude_n; - double _positionTimeToLive; simgear::TiedPropertyList _tiedProperties; SGPropertyChangeListener * _3dCloudsEnableListener; };