//===========================================================================//
// File:	MODL.hpp											
//---------------------------------------------------------------------------//
//   Date    Who  Modification                                               //
// --------  ---  ---------------------------------------------------------- //
// 05/23/01  JPS	Class for the MODL
//---------------------------------------------------------------------------//
// Copyright (C) 2001, Microsoft
// All Rights reserved worldwide                                             //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL               //
//===========================================================================//

#pragma once

#include "MW4.hpp"
#include "Tank.hpp"

namespace MechWarrior4
{	
	//##########################################################################
	//############################    MODL    ###############################
	//##	The MODL is a large Tank that will have 3 internal damage zones
	//##One for the Gun itself, which can be blown off
	//##One for the main turret which will hold the destruction internal damage object
	//##One for the treads in the cannon.  When the treads internal zone is destroyed the MODL will stop
	//##In addition, the MODL will have a custom HUD that displayed the damage zones 
	//##
	//##########################################################################

	class MODL:
		public Tank
	{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

		typedef Tank BaseClass;


	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static MODL*
			Make(
				CreateMessage *message,
				ReplicatorID *base_id
			);
	
		void
			SaveInstanceText(Stuff::Page *page);

	protected:
		MODL(
			ClassData *class_data,
			CreateMessage *message,
			ReplicatorID *base_id,
			ElementRenderer::Element *element
		);
		
		void
			Respawn(Adept::Entity::CreateMessage *message);
		void
			CommonCreation(CreateMessage *message);

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

		~MODL();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data support
	//
	public:
		static ClassData
			*DefaultData;
	//~~~~~~~~~~~~~~~
	//Support for stopping the MODL by blowing out its treads
	public:
		virtual void ComputeForwardSpeed(Stuff::Scalar time_slice);
		virtual void EngineDead (void);
		//use the eject call to fire the main "laser"
		virtual void Eject();
		void PostCollisionExecute (Stuff::Time time);
		void InitializeDamageArray();
		int	damageArray[11];
	private:
		bool m_enginesDead;
		bool m_fireCannon;
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Game Model Support
	//
	public:
		const GameModel*
			GetGameModel()
				{
					Check_Object(this);
					return Cast_Pointer(const GameModel*,gameModelResource.GetPointer());
				}



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

}
