-
- fgSplashProgress("loading aircraft");
-
- } else if ( idle_state == 5 ) {
- idle_state++;
-
- fgSplashProgress("initializing sky elements");
-
- } else if ( idle_state == 6 ) {
- idle_state++;
- // Initialize the sky
-
- Ephemeris* eph = new Ephemeris;
- globals->add_subsystem("ephemeris", eph);
- eph->init(); // FIXME - remove this once SGSky code below is also a subsystem
- eph->bind();
-
- // TODO: move to environment mgr
- thesky = new SGSky;
- SGPath texture_path(globals->get_fg_root());
- texture_path.append("Textures");
- texture_path.append("Sky");
- for (int i = 0; i < FGEnvironmentMgr::MAX_CLOUD_LAYERS; i++) {
- SGCloudLayer * layer = new SGCloudLayer(texture_path.str());
- thesky->add_cloud_layer(layer);
- }
-
- SGPath sky_tex_path( globals->get_fg_root() );
- sky_tex_path.append( "Textures" );
- sky_tex_path.append( "Sky" );
- thesky->texture_path( sky_tex_path.str() );
-
- // The sun and moon diameters are scaled down numbers of the
- // actual diameters. This was needed to fit both the sun and the
- // moon within the distance to the far clip plane.
- // Moon diameter: 3,476 kilometers
- // Sun diameter: 1,390,000 kilometers
- thesky->build( 80000.0, 80000.0,
- 463.3, 361.8,
- *globals->get_ephem(),
- fgGetNode("/environment", true));
-
- // Initialize MagVar model
- SGMagVar *magvar = new SGMagVar();
- globals->set_mag( magvar );
-
-
- // kludge to initialize mag compass
- // (should only be done for in-flight
- // startup)
- // update magvar model
- globals->get_mag()->update( fgGetDouble("/position/longitude-deg")
- * SGD_DEGREES_TO_RADIANS,
- fgGetDouble("/position/latitude-deg")
- * SGD_DEGREES_TO_RADIANS,
- fgGetDouble("/position/altitude-ft")
- * SG_FEET_TO_METER,
- globals->get_time_params()->getJD() );
- double var = globals->get_mag()->get_magvar() * SGD_RADIANS_TO_DEGREES;
- fgSetDouble("/instrumentation/heading-indicator/offset-deg", -var);
- fgSetDouble("/instrumentation/heading-indicator-fg/offset-deg", -var);
-
-
- // airport = new ssgBranch;
- // airport->setName( "Airport Lighting" );
- // lighting->addKid( airport );
-
- fgSplashProgress("initializing subsystems");
-
- } else if ( idle_state == 7 ) {
+
+ fgSplashProgress("creating-subsystems");
+ } else if (( idle_state == 7 ) || (idle_state == 2007)) {
+ bool isReset = (idle_state == 2007);
+ idle_state = 8; // from the next state on, reset & startup are identical
+ SGTimeStamp st;
+ st.stamp();
+ fgCreateSubsystems(isReset);
+ SG_LOG(SG_GENERAL, SG_INFO, "Creating subsystems took:" << st.elapsedMSec());
+ fgSplashProgress("binding-subsystems");
+
+ } else if ( idle_state == 8 ) {