X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fviewmgr.hxx;h=c296b71559b50e2018d585e3272c58d52f1ebcb3;hb=e78c56af7dfb6d8258ada8a5f58e39d7be633dc2;hp=1823cbbf45b557959446e88d5ceff6cc32d24a96;hpb=fd492a297aee6d40c58f71b1889847b6668af3fd;p=flightgear.git diff --git a/src/Main/viewmgr.hxx b/src/Main/viewmgr.hxx index 1823cbbf4..c296b7155 100644 --- a/src/Main/viewmgr.hxx +++ b/src/Main/viewmgr.hxx @@ -25,19 +25,16 @@ #define _VIEWMGR_HXX #include +#include #include #include +#include -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "fg_props.hxx" -#include "viewer.hxx" - -SG_USING_STD(vector); - +// forward decls +class FGViewer; +class SGSoundMgr; +typedef SGSharedPtr FGViewerPtr; // Define a structure containing view information class FGViewMgr : public SGSubsystem @@ -60,53 +57,28 @@ public: // getters inline int size() const { return views.size(); } inline int get_current() const { return current; } - inline FGViewer *get_current_view() { - if ( current < (int)views.size() ) { - return views[current]; - } else { - return NULL; - } - } - inline const FGViewer *get_current_view() const { - if ( current < (int)views.size() ) { - return views[current]; - } else { - return NULL; - } - } - inline FGViewer *get_view( int i ) { - if ( i < 0 ) { i = 0; } - if ( i >= (int)views.size() ) { i = views.size() - 1; } - return views[i]; - } - inline const FGViewer *get_view( int i ) const { - if ( i < 0 ) { i = 0; } - if ( i >= (int)views.size() ) { i = views.size() - 1; } - return views[i]; - } - inline FGViewer *next_view() { - setView((current+1 < (int)views.size()) ? (current + 1) : 0); - view_number->fireValueChanged(); - return views[current]; - } - inline FGViewer *prev_view() { - setView((0 < current) ? (current - 1) : (views.size() - 1)); - view_number->fireValueChanged(); - return views[current]; - } - + + FGViewer *get_current_view(); + const FGViewer *get_current_view() const; + + FGViewer *get_view( int i ); + const FGViewer *get_view( int i ) const; + + FGViewer *next_view(); + FGViewer *prev_view(); + // setters - inline void clear() { views.clear(); } + void clear(); inline void set_view( const int v ) { current = v; } - inline void add_view( FGViewer * v ) { - views.push_back(v); - v->init(); - } + void add_view( FGViewer * v ); + // copies current offset settings to current-view path... void copyToCurrent (); private: + list tied_props; + double axis_long; double axis_lat; @@ -148,14 +120,43 @@ private: int getView () const; void setView (int newview); +// quaternion accessors, for debugging: + double getCurrentViewOrientation_w() const; + double getCurrentViewOrientation_x() const; + double getCurrentViewOrientation_y() const; + double getCurrentViewOrientation_z() const; + double getCurrentViewOrOffset_w() const; + double getCurrentViewOrOffset_x() const; + double getCurrentViewOrOffset_y() const; + double getCurrentViewOrOffset_z() const; + double getCurrentViewFrame_w() const; + double getCurrentViewFrame_x() const; + double getCurrentViewFrame_y() const; + double getCurrentViewFrame_z() const; + + bool stationary () const; + SGPropertyNode_ptr view_number; vector config_list; - typedef vector > viewer_list; + typedef std::vector viewer_list; viewer_list views; + SGVec3d abs_viewer_position; int current; + SGQuatd current_view_orientation, current_view_or_offset; + + SGSoundMgr *smgr; }; +// This takes the conventional aviation XYZ body system +// i.e. x=forward, y=starboard, z=bottom +// which is widely used in FGFS +// and rotates it into the OpenGL camera system +// i.e. Xprime=starboard, Yprime=top, Zprime=aft. +inline const SGQuatd fsb2sta() +{ + return SGQuatd(-0.5, -0.5, 0.5, 0.5); +} #endif // _VIEWMGR_HXX