X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fviewmgr.cxx;h=20db9476ba6b0660cd263a75cd2f629e594e5ae7;hb=446b200edc9590ec1e0231e64084905f2bc8a5b9;hp=17610d6b4fc7cd306368dd30d4eae8653aa9bda0;hpb=43c47f3823faa0829aada79d64a26c2960d2a1d2;p=flightgear.git diff --git a/src/Main/viewmgr.cxx b/src/Main/viewmgr.cxx index 17610d6b4..20db9476b 100644 --- a/src/Main/viewmgr.cxx +++ b/src/Main/viewmgr.cxx @@ -25,16 +25,15 @@ # include "config.h" #endif -#include // strcmp +#include "viewmgr.hxx" -#include +#include // strcmp #include - +#include #include - -#include "viewmgr.hxx" - +#include
+#include
// Constructor FGViewMgr::FGViewMgr( void ) : @@ -44,6 +43,7 @@ FGViewMgr::FGViewMgr( void ) : config_list(fgGetNode("/sim", true)->getChildren("view")), current(0) { + smgr = (SGSoundMgr *)globals->get_subsystem("soundmgr"); } // Destructor @@ -295,6 +295,12 @@ FGViewMgr::update (double dt) do_axes(); view->update(dt); abs_viewer_position = loop_view->getViewPosition(); + + // update audio listener values + // set the viewer posotion in Cartesian coordinates in meters + smgr->set_position(abs_viewer_position); + smgr->set_orientation(loop_view->getViewOrientation()); + smgr->set_velocity(SGVec3f(0,0,0)); // TODO: in meters per second } void @@ -343,7 +349,71 @@ FGViewMgr::copyToCurrent() get_current_view()->getInternal()); } +void FGViewMgr::clear() +{ + views.clear(); +} + +FGViewer* +FGViewMgr::get_current_view() +{ + if ( current < (int)views.size() ) { + return views[current]; + } else { + return NULL; + } +} + +const FGViewer* +FGViewMgr::get_current_view() const +{ + if ( current < (int)views.size() ) { + return views[current]; + } else { + return NULL; + } +} + + +FGViewer* +FGViewMgr::get_view( int i ) +{ + if ( i < 0 ) { i = 0; } + if ( i >= (int)views.size() ) { i = views.size() - 1; } + return views[i]; +} + +const FGViewer* +FGViewMgr::get_view( int i ) const +{ + if ( i < 0 ) { i = 0; } + if ( i >= (int)views.size() ) { i = views.size() - 1; } + return views[i]; +} + +FGViewer* +FGViewMgr::next_view() +{ + setView((current+1 < (int)views.size()) ? (current + 1) : 0); + view_number->fireValueChanged(); + return views[current]; +} + +FGViewer* +FGViewMgr::prev_view() +{ + setView((0 < current) ? (current - 1) : (views.size() - 1)); + view_number->fireValueChanged(); + return views[current]; +} +void +FGViewMgr::add_view( FGViewer * v ) +{ + views.push_back(v); + v->init(); +} + double FGViewMgr::getViewHeadingOffset_deg () const {