/* client/camera.h This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_CAMERA_H__ #define __INCLUDED_CAMERA_H__ #include "gl/osiriongl.h" namespace client { /// camera functions /** The functions in this namespace performs the transformations for the camera eye location. The camera always looks at (0,0,0) */ class Camera { public: Camera(); ~Camera(); /// enum indicating the camera mode enum Mode {Free, Track}; /// draw the OpenGL camera transformation void draw(float elapsed); /// rotate the camera left void rotate_left(); /// rotate the camera right void rotate_right(); /// rotate the camera up void rotate_up(); /// rotate the camera down void rotate_down(); /// switch to next camera mode void nextmode(); /// camera target /** The location the camera is looking at */ gl::Vector3f target; /// target yaw, angle in XZ plane, positive is looking left float yaw_target; /// target pitch, angle in XZ plane, positive is looking left float pitch_target; /// distance from the camera to the target float distance; /// current camera mode Mode mode; protected: /// current yaw, angle in XZ plane, positive is looking left float yaw_current; /// current pitch, angle in XY, positive is looking up float pitch_current; /// default tracking pitch float pitch_track; /// default offset increment float offset_inc; }; } // namespace client #endif // __INCLUDED_CAMERA_H__