X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fglobals.cxx;h=20c1c20768bc55181bcba5c3a3a2023107817098;hb=b3e969726249e772da4c9d1aa6eb212e6472aed3;hp=9de7fdb4382d6f8c8b878aa3d1032273eddc3e67;hpb=d839e84f9955b6d8055b35d3e3b625016a81d896;p=flightgear.git diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 9de7fdb43..20c1c2076 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -21,9 +21,15 @@ // $Id$ +#include +#include +#include + #include "globals.hxx" -#include "fg_props.hxx" +#include "viewmgr.hxx" +#include "fg_props.hxx" +#include "fg_io.hxx" //////////////////////////////////////////////////////////////////////// @@ -36,12 +42,46 @@ FGGlobals *globals; // Constructor FGGlobals::FGGlobals() : - freeze( false ), + 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 ), - 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 ) { } @@ -49,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; } @@ -61,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"); } @@ -70,15 +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"); - } + 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; } +FGViewer * +FGGlobals::get_current_view () const +{ + return viewmgr->get_current_view(); +} // end of globals.cxx