#pragma once

#include "MW4.hpp"

#include <Adept\Entity.hpp>

namespace MechWarrior4
{

	typedef Adept::Entity__CreateMessage				VOEntity__CreateMessage;
	typedef Adept::Entity__GameModel					VOEntity__GameModel;
	typedef Adept::Entity__ExecutionStateEngine			VOEntity__ExecutionStateEngine;

	//##########################################################################
	//##########################    VOEntity    ################################
	//##########################################################################

	class VOEntity:
		public Adept::Entity
	{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		typedef VOEntity__CreateMessage				CreateMessage;
		typedef VOEntity__GameModel					GameModel;
		typedef VOEntity__ExecutionStateEngine		ExecutionStateEngine;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static VOEntity* 
			Make(
				CreateMessage *message,
				ReplicatorID *base_id
			);

		~VOEntity();

	protected:
		VOEntity(
			ClassData *class_data,
			CreateMessage *message,
			ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Attribute Support
	//
	public:
		enum{
			VoiceOverAttributeID = Entity::NextAttributeID,
			NextAttributeID
		};

		int
			voiceOverAttribute;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Simmulation support
	//
	public:
		void PlayVoiceOver();
		void StopVoiceOver();
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data support
	//
	public:
		static ClassData
			*DefaultData;

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

}


