#include "AdeptHeaders.hpp"

#include "ComponentHeaders.hpp"
#include "EarComponent.hpp"
#include "Interface.hpp"
#include "AudioComponentWeb.hpp"
#include "AudioRenderer.hpp"


//
// Shared Data Support
//

Component::ClassData*
	EarComponent::DefaultData = NULL;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//	InitializeClass
//
void
	EarComponent::InitializeClass()
{
	Verify(!DefaultData);
	DefaultData =
		new ClassData(
			EarComponentClassID,
			"Adept::EarComponent",
			Component::DefaultData,
			0,
			NULL
		);
	Register_Object(DefaultData);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	EarComponent::TerminateClass()
{
	Unregister_Object(DefaultData);
	delete DefaultData;
	DefaultData = NULL;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// EarComponent
//
EarComponent::EarComponent(
	ClassData *class_data,
	MemoryStream *stream,
	RendererComponentWeb *owning_web,
	Interface *intface
):
	Component(
		class_data,
		stream,
		owning_web
	)
{
	//
	//------------------------------------------
	// Attach the ear to the renderer's scene
	//------------------------------------------
	//
	AudioComponentWeb* web = Cast_Object(AudioComponentWeb*,GetComponentWeb());
	AudioRenderer* renderer = web->GetRenderer();

	renderer->SetInterface(intface);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EarComponent*
	EarComponent::Make(
		MemoryStream *stream,
		RendererComponentWeb *owning_web
	)
{
	EarComponent *ear =
		new EarComponent(
			DefaultData,
			stream,
			owning_web,
			Cast_Object(Interface*, owning_web->GetEntity())
		);
	return ear;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
EarComponent::~EarComponent()
{
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	EarComponent::Execute()
{
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	EarComponent::TestInstance()
{
	Verify(IsDerivedFrom(DefaultData));
}
