X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fglobals.cxx;h=1bcbbea678ea03b71e8fb53953e7ff8f04ae0b62;hb=988de9dbca8bc046fb0f1df4fef5bfe07355c3a6;hp=6a9b3f88cd92ca2355d5e79080a6d642a0eb7300;hpb=da6568ad50774e241d8157006a0b49baee2d8537;p=flightgear.git diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 6a9b3f88c..1bcbbea67 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -16,7 +16,7 @@ // // 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$ @@ -27,6 +27,29 @@ #include #include #include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "globals.hxx" #include "renderer.hxx" @@ -51,28 +74,24 @@ FGGlobals::FGGlobals() : event_mgr( new SGEventMgr ), sim_time_sec( 0.0 ), fg_root( "" ), -#if defined(FX) && defined(XMESA) - fullscreen( true ), -#endif warp( 0 ), warp_delta( 0 ), time_params( NULL ), ephem( NULL ), mag( NULL ), + matlib( 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 ), + commands( SGCommandMgr::instance() ), acmodel( NULL ), model_mgr( NULL ), channel_options_list( NULL ), @@ -80,14 +99,16 @@ FGGlobals::FGGlobals() : 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 ) + carrierlist( NULL ), + channellist( NULL ), + airwaynet( NULL ), + multiplayer_mgr( NULL ) { } @@ -95,31 +116,72 @@ FGGlobals::FGGlobals() : // Destructor FGGlobals::~FGGlobals() { - delete soundmgr; + delete renderer; +// 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"); delete subsystem_mgr; delete event_mgr; - delete initial_state; - delete props; - delete commands; - delete io; - delete renderer; + delete time_params; + delete ephem; + delete mag; + delete matlib; + delete route_mgr; + delete current_panel; + delete soundmgr; + delete airports; + + delete ATC_mgr; + delete AI_mgr; + delete controls; + delete viewmgr; + +// delete commands; + delete acmodel; + delete model_mgr; + delete channel_options_list; delete initial_waypoints; + delete tile_mgr; + delete scenery; + delete io; + delete fontcache; + + delete navlist; + delete loclist; + delete gslist; + delete dmelist; + delete tacanlist; + delete carrierlist; + delete channellist; + delete airwaynet; + delete multiplayer_mgr; } // 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"; + SG_LOG(SG_GENERAL, SG_WARN, "Warning: changing bad FG_ROOT/--fg-root to '" + << fg_root << '\''); } - fgSetString("/sim/fg-root", fg_root.c_str()); + // remove /sim/fg-root before writing to prevent hijacking + SGPropertyNode *n = fgGetNode("/sim", true); + n->removeChild("fg-root", 0, false); + n = n->getChild("fg-root", 0, true); + n->setStringValue(fg_root.c_str()); + n->setAttribute(SGPropertyNode::WRITE, false); } void FGGlobals::set_fg_scenery (const string &scenery) { @@ -206,7 +268,6 @@ FGGlobals::get_event_mgr () const void FGGlobals::saveInitialState () { - delete initial_state; initial_state = new SGPropertyNode(); if (!copyProperties(props, initial_state))