X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FMain%2Fglobals.cxx;h=33098d807ee09619d331933e3bc437f0ee78a381;hb=4fe615fff546df5e381f7fc9ddae92dd3dc36251;hp=97777dcb27ef5a46983506df99492fa13e40f57d;hpb=079890e9554c276e261bc4b51cc658d0859112a7;p=flightgear.git diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 97777dcb2..33098d807 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -2,7 +2,7 @@ // // Written by Curtis Olson, started July 2000. // -// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 2000 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -16,16 +16,22 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ +#ifdef HAVE_CONFIG_H +# include +#endif #include #include #include +#include + #include "globals.hxx" +#include "renderer.hxx" #include "viewmgr.hxx" #include "fg_props.hxx" @@ -42,11 +48,11 @@ FGGlobals *globals; // Constructor FGGlobals::FGGlobals() : + renderer( new FGRenderer ), subsystem_mgr( new SGSubsystemMgr ), event_mgr( new SGEventMgr ), sim_time_sec( 0.0 ), fg_root( "" ), - fg_scenery( "" ), #if defined(FX) && defined(XMESA) fullscreen( true ), #endif @@ -67,20 +73,23 @@ FGGlobals::FGGlobals() : props( new SGPropertyNode ), initial_state( NULL ), locale( NULL ), - commands( new SGCommandMgr ), + commands( SGCommandMgr::instance() ), model_lib( NULL ), acmodel( NULL ), model_mgr( NULL ), channel_options_list( NULL ), - initial_waypoints(0), + initial_waypoints( NULL ), scenery( NULL ), tile_mgr( NULL ), io( new FGIO ), + fontcache ( new FGFontCache ), navlist( NULL ), loclist( NULL ), gslist( NULL ), dmelist( NULL ), mkrlist( NULL ), + tacanlist( NULL ), + carrierlist( NULL ), fixlist( NULL ) { } @@ -94,13 +103,10 @@ FGGlobals::~FGGlobals() delete event_mgr; delete initial_state; delete props; - delete commands; delete io; - - // make sure only to delete the initial waypoints list if it acually - // still exists. - if (initial_waypoints) - delete initial_waypoints; + delete fontcache; + delete renderer; + delete initial_waypoints; } @@ -114,42 +120,62 @@ void FGGlobals::set_fg_root (const string &root) { tmp.append( "version" ); if ( ulFileExists( tmp.c_str() ) ) { fg_root += "/data"; - } + } + + fgSetString("/sim/fg-root", fg_root.c_str()); } void FGGlobals::set_fg_scenery (const string &scenery) { - - if (scenery.empty()) - return; - - SGPath pt( scenery ), po( scenery ); - pt.append("Terrain"); - po.append("Objects"); - -cout << "pt: " << pt.str() << endl; -cout << "po: " << po.str() << endl; - ulDir *td = ulOpenDir(pt.c_str()); - ulDir *od = ulOpenDir(po.c_str()); - - if (td == NULL) { - if (od == NULL) { - fg_scenery = scenery; - } else { - fg_scenery = po.str(); - ulCloseDir(od); - } - } else { - if (od != NULL) { - pt.add(po.str()); - ulCloseDir(od); + SGPath s; + if (scenery.empty()) { + s.set( fg_root ); + s.append( "Scenery" ); + } else + s.set( scenery ); + + string_list path_list = sgPathSplit( s.str() ); + fg_scenery.clear(); + + for (unsigned i = 0; i < path_list.size(); i++) { + + ulDir *d = ulOpenDir( path_list[i].c_str() ); + if (d == NULL) + continue; + ulCloseDir( d ); + + SGPath pt( path_list[i] ), po( path_list[i] ); + pt.append("Terrain"); + po.append("Objects"); + + ulDir *td = ulOpenDir( pt.c_str() ); + ulDir *od = ulOpenDir( po.c_str() ); + + if (td == NULL && od == NULL) + fg_scenery.push_back( path_list[i] ); + else { + if (td != NULL) { + fg_scenery.push_back( pt.str() ); + ulCloseDir( td ); + } + if (od != NULL) { + fg_scenery.push_back( po.str() ); + ulCloseDir( od ); + } } - fg_scenery = pt.str(); - ulCloseDir(td); + // insert a marker for FGTileEntry::load(), so that + // FG_SCENERY=A:B becomes list ["A/Terrain", "A/Objects", "", + // "B/Terrain", "B/Objects", ""] + fg_scenery.push_back(""); } -cout << "fg_scenery: " << fg_scenery << endl; } +FGRenderer * +FGGlobals::get_renderer () const +{ + return renderer; +} + SGSubsystemMgr * FGGlobals::get_subsystem_mgr () const {