X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fglobals.cxx;h=20c1c20768bc55181bcba5c3a3a2023107817098;hb=b3e969726249e772da4c9d1aa6eb212e6472aed3;hp=15c898998eacbebf1553a975152fc5b481fa1b9e;hpb=d0eaafb1e1c1260a4a2549d63d439dc9407162da;p=flightgear.git diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 15c898998..20c1c2076 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -21,13 +21,15 @@ // $Id$ -#include - -#include +#include +#include +#include #include "globals.hxx" -#include "fg_props.hxx" +#include "viewmgr.hxx" +#include "fg_props.hxx" +#include "fg_io.hxx" //////////////////////////////////////////////////////////////////////// @@ -40,16 +42,46 @@ FGGlobals *globals; // Constructor FGGlobals::FGGlobals() : - elapsed_time_ms(0L), + 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 warp( 0 ), warp_delta( 0 ), - logger(0), - props(new SGPropertyNode), - initial_state(0), - commands(new SGCommandMgr) + time_params( NULL ), + ephem( NULL ), + mag( NULL ), + route_mgr( NULL ), + current_panel( NULL ), + soundmgr( NULL ), + airports( NULL ), + ATC_mgr( NULL ), + ATC_display( NULL ), + AI_mgr( NULL ), + controls( NULL ), + viewmgr( NULL ), + props( new SGPropertyNode ), + initial_state( NULL ), + locale( NULL ), + commands( new SGCommandMgr ), + model_lib( NULL ), + acmodel( NULL ), + model_mgr( NULL ), + channel_options_list( NULL ), + initial_waypoints(0), + scenery( NULL ), + tile_mgr( NULL ), + io( new FGIO ), + navlist( NULL ), + loclist( NULL ), + gslist( NULL ), + dmelist( NULL ), + mkrlist( NULL ), + fixlist( NULL ) { } @@ -57,9 +89,61 @@ FGGlobals::FGGlobals() : // Destructor FGGlobals::~FGGlobals() { - delete initial_state; - delete props; - delete commands; + delete soundmgr; + delete subsystem_mgr; + 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; +} + + +// set the fg_root path +void FGGlobals::set_fg_root (const string &root) { + fg_root = root; + + // append /data to root if it exists + SGPath tmp( fg_root ); + tmp.append( "data" ); + tmp.append( "version" ); + if ( ulFileExists( tmp.c_str() ) ) { + fg_root += "/data"; + } +} + + +SGSubsystemMgr * +FGGlobals::get_subsystem_mgr () const +{ + return subsystem_mgr; +} + +SGSubsystem * +FGGlobals::get_subsystem (const char * name) +{ + return subsystem_mgr->get_subsystem(name); +} + +void +FGGlobals::add_subsystem (const char * name, + SGSubsystem * subsystem, + SGSubsystemMgr::GroupType type, + double min_time_sec) +{ + subsystem_mgr->add(name, subsystem, type, min_time_sec); +} + + +SGEventMgr * +FGGlobals::get_event_mgr () const +{ + return event_mgr; } @@ -69,6 +153,7 @@ FGGlobals::saveInitialState () { delete initial_state; initial_state = new SGPropertyNode(); + if (!copyProperties(props, initial_state)) SG_LOG(SG_GENERAL, SG_ALERT, "Error saving initial state"); } @@ -78,27 +163,40 @@ FGGlobals::saveInitialState () void FGGlobals::restoreInitialState () { - if (initial_state == 0) { - SG_LOG(SG_GENERAL, SG_ALERT, "No initial state available to restore!!!"); - } else if (!copyProperties(initial_state, props)) { - SG_LOG(SG_GENERAL, SG_INFO, - "Some errors restoring initial state (probably just read-only props)"); - } else { - SG_LOG(SG_GENERAL, SG_INFO, "Initial state restored successfully"); - } -} - -const FGEnvironment * -FGGlobals::get_environment () const -{ - return environment_mgr->getEnvironment(); + if ( initial_state == 0 ) { + SG_LOG(SG_GENERAL, SG_ALERT, + "No initial state available to restore!!!"); + return; + } + + SGPropertyNode *currentPresets = new SGPropertyNode; + SGPropertyNode *targetNode = fgGetNode( "/sim/presets" ); + + // stash the /sim/presets tree + if ( !copyProperties(targetNode, currentPresets) ) { + SG_LOG( SG_GENERAL, SG_ALERT, "Failed to save /sim/presets subtree" ); + } + + if ( copyProperties(initial_state, props) ) { + SG_LOG( SG_GENERAL, SG_INFO, "Initial state restored successfully" ); + } else { + SG_LOG( SG_GENERAL, SG_INFO, + "Some errors restoring initial state (read-only props?)" ); + } + + // recover the /sim/presets tree + if ( !copyProperties(currentPresets, targetNode) ) { + SG_LOG( SG_GENERAL, SG_ALERT, + "Failed to restore /sim/presets subtree" ); + } + + delete currentPresets; } -const FGEnvironment * -FGGlobals::get_environment (double lat, double lon, double alt) const +FGViewer * +FGGlobals::get_current_view () const { - return environment_mgr->getEnvironment(lat, lon, alt); + return viewmgr->get_current_view(); } - // end of globals.cxx