00001 #ifndef __CameraManipulator__
00002 #define __CameraManipulator__
00003 
00004 #include <osg/Vec2d>
00005 #include <osg/Vec3d>
00006 #include <osg/Vec4d>
00007 #include <osg/Matrixd>
00008 #include <osg/Camera>
00009 #include "ICameraManipulator.h"
00010 #include "Terrain.h"
00011 #include "SceneManager.h"
00012 
00013 class CameraManipulator : public ICameraManipulator {
00014 public:
00015     CameraManipulator(osg::Camera* camera);
00016 
00017     double getSpeed();
00018     void setSpeed(double speed);
00019 
00020     osg::Camera* getCamera();
00021     void setCamera(osg::Camera* camera);
00022 
00023 
00024     void update(double elapsedTime);
00025 
00026 
00027         void addTranslation(int direction);
00028         void addTranslation(int direction, double amount);
00029 
00030         void dragOnAxis(int direction, double amount);
00031         void addOrientationAngle(int direction, double angle);
00032         void addRotationAngle(int axis, double angle);
00033 
00034         void resetMovement();
00035         void setMounted(bool value);
00036 
00037 
00038 protected:
00039         Terrain&      _terrain;
00040     SceneManager& _sceneManager;
00041 
00042     osg::Camera* _camera;
00043 
00044     osg::Vec4d   _forwardBase, 
00045                              _leftBase,
00046                              _upBase;
00047 
00048     osg::Vec4d   _forward, 
00049                              _left,
00050                              _up;
00051 
00052         osg::Vec4d       _xAxis,
00053                              _yAxis,
00054                              _zAxis;
00055 
00056         osg::Vec4d   _eyePoint;
00057 
00058         osg::Vec4d       _direction;
00059 
00060     osg::Vec3d   _position;
00061 
00062         bool _isMounted;
00063 
00064         volatile double _pitchAngle,     _yawAngle;
00065         volatile double _translateX,     _translateY,           _translateZ;
00066         volatile double _translateXaxis, _translateYaxis,       _translateZaxis;
00067 
00068         volatile double  _speed;
00069 };
00070 
00071 #endif