//============================================================================//
// File:	mislanch.hh                                                          //
// Project: BattleTech																			//
// Contents: Weapon Which Lanches a missile                                   //
//			Derived From Projectile Weapon                                       //
//----------------------------------------------------------------------------//
//   Date    Who  Modification                                                //
// --------  ---  ------------------------------------------------------------//
// 04/13/95  JM  Initial coding.                                              //
//----------------------------------------------------------------------------//
// Copyright (C) 1995, Virtual World Entertainment, Inc. All Rights reserved  //
//                   	PROPRIETARY AND CONFIDENTIAL                          //
//============================================================================//

#if !defined (MISLANCH_HPP)
#	define	MISLANCH_HPP

#	if !defined(PROJWEAP_HPP)
#		include <projweap.hpp>
#	endif


class Missile;

//#################   MissileLauncher  SubsystemResource    ###################
	struct MissileLauncher__SubsystemResource:
		public ProjectileWeapon::SubsystemResource
	{
		int missileCount;

		Vector3D
      	muzzleVelocity;
	};


//###########################################################################
//#################     CLASS -- MissileLauncher    ##########################
//###########################################################################

	class MissileLauncher:
		public ProjectileWeapon
	{
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Messaging Support
	//

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data Support
	//
	public:
		static Derivation ClassDerivations;
		static SharedData DefaultData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Attribute Support
	//

   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Damage Support
	//
	public:
		void TakeDamage(Damage &damage);
		void DeathReset(Logical full_reset);

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Model Support
	//
	public:

		typedef void
			(MissileLauncher::*Performance)(Scalar time_slice);

		void
			SetPerformance(Performance performance)
			{
				Check(this);
				activePerformance = (Simulation::Performance)performance;
			}


	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Construction and Destruction
	//
	public:

		typedef	MissileLauncher__SubsystemResource SubsystemResource;
		MissileLauncher(
			Mech	*owner,
			int subsystem_ID,
			SubsystemResource	*subsystem_resource,
         SharedData &default_data = DefaultData
		);
		~MissileLauncher();

		Logical
			TestInstance() const;

		static Logical
			CreateStreamedSubsystem(
				ResourceFile					*resource_file,
				NotationFile					*model_file,
				const char						*model_name,
				const char						*subsystem_name,
				SubsystemResource *subsystem_resource,
				NotationFile					*subsystem_file,
				const ResourceDirectories	*directories,
				int								passes =1
		);


// local stuff
	protected:

		void
			FireWeapon();

      int missileCount;  // how many individual missiles get fired at once

	};
#endif
