#ifndef _dmsCamera_h_
#define _dmsCamera_h_

#include <GL/gl.h>
#include <dms/Vector3.h>

namespace dms
{

class Camera
    {
    public:
        Camera(void);
        virtual ~Camera(void);
        virtual void applyProjection(void) const = 0;
        void apply(void) const;
        
        void turn(GLfloat angle);
        void pitch(GLfloat angle);
        void moveForward(GLfloat distance);
        void moveLeft(GLfloat distance);
        void moveUp(GLfloat distance);
        void move(const Vector3& delta);
        Vector3 forward(void) const;
        Vector3 left(void) const;
        Vector3 up(void) const;
        
        const Vector3& position(void) const;
        GLfloat xRotation(void) const;
        GLfloat yRotation(void) const;
        void setPosition(GLfloat x,GLfloat y,GLfloat z);
        void setPosition(const Vector3& pos);
        void setXRotation(GLfloat angle);
        void setYRotation(GLfloat angle);
    
    private:
        Vector3 pos_;
        GLfloat xRot_, yRot_;
    };

}

#endif
