X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fviewmgr.hxx;h=c296b71559b50e2018d585e3272c58d52f1ebcb3;hb=e78c56af7dfb6d8258ada8a5f58e39d7be633dc2;hp=6e9b76298a9e02bee181dfaabec203af0951bc43;hpb=45d64bef95586a46ce8e0421706fa1a32ca6769a;p=flightgear.git diff --git a/src/Main/viewmgr.hxx b/src/Main/viewmgr.hxx index 6e9b76298..c296b7155 100644 --- a/src/Main/viewmgr.hxx +++ b/src/Main/viewmgr.hxx @@ -2,7 +2,7 @@ // // Written by Curtis Olson, started October 2000. // -// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 2000 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -24,29 +24,20 @@ #ifndef _VIEWMGR_HXX #define _VIEWMGR_HXX - -#ifndef __cplusplus -# error This library requires C++ -#endif - - -#include - -#ifdef HAVE_CONFIG_H -# include -#endif - #include +#include -#include "fgfs.hxx" -#include "viewer_lookat.hxx" -#include "viewer_rph.hxx" - -SG_USING_STD(vector); +#include +#include +#include +// forward decls +class FGViewer; +class SGSoundMgr; +typedef SGSharedPtr FGViewerPtr; // Define a structure containing view information -class FGViewMgr : public FGSubsystem +class FGViewMgr : public SGSubsystem { public: @@ -60,89 +51,112 @@ public: virtual void init (); virtual void bind (); virtual void unbind (); - virtual void update (int dt); + virtual void update (double dt); + virtual void reinit (); // 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() { - ++current; - if ( current >= (int)views.size() ) { - current = 0; - } - return views[current]; - } - inline FGViewer *prev_view() { - --current; - if ( current < 0 ) { - current = views.size() - 1; - } - 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); - } + 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; void do_axes (); - double getViewOffset_deg () const; - void setViewOffset_deg (double offset); - double getGoalViewOffset_deg () const; - void setGoalViewOffset_deg (double offset); - double getViewTilt_deg () const; - void setViewTilt_deg (double tilt); - double getGoalViewTilt_deg () const; - void setGoalViewTilt_deg (double tilt); - double getPilotXOffset_m () const; - void setPilotXOffset_m (double x); - double getPilotYOffset_m () const; - void setPilotYOffset_m (double y); - double getPilotZOffset_m () const; - void setPilotZOffset_m (double z); + // callbacks in manager to access viewer methods + double getViewHeadingOffset_deg () const; + void setViewHeadingOffset_deg (double offset); + double getViewGoalHeadingOffset_deg () const; + void setViewGoalHeadingOffset_deg (double offset); + double getViewPitchOffset_deg () const; + void setViewPitchOffset_deg (double tilt); + double getGoalViewPitchOffset_deg () const; + void setGoalViewRollOffset_deg (double tilt); + double getViewRollOffset_deg () const; + void setViewRollOffset_deg (double tilt); + double getGoalViewRollOffset_deg () const; + void setGoalViewPitchOffset_deg (double tilt); + double getViewXOffset_m () const; + void setViewXOffset_m (double x); + double getViewYOffset_m () const; + void setViewYOffset_m (double y); + double getViewZOffset_m () const; + void setViewZOffset_m (double z); + double getViewTargetXOffset_m () const; + void setViewTargetXOffset_m (double x); + double getViewTargetYOffset_m () const; + void setViewTargetYOffset_m (double y); + double getViewTargetZOffset_m () const; + void setViewTargetZOffset_m (double z); double getFOV_deg () const; void setFOV_deg (double fov); + double getARM_deg () const; // Aspect Ratio Multiplier + void setARM_deg (double fov); + double getNear_m () const; + void setNear_m (double near_m); void setViewAxisLong (double axis); void setViewAxisLat (double axis); - - typedef vector < FGViewer * > viewer_list; + 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 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