X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fviewmgr.cxx;h=9555291897a5fd17b11d602de7cbc5b7ff4a4cf2;hb=38226af24ec01e8f0a20d7fd73ef838a69f6ef25;hp=270c579e03b82dcfd89457b8a8dd9b472bead2d5;hpb=b61f8fba3353b8b77dd1866e230922ccb78daf71;p=flightgear.git diff --git a/src/Main/viewmgr.cxx b/src/Main/viewmgr.cxx index 270c579e0..955529189 100644 --- a/src/Main/viewmgr.cxx +++ b/src/Main/viewmgr.cxx @@ -39,11 +39,15 @@ FGViewMgr::FGViewMgr( void ) : axis_long(0), axis_lat(0), + inited(false), view_number(fgGetNode("/sim/current-view/view-number", true)), config_list(fgGetNode("/sim", true)->getChildren("view")), - current(0) + abs_viewer_position(SGVec3d::zeros()), + current(0), + current_view_orientation(SGQuatd::zeros()), + current_view_or_offset(SGQuatd::zeros()), + smgr(globals->get_soundmgr()) { - smgr = globals->get_soundmgr(); } // Destructor @@ -53,6 +57,13 @@ FGViewMgr::~FGViewMgr( void ) { void FGViewMgr::init () { + if (inited) { + SG_LOG(SG_GENERAL, SG_WARN, "duplicate init of view manager"); + return; + } + + inited = true; + double aspect_ratio_multiplier = fgGetDouble("/sim/current-view/aspect-ratio-multiplier"); @@ -118,6 +129,7 @@ FGViewMgr::init () } copyToCurrent(); + do_bind(); } void @@ -160,7 +172,14 @@ FGViewMgr::reinit () typedef double (FGViewMgr::*double_getter)() const; void -FGViewMgr::bind () +FGViewMgr::bind() +{ + // view-manager code was designed to init before bind, so + // this is a no-op; init() calls the real bind() impl below +} + +void +FGViewMgr::do_bind() { // these are bound to the current view properties fgTie("/sim/current-view/heading-offset-deg", this, @@ -190,7 +209,7 @@ FGViewMgr::bind () fgTie("/sim/current-view/view-number", this, &FGViewMgr::getView, &FGViewMgr::setView); - fgSetArchivable("/sim/current-view/view-number", FALSE); + fgSetArchivable("/sim/current-view/view-number", false); fgTie("/sim/current-view/axes/long", this, (double_getter)0, &FGViewMgr::setViewAxisLong); @@ -352,6 +371,10 @@ FGViewMgr::update (double dt) void FGViewMgr::copyToCurrent() { + if (!inited) { + return; + } + SGPropertyNode *n = config_list[current]; fgSetString("/sim/current-view/name", n->getStringValue("name")); fgSetString("/sim/current-view/type", n->getStringValue("type")); @@ -719,15 +742,9 @@ FGViewMgr::setView (int newview) newview = 0; // set new view - set_view(newview); + current = newview; // copy in view data copyToCurrent(); - - // Copy the fdm's position into the SGLocation which is shared with - // some views ... - globals->get_aircraft_model()->update(0); - // Do the update ... - update(0); } @@ -755,7 +772,7 @@ FGViewMgr::getARM_deg () const void FGViewMgr::setARM_deg (double aspect_ratio_multiplier) -{ +{ FGViewer * view = get_current_view(); if (view != 0) view->set_aspect_ratio_multiplier(aspect_ratio_multiplier);