#pragma once

#include "MW4.hpp"

#include "WeaponMover.hpp"

namespace MechWarrior4
{	

	//##########################################################################
	//############################    FlameMover    ############################
	//##########################################################################

	//-------------------------------------------------------------------------
	// The following helper classes must always be typedef'd or overriden by an
	// inheritor
	//
	typedef WeaponMover__ClassData						FlameMover__ClassData;
	typedef WeaponMover__Message						FlameMover__Message;
	typedef WeaponMover__CreateMessage					FlameMover__CreateMessage;
	typedef WeaponMover__GameModel						FlameMover__GameModel;
	typedef WeaponMover__ExecutionStateEngine			FlameMover__ExecutionStateEngine;

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

	class FlameMover:
		public WeaponMover
	{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

		typedef WeaponMover BaseClass;

	//##########################################################################
	// Inheritance support
	//
	public:
		typedef FlameMover__ClassData						ClassData;
		typedef FlameMover__GameModel						GameModel;
		typedef FlameMover__Message							Message;
		typedef FlameMover__ExecutionStateEngine			ExecutionStateEngine;
		typedef FlameMover__CreateMessage					CreateMessage;

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

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

		~FlameMover();

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

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Simulation support
	//
	public:
		void
			PostCollision(const CollisionData *data);

// MSL 5.06 Armor Mode
		int
			m_ArmorMode;


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