globals->get_subsystem("flight")->unbind();
- // in case user has changed window size as
- // restoreInitialState() overwrites these
- int xsize = fgGetInt("/sim/startup/xsize");
- int ysize = fgGetInt("/sim/startup/ysize");
-
- // viewports also needs to be saved/restored as
- // restoreInitialState() overwrites these
- SGPropertyNode *guiNode = new SGPropertyNode;
- SGPropertyNode *cameraNode = new SGPropertyNode;
- SGPropertyNode *cameraGroupNode = fgGetNode("/sim/rendering/camera-group");
- copyProperties(cameraGroupNode->getChild("camera"), cameraNode);
- copyProperties(cameraGroupNode->getChild("gui"), guiNode);
-
globals->restoreInitialState();
// update our position based on current presets
fgInitPosition();
- // We don't know how to resize the window, so keep the last values
- // for xsize and ysize, and don't use the one set initially
- fgSetInt("/sim/startup/xsize", xsize);
- fgSetInt("/sim/startup/ysize", ysize);
-
- copyProperties(cameraNode, cameraGroupNode->getChild("camera"));
- copyProperties(guiNode, cameraGroupNode->getChild("gui"));
-
- delete guiNode;
- delete cameraNode;
-
SGTime *t = globals->get_time_params();
delete t;
t = fgInitTime();
fgReInitSubsystems();
globals->get_tile_mgr()->update(fgGetDouble("/environment/visibility-m"));
- globals->get_renderer()->resize(xsize, ysize);
fgSetBool("/sim/signals/reinit", false);
if (!freeze)
if (!copyProperties(props, initial_state))
SG_LOG(SG_GENERAL, SG_ALERT, "Error saving initial state");
+
+ // delete various properties from the initial state, since we want to
+ // preserve their values even if doing a restore
+
+ SGPropertyNode* sim = initial_state->getChild("sim");
+ sim->removeChild("presets");
+ SGPropertyNode* simStartup = sim->getChild("startup");
+ simStartup->removeChild("xsize");
+ simStartup->removeChild("ysize");
+
+ SGPropertyNode* cameraGroupNode = sim->getNode("rendering/camera-group");
+ if (cameraGroupNode) {
+ cameraGroupNode->removeChild("camera");
+ cameraGroupNode->removeChild("gui");
+ }
}
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 {
"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 *