//#pragma once

#ifndef BETTYCOMPONENT_H
#define BETTYCOMPONENT_H

//#include "Adept.hpp"
//#include "ComponentHeaders.hpp"
//#include "SoundComponent.hpp"
#include "AudioFXComponent.hpp"

namespace Adept {

	class Interface;
	class Replicator;

	//#########################################################################
	//#########################  BettyComponent   #############################
	//#########################################################################

	class BettyComponent:
		public SoundComponent
	{
	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Constructor/Destructor
	//
	protected:
		BettyComponent(
			ClassData *class_data,
			Stuff::MemoryStream *stream,
			RendererComponentWeb *owning_web,
			Entity *entity
		);

	public:
		static BettyComponent*
			Make(
				MemoryStream *stream,
				RendererComponentWeb *owning_web,
				Replicator *replicator
			);

		~BettyComponent();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Virtual data
	//
	public:
		static ClassData
			*DefaultData;


	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Message support
	//
	void
		ChannelChanged(Channel *channel);

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Component support
	//
	protected:
	
	int
		bettyPriority;

	public:
		int
			Start();
		int
			GetBettyPriority() {return bettyPriority;}
		void
			RendererExecute() {}
		
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test support
	//
	public:
		void
			TestInstance();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Tool-related Functions
	//
	public:
		static ClassData*
			CreateFactoryRequest(FactoryRequestParameters *parameters,Entity::ClassData *class_data);
	};

}


#endif