//===========================================================================//
// File:	ElevationMap.hpp                                                 //
// Project: MechWarrior 4								                     //
// Contents: Interface specification for moving entity class                 //
//---------------------------------------------------------------------------//
//   Date    Who  Modification                                               //
// --------  ---  ---------------------------------------------------------- //
//	12/21/98 JSE  Inital base class based off of Adept Entity
//---------------------------------------------------------------------------//
// Copyright (C) 1998, Fasa Interactive										 //
// All Rights reserved worldwide                                             //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL               //
//===========================================================================//

#if !defined(MW4_ELEVATIONMAP_HPP)
	#define MW4_ELEVATIONMAP_HPP

	#if !defined(MW4_HPP)
		#include "MW4.hpp"
	#endif

namespace MechWarrior4 {

	class ElevationMap;

	//##########################################################################
	//#####################    ElevationMap::ModelResource    ##################
	//##########################################################################

	class ElevationMap__GameModel:
		public Adept::Entity__GameModel
	{
	public:
	};

	//##########################################################################
	//############################    ElevationMap    ##########################
	//##########################################################################

	//-------------------------------------------------------------------------
	// The following helper classes must always be typedef'd or overriden by an
	// inheritor
	//
	typedef Adept::Entity__ClassData					ElevationMap__ClassData;
	typedef Adept::Entity__Message						ElevationMap__Message;
	typedef Adept::Entity__PostCollisionStateEngine		ElevationMap__PostCollisionStateEngine;
	typedef Adept::Entity__PreCollisionStateEngine		ElevationMap__PreCollisionStateEngine;

	//-----------------------  End of inheritance stuff ------------------------

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

	//##########################################################################
	// Inheritance support
	//
	public:
		typedef ElevationMap__ClassData						ClassData;
		typedef ElevationMap__GameModel						GameModel;
		typedef ElevationMap__Message							Message;
		typedef ElevationMap__PreCollisionStateEngine		PreCollisionStateEngine;
		typedef ElevationMap__PostCollisionStateEngine	PostCollisionStateEngine;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static ElevationMap* 
			Make(
				Stuff::MemoryStream *stream,
				CreationParameters *creation_parameters
			);
		void
			Save(Stuff::MemoryStream *stream);

		ElevationMap(
			ClassData *class_data,
			Stuff::MemoryStream *stream,
			CreationParameters *creation_parameters
		);

		void
			Reuse(
				Stuff::MemoryStream *stream,
				CreationParameters *creation_parameters
			);

	private:
		
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Tool-time Construction and Destruction Support
	//
	public:
		static ElevationMap* 
			ToolMake(
				FactoryRequestParameters *parameters,
				CreationParameters *creation_parameters
			);

		ElevationMap(
			ClassData *class_data,
			FactoryRequestParameters *parameters,
			CreationParameters *creation_parameters
		);

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

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Game Model Support
	//
	public:
		const GameModel*
			GetGameModel()
				{
					Check_Object(this);
					return Cast_Pointer(const GameModel*,gameModel);
				}

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Execution Support
	//
	public:
		void
			PreCollisionExecute(const Adept::SimulationTime& till);
		void
			PostCollisionExecute(const Adept::SimulationTime& till);

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

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	public:
		static bool
			CreateGameModel(GameModelParameters *parameters);
	};
}

#endif
