X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fviewmgr.hxx;h=9cccf8c5f555e27c119eabe883121e7780275e94;hb=f6e80608797fa9ab9d44444eb7b031e412b83067;hp=9969fae5f1b14e7f7fbf9ee4b7460017521cd382;hpb=59583890262247d73f48f4f1af21303ea41fda47;p=flightgear.git diff --git a/src/Main/viewmgr.hxx b/src/Main/viewmgr.hxx index 9969fae5f..9cccf8c5f 100644 --- a/src/Main/viewmgr.hxx +++ b/src/Main/viewmgr.hxx @@ -38,21 +38,15 @@ #include -#include "viewer_lookat.hxx" -#include "viewer_rph.hxx" +#include "fgfs.hxx" +#include "viewer.hxx" SG_USING_STD(vector); // Define a structure containing view information -class FGViewMgr { - -private: - - typedef vector < FGViewer * > viewer_list; - viewer_list views; - - int current; +class FGViewMgr : public FGSubsystem +{ public: @@ -62,6 +56,11 @@ public: // Destructor ~FGViewMgr( void ); + virtual void init (); + virtual void bind (); + virtual void unbind (); + virtual void update (double dt); + // getters inline int size() const { return views.size(); } inline int get_current() const { return current; } @@ -72,16 +71,29 @@ public: 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; } + copyToCurrent(); return views[current]; } inline FGViewer *prev_view() { @@ -97,7 +109,44 @@ public: inline void set_view( const int v ) { current = v; } inline void add_view( FGViewer * v ) { views.push_back(v); + v->init(); } + // copies current offset settings to current-view path... + void copyToCurrent (); + +private: + + 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); + double getFOV_deg () const; + void setFOV_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; + viewer_list views; + + int current; + };