/**
*
* \file Asura_Player.h
*
* Created by Kevin Lea - 02/01/2002 15:28:23
*
* Copyright (C) 2001 Rebellion, All Rights Reserved.
*
* \brief
*
**/

#ifdef ASURA_USE_PRAGMA_ONCE
    #pragma once
#endif

#ifndef __ASURA_PLAYER_H__
#define __ASURA_PLAYER_H__

#include "Core/Asura_HashedList.h"
#include "Entity/Asura_Entity.h"

class Asura_Entity_Player : public virtual Asura_Entity
{
	friend class Asura_Entity_System;

	public:
		Asura_Entity_Player( Asura_Guid uForcedGUID = ASURA_GUID_UNREGISTERED, bool bShouldSendPlayerConnectedMsg = true );
		virtual ~Asura_Entity_Player();

		virtual void Render(void)=0;
        void SendPlayerConnectedMsg( void );
		virtual void SetCamera(void)=0;

	protected:
		virtual void MakeCommandMessageForServer(void)=0;


public:
	/* static members */
	static Asura_Entity_Player* FindEntity(Asura_Guid uGuid) { return s_xList.FindEntity(uGuid); }
	static const Asura_Hashed_List<Asura_Entity_Player>* GetList() { return &s_xList; }

private:
#ifdef ASURA_USE_STREAMING
	void MigrateZone(Asura_Streaming_ZoneEntities* pxOldEntities, Asura_Streaming_ZoneEntities* pxNewEntities) { Asura_Assert(false, "Migrating zone makes no sense for Asura_Entity_Player"); }
#endif //#ifdef ASURA_USE_STREAMING

	/* static data */
	static Asura_Hashed_List<Asura_Entity_Player> s_xList;
};



#endif//__ASURA_PLAYER_H__lass Asura_Player
