X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FMain%2Fviewmgr.hxx;h=8a42629b0a79b9240b8025c7e7875b37f5d863be;hb=4fe615fff546df5e381f7fc9ddae92dd3dc36251;hp=74027004a3215cacf0567aeec960428183378f69;hpb=1b206c6202026381599d98f43c597e6b1130e132;p=flightgear.git diff --git a/src/Main/viewmgr.hxx b/src/Main/viewmgr.hxx index 74027004a..8a42629b0 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,35 +24,24 @@ #ifndef _VIEWMGR_HXX #define _VIEWMGR_HXX - -#ifndef __cplusplus -# error This library requires C++ -#endif - +#include #include +#include #ifdef HAVE_CONFIG_H # include #endif -#include - -#include "viewer_lookat.hxx" -#include "viewer_rph.hxx" +#include "fg_props.hxx" +#include "viewer.hxx" -FG_USING_STD(vector); +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 SGSubsystem +{ public: @@ -62,6 +51,12 @@ public: // Destructor ~FGViewMgr( void ); + virtual void init (); + virtual void bind (); + virtual void unbind (); + virtual void update (double dt); + virtual void reinit (); + // getters inline int size() const { return views.size(); } inline int get_current() const { return current; } @@ -72,23 +67,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; - } + setView((current+1 < (int)views.size()) ? (current + 1) : 0); return views[current]; } inline FGViewer *prev_view() { - --current; - if ( current < 0 ) { - current = views.size() - 1; - } + setView((0 < current) ? (current - 1) : (views.size() - 1)); return views[current]; } @@ -97,7 +98,60 @@ 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 (); + + // 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); + int getView () const; + void setView (int newview); + + vector config_list; + typedef vector viewer_list; + viewer_list views; + + int current; + };