// Created 6/16/2002 by ASH - Advanced Gyro

#pragma once

#include "MW4.hpp"
#include "Subsystem.hpp"

namespace MechWarrior4
{
	class Mech;

	typedef Subsystem__ClassData							AdvancedGyro__ClassData;
	typedef	Subsystem__GameModel							AdvancedGyro__GameModel;
	typedef Subsystem__Message								AdvancedGyro__Message;
	typedef Subsystem__ExecutionStateEngine					AdvancedGyro__ExecutionStateEngine;
	typedef Subsystem__CreateMessage						AdvancedGyro__CreateMessage;

	//##########################################################################
	//########################   AdvancedGyro    #############################
	//##########################################################################

	class AdvancedGyro:
		public Subsystem
	{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

		typedef Subsystem BaseClass;

	//##########################################################################
	// Inheritance support
	//
	public:
		typedef AdvancedGyro__ClassData						ClassData;
		typedef AdvancedGyro__GameModel						GameModel;
		typedef AdvancedGyro__Message						Message;
		typedef AdvancedGyro__ExecutionStateEngine			ExecutionStateEngine;
		typedef AdvancedGyro__CreateMessage					CreateMessage;


	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Run-time Construction and Destruction Support
	//
	public:
		static AdvancedGyro* 
			Make(
				CreateMessage *message,
				ReplicatorID *base_id
			);
	protected:
		AdvancedGyro(
			ClassData *class_data,
			CreateMessage *message,
			ReplicatorID *base_id,
			ElementRenderer::Element *element
		);

		~AdvancedGyro();

		Mech *m_parentMech;

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


	
		void
			DestroySubsystem();
		bool
			ConnectSubsystem();
		bool
			DisconnectSubsystem();
		
		
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test Support
	//
	public:
		void
      		TestInstance() const;
	};
}


