]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/viewmgr.cxx
Merge branch 'jt/runway' into next
[flightgear.git] / src / Main / viewmgr.cxx
index c4ab2c0c24f4f401d815aadccf858a896f8808df..cb2dfa0531045664b6a76f52b82fba9d2236d072 100644 (file)
@@ -40,6 +40,7 @@
 FGViewMgr::FGViewMgr( void ) :
   axis_long(0),
   axis_lat(0),
+  view_number(fgGetNode("/sim/current-view/view-number", true)),
   config_list(fgGetNode("/sim", true)->getChildren("view")),
   current(0)
 {
@@ -211,6 +212,10 @@ FGViewMgr::bind ()
        &FGViewMgr::getNear_m, &FGViewMgr::setNear_m);
   fgSetArchivable("/sim/current-view/ground-level-nearplane-m");
 
+  SGPropertyNode *n = fgGetNode("/sim/current-view", true);
+  n->tie("viewer-x-m", SGRawValuePointer<double>(&abs_viewer_position[0]));
+  n->tie("viewer-y-m", SGRawValuePointer<double>(&abs_viewer_position[1]));
+  n->tie("viewer-z-m", SGRawValuePointer<double>(&abs_viewer_position[2]));
 }
 
 void
@@ -228,6 +233,9 @@ FGViewMgr::unbind ()
   fgUntie("/sim/current-view/axes/long");
   fgUntie("/sim/current-view/axes/lat");
   fgUntie("/sim/current-view/ground-level-nearplane-m");
+  fgUntie("/sim/current-view/viewer-x-m");
+  fgUntie("/sim/current-view/viewer-y-m");
+  fgUntie("/sim/current-view/viewer-z-m");
 }
 
 void
@@ -286,12 +294,15 @@ FGViewMgr::update (double dt)
   // Update the current view
   do_axes();
   view->update(dt);
+  abs_viewer_position = loop_view->getViewPosition();
 }
 
 void
 FGViewMgr::copyToCurrent()
 {
     SGPropertyNode *n = config_list[current];
+    fgSetString("/sim/current-view/name", n->getStringValue("name"));
+    fgSetString("/sim/current-view/type", n->getStringValue("type"));
 
     // copy certain view config data for default values
     fgSetDouble("/sim/current-view/config/heading-offset-deg",
@@ -561,20 +572,20 @@ FGViewMgr::setView (int newview)
   // negative numbers -> set view with node index -newview
   if (newview < 0) {
     for (int i = 0; i < (int)config_list.size(); i++) {
-        int index = -config_list[i]->getIndex();
-        if (index == newview)
-            newview = i;
+      int index = -config_list[i]->getIndex();
+      if (index == newview)
+        newview = i;
     }
     if (newview < 0)
-        return;
+      return;
   }
 
   // if newview number too low wrap to last view...
   if (newview < 0)
-    newview = (int)views.size() -1;
+    newview = (int)views.size() - 1;
 
   // if newview number to high wrap to zero...
-  if (newview > ((int)views.size() -1))
+  if (newview >= (int)views.size())
     newview = 0;
 
   // set new view