//===========================================================================//
// File:	LRMWeaponSubsystem.hpp													
//---------------------------------------------------------------------------//
//   Date    Who  Modification                                               //
// --------  ---  ---------------------------------------------------------- //
// 05/18/99	 DPB  Created File
//---------------------------------------------------------------------------//
// Copyright (C) 1998, Fasa Interactive										 //
// All Rights reserved worldwide                                             //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL               //
//===========================================================================//

#pragma once

#include "MW4.hpp"
#include "MissileWeapon.hpp"

namespace MechWarrior4
{
	
	//##########################################################################
	//###########################   LRMWeaponSubsystem    ######################
	//##########################################################################

	typedef MissileWeapon__GameModel					LRMWeaponSubsystem__GameModel;
	typedef MissileWeapon__CreateMessage				LRMWeaponSubsystem__CreateMessage;
	typedef MissileWeapon__ExecutionStateEngine			LRMWeaponSubsystem__ExecutionStateEngine;
	typedef MissileWeapon__Message						LRMWeaponSubsystem__Message;
	typedef MissileWeapon__ClassData					LRMWeaponSubsystem__ClassData;

	class LRMWeaponSubsystem:
		public MissileWeapon
	{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//##########################################################################
	// Inheritance support
	//
	public:
		typedef LRMWeaponSubsystem__ClassData						ClassData;
		typedef LRMWeaponSubsystem__GameModel						GameModel;
		typedef LRMWeaponSubsystem__Message							Message;
		typedef LRMWeaponSubsystem__ExecutionStateEngine			ExecutionStateEngine;
		typedef LRMWeaponSubsystem__CreateMessage					CreateMessage;


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

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

		~LRMWeaponSubsystem();

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

	
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Simulation Support
	//
	public:
		void
			CreateProjectile(Stuff::Time till);

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


