
////////////////////////////////////////////////////////////////////////////////
//
// Asura_ClientEntity_FMVSpeaker.cpp
// Author    : Jason Turner
// Copyright (C) 2009 Rebellion, All Rights Reserved.
//
////////////////////////////////////////////////////////////////////////////////

#include "Core/Asura.h"

#ifdef ASURA_USE_VIDEO_TO_TEXTURE_SYSTEM

#include "ChunkSystem/Asura_Chunk_Stream.h"
#include "Entity/Asura_Entity_Classification.h"
#include "Entity/FMVController/Asura_ClientEntity_FMVSpeaker.h"
#include "Entity/FMVController/Asura_FMVController_Messages.h"
#include "Network/Asura_Message.h"

#ifdef ASURA_TOOLS
#include "Tools_System.h"
#endif

Asura_Hashed_List< Asura_ClientEntity_FMVSpeaker > Asura_ClientEntity_FMVSpeaker::s_xList;

////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////

Asura_ClientEntity_FMVSpeaker::Asura_ClientEntity_FMVSpeaker(Asura_Guid uGuid)
: PARENT(uGuid)
, m_fInnerRange(0.0f)
, m_fOuterRange(0.0f)
{
	Classification = AsuraEntityClass_FMVSpeaker;

	AddToUpdateableClientList(this);
	s_xList.AddToList( this );
}

////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////

Asura_ClientEntity_FMVSpeaker::~Asura_ClientEntity_FMVSpeaker()
{
	s_xList.RemoveFromList( this );
}

////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////

void Asura_ClientEntity_FMVSpeaker::CreateFromChunkStream( Asura_Guid uGuid, Asura_Chunk_Stream &xStream )
{
	Asura_ClientEntity_FMVSpeaker* pxNew = new Asura_ClientEntity_FMVSpeaker(uGuid);
	if (pxNew)
	{
		pxNew->ReadFromChunkStream(xStream);
	}
}

////////////////////////////////////////////////////////////////////////////////
// ReadFromChunkStream
// Must cope with all versions up to CURRENT_CHUNK_VERSION (be backwards compatible)
////////////////////////////////////////////////////////////////////////////////

void Asura_ClientEntity_FMVSpeaker::ReadFromChunkStream( Asura_Chunk_Stream& xStream )
{
	// Version.
	int iVersion;
	xStream >> iVersion;

	// Parent data.
	PARENT::ReadFromChunkStream( xStream );    

	//
	// Read our data...
	//
	Asura_Assert(iVersion>=0 && iVersion <= CURRENT_CHUNK_VERSION, "Asura_ClientEntity_FMVSpeaker: Invalid chunk version");

	if ( iVersion >= 0 )
	{
		xStream >> m_fInnerRange;
		xStream >> m_fOuterRange;
	}
}

////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////

bool Asura_ClientEntity_FMVSpeaker::HandleMessage(const Asura_Message* pxMessage)
{
	if( IsDestroyed() ) { return true; } // ignore all further messages?

	if (pxMessage)
	{
		return PARENT::HandleMessage(pxMessage);
	}
	return false;
}

////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////

void Asura_ClientEntity_FMVSpeaker::OnDestruction()
{
	PARENT::OnDestruction();
}

#endif // ASURA_USE_VIDEO_TO_TEXTURE_SYSTEM
