//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: fpcamera_controller.hpp
//      Краткое описание: First person camera controller
//

#ifndef DSE_GS_CAMERA_FPCAMERA_CONTROLLER_HPP
#define DSE_GS_CAMERA_FPCAMERA_CONTROLLER_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Graphic System/Camera/camera.hpp>

namespace gs
{
	class FPCameraController
	{
	private:
		shared_ptr<gs::Camera> camera;
		float angx, angy;
		math::Vect3 position;

		Vect3 _calcDirection() const;
		Vect3 _calcUp() const;
	public:
		FPCameraController(const shared_ptr<gs::Camera>& cam, const bool is_watch_on_resize = true);
		~FPCameraController();

		const shared_ptr<gs::Camera>& getCamera() const;

		void move(const float amount);
		void rotateX(const float angle);
		void rotateY(const float angle);
		void strafe(const float amount);

		void setNewAspect(const unsigned int new_width, const unsigned int new_height);
	};
};

#endif