//===========================================================================//
// File:        jmover.hh                                                            //
// Project: MUNGA           Brick: Model Manager                             //
// Contents: Interface specification for moving entity class                 //
//---------------------------------------------------------------------------//
//   Date    Who  Modification                                               //
// --------  ---  ---------------------------------------------------------- //
// 01/21/95  JMA  Initial coding.                                            //
//---------------------------------------------------------------------------//
// Copyright (C) 1995, Virtual World Entertainment, Inc.                     //
// All Rights reserved worldwide                                             //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL               //
//===========================================================================//

#if !defined(TURRET_HPP)
#	define TURRET_HPP

#	if !defined(JMOVER_HPP)
#		include <jmover.hpp>
#	endif

	//##########################################################################
	//##################    Turret::ModelResource    ###########################
	//##########################################################################

	struct Turret__ModelResource:
		JointedMover::ModelResource
	{
		char turretJointName[32];
		char gunJointName[32];
		ResourceDescription::ResourceID
			explosionResourceID;
		Scalar
			rotationSpeedMin,
			rotationSpeedMax,
			elevationSpeedMin,
			elevationSpeedMax,
			rateSkillMin,
			rateSkillMax,
			rateAdjMin,
			rateAdjMax,
			accuracySkillMin,
			accuracySkillMax,
			accuracyAdjMin,
			accuracyAdjMax;
	};

#if 0
	//##########################################################################
	//##################    Turret::ModelResource    ###########################
	//##########################################################################

	class Turret__MakeMessage:
		JointedMover::MakeMessage
	{
	public:
		char teamName[32];
		char roleName[32];
	};
#endif

	//##########################################################################
	//#########################    Turret    ###################################
	//##########################################################################

	class Turret:
		public JointedMover
	{
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static Derivation ClassDerivations;
		static SharedData DefaultData;

	#if 0
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Message Support
	//
	private:
		static const HandlerEntry MessageHandlerEntries[];
	protected:
		static MessageHandlerSet MessageHandlers;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Attribute Support
	//
	public:
		enum{
			NextAttributeID
		};

	private:
		static const IndexEntry AttributePointers[];

	protected:
		static AttributeIndexSet        AttributeIndex;
	#endif

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Model Support
	//
	public:
   	typedef Turret__ModelResource ModelResource;
		typedef void
			(Turret::*Performance)(Scalar time_slice);

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

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Construction and Destruction
	//
	public:
		static Logical
			CreateMakeMessage(
				MemoryStream &creation_stream,
				NotationFile *model_file,
				const ResourceDirectories *directories
			);
		static ResourceDescription::ResourceID
			CreateModelResource(
				ResourceFile *resource_file,
				const char* model_name,
				NotationFile *model_file,
				const ResourceDirectories *directories,
				ModelResource* model = NULL
			);

		static Turret*
			Make(MakeMessage *creation_message);

		Turret(
			MakeMessage *creation_message,
			SharedData &virtual_data
		);
		~Turret();

		Logical
			TestInstance() const;
	};

#endif

