//
// Asura_ClientEntity_EffectVolume.cpp
//
// Created by Emil Popovic - 15/12/2008
// 
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//

// core
#include "Core/Asura.h"

// header
#include "Entity/Triggers/EffectVolume/Asura_ClientEntity_EffectVolume.h"

// asura
#include "Entity/Asura_Entity_Classification.h"
#include "Network/Asura_Message.h"



Asura_Hashed_List<Asura_ClientEntity_EffectVolume> Asura_ClientEntity_EffectVolume::s_xList;



Asura_ClientEntity_EffectVolume::Asura_ClientEntity_EffectVolume() 
: PARENT()
{
	Classification = AsuraEntityClass_EffectVolume;

	s_xList.AddToList(this);
}

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


Asura_ClientEntity_EffectVolume* Asura_ClientEntity_EffectVolume::Create(const Asura_Message* pxMessage)
{

	Asura_Assert(pxMessage, "Null message pointer");
	if (!pxMessage) return NULL;;

#ifdef ASURA_ALLOW_INACTIVE_CLIENT_ENTITIES
	if ((pxMessage->GetMsgID() != ASURA_MSG_CLIENTCREATE) && (pxMessage->GetMsgID() != ASURA_MSG_CLIENTCREATEINACTIVE))
#else //#ifdef ASURA_ALLOW_INACTIVE_CLIENT_ENTITIES
	if (pxMessage->GetMsgID() != ASURA_MSG_CLIENTCREATE)
#endif //#else //#ifdef ASURA_ALLOW_INACTIVE_CLIENT_ENTITIES
	{
		Asura_Assert(0, "Wrong msg ID!");
		return NULL;
	}

	if (!pxMessage->GetData())
	{
		Asura_Assert(0, "Null message data pointer");
		return NULL;
	}

	Asura_ClientEntity_EffectVolume* pxClient = new Asura_ClientEntity_EffectVolume();
	if (pxClient)
	{
		pxClient->HandleMessage(pxMessage);
	}

	return pxClient;
}


bool Asura_ClientEntity_EffectVolume::HandleMessage(const Asura_Message* pxMessage)
{
	Asura_Assert(pxMessage, "Null message");
	if (!pxMessage) return false;

	switch (pxMessage->GetMsgID())
	{
	case ASURA_MSG_CLIENTCREATE:
#ifdef ASURA_ALLOW_INACTIVE_CLIENT_ENTITIES
	case ASURA_MSG_CLIENTCREATEINACTIVE:
#endif //#ifdef ASURA_ALLOW_INACTIVE_CLIENT_ENTITIES
		{
			Asura_Chunk_Memory_Stream xStream;
			xStream.Write(pxMessage->GetDataSize(), pxMessage->GetData());

			xStream.SetPosition(0);
			ReadFromClientCreateStream(xStream);

			return true;
		}

	default:
		break;
	}

	return PARENT::HandleMessage(pxMessage);
}


void Asura_ClientEntity_EffectVolume::ReadFromClientCreateStream(Asura_Chunk_Memory_Stream& xStream)
{
	m_xData.ReadFromChunkStream(xStream);
}

