X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fglobals.cxx;h=af4e693459bce2da14c45ce1e1ebd9342388142d;hb=38226af24ec01e8f0a20d7fd73ef838a69f6ef25;hp=c84870dde06fa6de97c18fbde13334cb2e5f8540;hpb=e8b0bb872abb49cfb25dbfcaecb84ab0f7d837db;p=flightgear.git diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index c84870dde..af4e69345 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -45,7 +46,6 @@ #include #include #include -#include #include #include #include @@ -57,7 +57,7 @@ #include "fg_props.hxx" #include "fg_io.hxx" - class AircraftResourceProvider : public simgear::ResourceProvider +class AircraftResourceProvider : public simgear::ResourceProvider { public: AircraftResourceProvider() : @@ -72,18 +72,35 @@ public: return SGPath(); // not an Aircraft path } + // test against the aircraft-dir property const char* aircraftDir = fgGetString("/sim/aircraft-dir"); string_list aircraftDirPieces(sgPathBranchSplit(aircraftDir)); - if (aircraftDirPieces.empty() || (aircraftDirPieces.back() != pieces[1])) { - return SGPath(); // current aircraft-dir does not match resource aircraft - } - - SGPath r(aircraftDir); - for (unsigned int i=2; iget_aircraft_paths()); + string_list::const_iterator it = dirs.begin(); + for (; it != dirs.end(); ++it) { + SGPath p(*it, res); + if (p.exists()) { + SG_LOG(SG_IO, SG_DEBUG, "found path:" << aResource << " in aircraft dir: " << *it); + return p; + } + } // of aircraft path iteration - return r.exists() ? r : SGPath(); + return SGPath(); // not found } }; @@ -106,8 +123,6 @@ FGGlobals::FGGlobals() : soundmgr( new SGSoundMgr ), sim_time_sec( 0.0 ), fg_root( "" ), - warp( 0 ), - warp_delta( 0 ), time_params( NULL ), ephem( NULL ), mag( NULL ), @@ -131,11 +146,10 @@ FGGlobals::FGGlobals() : dmelist( NULL ), tacanlist( NULL ), carrierlist( NULL ), - channellist( NULL ), - airwaynet( NULL ), - multiplayer_mgr( NULL ) + channellist( NULL ) { simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider()); + simgear::PropertyObjectBase::setDefaultRoot(props); } @@ -143,23 +157,24 @@ FGGlobals::FGGlobals() : FGGlobals::~FGGlobals() { delete renderer; + renderer = NULL; + // The AIModels manager performs a number of actions upon // Shutdown that implicitly assume that other subsystems // are still operational (Due to the dynamic allocation and // deallocation of AIModel objects. To ensure we can safely // shut down all subsystems, make sure we take down the // AIModels system first. - subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model"); - // FGInput (FGInputEvent) and FGDialog calls get_subsystem() in their destructors, - // which is not safe since some subsystem are already deleted but can be referred. - // So these subsystems must be deleted prior to deleting subsystem_mgr unless - // ~SGSubsystemGroup and SGSubsystemMgr::get_subsystem are changed not to refer to - // deleted subsystems. - subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("input"); - subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("gui"); + SGSubsystem* ai = subsystem_mgr->remove("ai_model"); + if (ai) { + ai->unbind(); + delete ai; + } + + subsystem_mgr->shutdown(); subsystem_mgr->unbind(); delete subsystem_mgr; - delete event_mgr; + delete time_params; delete mag; delete matlib; @@ -167,15 +182,11 @@ FGGlobals::~FGGlobals() delete current_panel; delete ATC_mgr; + controls->unbind(); delete controls; - delete viewmgr; -// delete commands; - delete acmodel; - delete model_mgr; delete channel_options_list; delete initial_waypoints; - delete tile_mgr; delete scenery; delete fontcache; @@ -186,8 +197,6 @@ FGGlobals::~FGGlobals() delete tacanlist; delete carrierlist; delete channellist; - delete airwaynet; - delete multiplayer_mgr; soundmgr->unbind(); delete soundmgr; @@ -276,9 +285,6 @@ void FGGlobals::append_aircraft_path(const std::string& path) unsigned int index = fg_aircraft_dirs.size(); fg_aircraft_dirs.push_back(path); - simgear::ResourceManager::instance()->addBasePath(path, - simgear::ResourceManager::PRIORITY_NORMAL); - // make aircraft dirs available to Nasal SGPropertyNode* sim = fgGetNode("/sim", true); sim->removeChild("fg-aircraft", index, false); @@ -396,4 +402,24 @@ FGGlobals::get_current_view () const return viewmgr->get_current_view(); } +long int FGGlobals::get_warp() const +{ + return fgGetInt("/sim/time/warp"); +} + +void FGGlobals::set_warp( long int w ) +{ + fgSetInt("/sim/time/warp", w); +} + +long int FGGlobals::get_warp_delta() const +{ + return fgGetInt("/sim/time/warp-delta"); +} + +void FGGlobals::set_warp_delta( long int d ) +{ + fgSetInt("/sim/time/warp-delta", d); +} + // end of globals.cxx