#pragma once

#include "CmPrerequisites.h"
#include "CmComponent.h"
#include "CmInputHandler.h"
#include "CmMath.h"

namespace CamelotEngine
{
	class DebugCamera : public Component
	{
	private:
		float mCurrentSpeed;

		bool mGoingForward;
		bool mGoingBack;
		bool mGoingLeft;
		bool mGoingRight;
		bool mFastMove;
		bool mCameraRotating;

		Degree mPitch;
		Degree mYaw;

		HCamera mCamera;

		void keyDown(CamelotEngine::KeyCode keyCode);
		void keyUp(CamelotEngine::KeyCode keyCode);

		void mouseDown(const CamelotEngine::MouseEvent& event, CamelotEngine::MouseButton buttonID);
		void mouseUp(const CamelotEngine::MouseEvent& event, CamelotEngine::MouseButton buttonID);

		static const float START_SPEED;
		static const float TOP_SPEED;
		static const float ACCELERATION;
		static const float FAST_MODE_MULTIPLIER;
		static const float ROTATION_SPEED; // Degrees/second

		/************************************************************************/
		/* 						COMPONENT OVERRIDES                      		*/
		/************************************************************************/
	protected:
		friend class SceneObject;

		/** Standard constructor.
        */
		DebugCamera(const HSceneObject& parent);

	public:
		virtual void update();
	};
}