#pragma once

#include "MW4.hpp"
#include "Vehicle.hpp"

namespace MechWarrior4
{

	//##########################################################################
	//###########################   ObservationVehicle    ################################
	//##########################################################################

	typedef Vehicle__ClassData					ObservationVehicle__ClassData;
	typedef Vehicle__Message						ObservationVehicle__Message;
	typedef Vehicle__CreateMessage				ObservationVehicle__CreateMessage;
	typedef Vehicle__GameModel					ObservationVehicle__GameModel;
	typedef Vehicle__ExecutionStateEngine		ObservationVehicle__ExecutionStateEngine;
	

	class ObservationVehicle : public Vehicle
	{
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance support
	//
	public:
		typedef ObservationVehicle__ClassData							ClassData;
		typedef ObservationVehicle__GameModel							GameModel;
		typedef ObservationVehicle__Message								Message;
		typedef ObservationVehicle__ExecutionStateEngine	ExecutionStateEngine;
		typedef ObservationVehicle__CreateMessage					CreateMessage;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Static Methods
	//
	public:
		static void InitializeClass();
		static void TerminateClass();

		typedef Vehicle BaseClass;

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

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

		~ObservationVehicle();

		void Reuse(const CreateMessage *message,ReplicatorID *base_id);



	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static ClassData *DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Simulation Support
	//
	protected:
	

		void TurnOn(void);
	public:
		
	
	
		int GetTableArray()
				{Check_Object(this); return NameTable::ObservationVehicleArray;}

		void PreCollisionExecute(Stuff::Time till);

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


