current_view_orientation(SGQuatd::zeros()),
current_view_or_offset(SGQuatd::zeros())
{
+ globals->set_viewmgr(this);
}
// Destructor
-FGViewMgr::~FGViewMgr( void ) {
+FGViewMgr::~FGViewMgr( void )
+{
+ globals->set_viewmgr(NULL);
}
void
do_bind();
}
+void
+FGViewMgr::shutdown()
+{
+ if (!inited) {
+ return;
+ }
+
+ inited = false;
+}
+
void
FGViewMgr::reinit ()
{
+ int current_view_index = current;
+
// reset offsets and fov to configuration defaults
for (unsigned int i = 0; i < config_list.size(); i++) {
SGPropertyNode *n = config_list[i];
fgSetDouble("/sim/current-view/target-z-offset-m",
n->getDoubleValue("config/target-z-offset-m"));
}
- setView(0);
+ setView(current_view_index);
}
typedef double (FGViewMgr::*double_getter)() const;
_tiedProperties.Tie("view-number", this,
&FGViewMgr::getView, &FGViewMgr::setView);
- fgSetArchivable("/sim/current-view/view-number", false);
+ SGPropertyNode* view_number =
+ _tiedProperties.getRoot()->getNode("view-number");
+ view_number->setAttribute(SGPropertyNode::ARCHIVE, false);
+
+ // Keep view on reset/reinit
+ view_number->setAttribute(SGPropertyNode::PRESERVE, true);
_tiedProperties.Tie("axes/long", this,
(double_getter)0, &FGViewMgr::setViewAxisLong);
FGViewMgr::unbind ()
{
_tiedProperties.Untie();
+ config_list.clear();
+ view_number.clear();
}
void