#pragma once

#include "MW4.hpp"
#include "AI_DebugRenderer.hpp"
#include "MWDebugHelper.hpp"
#include <Adept\VideoRenderer.hpp>

namespace MechWarrior4 
{

	//##########################################################################
	//###########################    MWVideoRenderer    ########################
	//##########################################################################

	class MWVideoRenderer:
		public Adept::VideoRenderer
	{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

		static ClassData
			*DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Destruction, and Testing
	//
	public:
		~MWVideoRenderer();
		MWVideoRenderer(bool display_gui);

	

		void SetFadeLevel(Scalar level, const Stuff::RGBColor& color)
		{
			Verify(fadeLevel >= 0);
			Verify(fadeLevel <= 1);

			fadeLevel = level;
			fadeColor = color;
		};

		void SetCinemaScopeWidthRatio(Scalar ratio)
		{
			Verify(ratio > 0);
			cinemaScopeRatio = ratio;
		};

		void TurnOnCinemaScope(){drawCinemaScope = true;};
		void TurnOffCinemaScope(){drawCinemaScope = false;};

		void DrawCinemaScope(void);
		void DrawFade(void);

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Interest Manager support
	//
	public:
		void
			EntityIsInteresting(
				Entity *entity,
				bool render_me
			);

	protected:

		// 0 = nofade
		// 1 = fullfade
		Scalar fadeLevel;
		Stuff::RGBColor fadeColor;
		Scalar cinemaScopeRatio;
		bool drawCinemaScope;

		void
			ExecuteImplementation(Stuff::Time target_time);
		void
			SetCamera(CameraComponent *camera);

	public:
		static void SetDrawBlack();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// AI Debug Renderer
	//
	private:
		MechWarrior4::DebugHelper m_DebugHelper;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test functions
	//
	public:
		void
			TestInstance() const;
	};
}

