#pragma once
#include "baseinterface.h"

namespace M3D
{
class CameraParams;
class Coords;
class Rotation;
/**
 * Предоставляет доступ к камерам.
 * @author Denis A. Biryukov
 */
class CameraInterface : public BaseInterface
{
	public:
		/**
		 * Получение текущих координат камеры
		 * @return текущие координаты камеры
		 */
		const Coords& get_location() const ;
		/**
		 * Получение текущей ориентации камеры в пространстве 
		 * @return ориентация камеры в пространстве
		 */
		const Rotation& get_rotation() const;
		
		/**
		 * Получение параметров камеры
		 * @return текущие параметры камеры
		 */
		const CameraParams& get_camera_params() const;

		/**
		 * Смена текущего положения камеры 
		 * @param location новое положение камеры
		 */
		void set_location( const Coords &location );
		/**
		 * Смена текущей ориентации камеры в пространстве. Вращение по оси z определяет вращение раструба камеры
		 * @param rotation новая ориентация камеры в пространстве
		 */
		void set_rotation( const Rotation &rotation );
		/**
		 * Установка параметров камеры. Производит пересчитывание Projection матрицы
		 */
		void set_camera_params(CameraParams& params);

		~CameraInterface() {};
		CameraInterface( int camera_id, EngineInterface *intf ) : BaseInterface( camera_id, intf ) {};
		CameraInterface(): BaseInterface( -1, 0 ) {};
};

}

