#ifndef _CAMERABASE_H
#define _CAMERABASE_H

#include "Engine.h"

namespace Engine {

class Module;

/** \brief Controls from where the View is looking to
 */
class CameraBase : public Module { 
	public:
		/** updates the projection and modelview matrices for the camera */
		void Update ();
		float GetFOVY () {
			return mFOVY;
		}

		/** sets the point where the camera is looking to */
		void SetPointOfIntrest (float poi_x, float poi_y, float poi_z) {
			mPointOfIntrest[0] = poi_x;
			mPointOfIntrest[1] = poi_y;
			mPointOfIntrest[2] = poi_z;
		}
		/** sets the position where the camera is located */
		void SetEye (float eye_x, float eye_y, float eye_z) {
			mEye[0] = eye_x;
			mEye[1] = eye_y;
			mEye[2] = eye_z;
		}
		/** returns the position of the eye */
		void GetEye (float *eye_out) {
			eye_out[0] = mEye[0];
			eye_out[1] = mEye[1];
			eye_out[2] = mEye[2];
		}

		/** sets the up direction of the camera */
		void SetUp (float up_x, float up_y, float up_z) {
			mUp[0] = up_x;
			mUp[1] = up_y;
			mUp[2] = up_z;
		}

	protected:
		/** \brief Initializes the system */
		int OnInit (int argc, char* argv[]);
		/** \brief Destroys the system (must be called!) */
		void OnDestroy (); 

		float mPointOfIntrest[3];
		float mEye[3];
		float mUp[3];

		float mFOVY;
};

}

#endif // _CAMERABASE_H
