
///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_ServerEntity_TeleportDestination.cpp
// Author : Andy Tate
// Date   : 2-Mar-2007
//
// Copyright (C) 2007 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////

#include "Core/Asura.h"

// This file's header...
#include "Entity/Spawners/Asura_ServerEntity_TeleportDestination.h"

// Asura independent header-files...
#include "ChunkSystem/Asura_Chunk_Stream.h"
#include "Entity/Asura_Entity_Classification.h"

#if defined(ASURA_TOOLS)
// Tools header-files...
#include "EntityTemplate/Tools_EntityTemplate_System.h"
#endif	// defined(ASURA_TOOLS)


////////////////////////////////////////////////////////////////////////////////
// Static variable declarations...
////////////////////////////////////////////////////////////////////////////////

Asura_Hashed_List<Asura_ServerEntity_TeleportDestination>	Asura_ServerEntity_TeleportDestination::s_xList;


////////////////////////////////////////////////////////////////////////////////
// Private functions...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Protected functions...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ServerEntity_TeleportDestination::Asura_ServerEntity_TeleportDestination
// Author       : Andy Tate
// Date         : 2-Mar-2007
////////////////////////////////////////////////////////////////////////////////

Asura_ServerEntity_TeleportDestination::Asura_ServerEntity_TeleportDestination(const Asura_Guid uGuid)
: PARENT(uGuid)
{
	Classification	= AsuraEntityClass_TeleportDestination;

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

/// End of function 'Asura_ServerEntity_TeleportDestination::Asura_ServerEntity_TeleportDestination'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ServerEntity_TeleportDestination::~Asura_ServerEntity_TeleportDestination
// Author       : Andy Tate
// Date         : 2-Mar-2007
////////////////////////////////////////////////////////////////////////////////

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

/// End of function 'Asura_ServerEntity_TeleportDestination::~Asura_ServerEntity_TeleportDestination'. ///



////////////////////////////////////////////////////////////////////////////////
// Public functions...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ServerEntity_TeleportDestination::Create
// Author       : Andy Tate
// Date         : 2-Mar-2007
////////////////////////////////////////////////////////////////////////////////

Asura_ServerEntity_TeleportDestination* Asura_ServerEntity_TeleportDestination::Create(const Asura_Guid uGuid)
{
	return(new Asura_ServerEntity_TeleportDestination(uGuid));
}

/// End of function 'Asura_ServerEntity_TeleportDestination::Create'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ServerEntity_TeleportDestination::ReadFromChunkStream
// Author       : Andy Tate
// Date         : 2-Mar-2007
////////////////////////////////////////////////////////////////////////////////

void Asura_ServerEntity_TeleportDestination::ReadFromChunkStream(Asura_Chunk_Stream& xStream)
{
	u_int	uVersion;

	// Read the data...
	xStream	>> uVersion;

	if(uVersion > uTELEPORTDEST_CHUNK_VERSION)
	{
		Asura_Assert(false, "Unexpected chunk version found for teleport destination.");
	}
	if (uVersion >= 1)
	{
		PARENT::ReadFromChunkStream(xStream);
	}
	xStream >> m_xPosition;
	xStream >> m_xOrientation;

	SetNeverUpdates(true);
}

/// End of function 'Asura_ServerEntity_TeleportDestination::ReadFromChunkStream'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ServerEntity_TeleportDestination::WriteToChunkStream
// Author       : Andy Tate
// Date         : 2-Mar-2007
////////////////////////////////////////////////////////////////////////////////

void Asura_ServerEntity_TeleportDestination::WriteToChunkStream(Asura_Chunk_Stream& xStream) const
{
	// Write the data...
	xStream << uTELEPORTDEST_CHUNK_VERSION;

	PARENT::WriteToChunkStream(xStream);

	xStream << m_xPosition;
	xStream << m_xOrientation;
}

/// End of function 'Asura_ServerEntity_TeleportDestination::WriteToChunkStream'. ///



#if defined(ASURA_TOOLS)

////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ServerEntity_TeleportDestination::ApplyChangesForTemplateInstance
// Author       : Andy Tate
// Date         : 7-Mar-2007
////////////////////////////////////////////////////////////////////////////////

void Asura_ServerEntity_TeleportDestination::ApplyChangesForTemplateInstance(Tools_EntityTemplateInstance* pxInstance)
{
	// Call the base-function...
	PARENT::ApplyChangesForTemplateInstance(pxInstance);

	// Transform the positional-data...
	m_xOrientation	= pxInstance->TransformQuat(m_xOrientation);
	m_xPosition		= pxInstance->TransformPosition(m_xPosition);
}

/// End of function 'Asura_ServerEntity_TeleportDestination::ApplyChangesForTemplateInstance'. ///

#endif	// defined(ASURA_TOOLS)


/// End of file. ///
