]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/globals.cxx
Linux needs stdarg.h for va_args
[flightgear.git] / src / Main / globals.cxx
index 45d70af524b6c0f0dd1ee87698a7877011418632..767dcb5a242728a7b21f89f5fb5afca24e887b7a 100644 (file)
@@ -85,7 +85,6 @@ public:
         }
         
         if (r.exists()) {
-          SG_LOG(SG_IO, SG_DEBUG, "found path:" << aResource << " via /sim/aircraft-dir: " << r.str());
           return r;
         }
     }
@@ -97,7 +96,6 @@ public:
     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
@@ -187,13 +185,17 @@ FGGlobals::~FGGlobals()
     // deallocation of AIModel objects. To ensure we can safely
     // shut down all subsystems, make sure we take down the 
     // AIModels system first.
-    SGSubsystem* ai = subsystem_mgr->remove("ai-model");
+    SGSubsystem* ai = globals->get_subsystem("ai-model");
     if (ai) {
         ai->unbind();
-        delete ai;
+        subsystem_mgr->remove("ai-model");
     }
-    SGSubsystem* sound = subsystem_mgr->remove("sound");
-
+    
+    subsystem_mgr->remove("fx");
+    subsystem_mgr->remove("sound");
+    subsystem_mgr->remove("tile-manager");
+    subsystem_mgr->remove("model-manager");
+    
     subsystem_mgr->shutdown();
     subsystem_mgr->unbind();
     delete subsystem_mgr;
@@ -213,7 +215,6 @@ FGGlobals::~FGGlobals()
     delete fontcache;
 
     delete channellist;
-    delete sound;
 
     delete locale;
     locale = NULL;
@@ -252,6 +253,54 @@ void FGGlobals::set_fg_home (const std::string &home) {
     fg_home = tmp.realpath();
 }
 
+PathList FGGlobals::get_data_paths() const
+{
+    PathList r(additional_data_paths);
+    r.push_back(SGPath(fg_root));
+    return r;
+}
+
+PathList FGGlobals::get_data_paths(const std::string& suffix) const
+{
+    PathList r;
+    BOOST_FOREACH(SGPath p, get_data_paths()) {
+        p.append(suffix);
+        if (p.exists()) {
+            r.push_back(p);
+        }
+    }
+
+    return r;
+}
+
+void FGGlobals::append_data_path(const SGPath& path)
+{
+    if (!path.exists()) {
+        SG_LOG(SG_GENERAL, SG_WARN, "adding non-existant data path:" << path);
+    }
+    
+    additional_data_paths.push_back(path);
+}
+
+SGPath FGGlobals::find_data_dir(const std::string& pathSuffix) const
+{
+    BOOST_FOREACH(SGPath p, additional_data_paths) {
+        p.append(pathSuffix);
+        if (p.exists()) {
+            return p;
+        }
+    }
+    
+    SGPath rootPath(fg_root);
+    rootPath.append(pathSuffix);
+    if (rootPath.exists()) {
+        return rootPath;
+    }
+    
+    SG_LOG(SG_GENERAL, SG_WARN, "dir not found in any data path:" << pathSuffix);
+    return SGPath();
+}
+
 void FGGlobals::append_fg_scenery (const std::string &paths)
 {
 //    fg_scenery.clear();