
///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_ClientActor_AlienQueen.h
// Author : Andy McCabe
// Date   : 07-Nov-2008
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
	#pragma once
#endif   // ifdef ASURA_USE_PRAGMA_ONCE

#ifndef __AVP_CLIENTACTOR_ALIENQUEEN_H__
#define __AVP_CLIENTACTOR_ALIENQUEEN_H__

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

#include "Blueprint/AVP_Blueprint_HashIDs.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/AVP_ClientActor_Vertebrate.h"

////////////////////////////////////////////////////////////////////////////////
// Forward class declarations...
////////////////////////////////////////////////////////////////////////////////

class Asura_Collision_Object;

////////////////////////////////////////////////////////////////////////////////
// Class declaration...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_ClientActor_AlienQueen
// Author       : Andy McCabe
// Date         : 07-Nov-2008
//
// Description  : This class handles the operation of the AlienQueen actor
////////////////////////////////////////////////////////////////////////////////

class AVP_ClientActor_AlienQueen : public AVP_ClientActor_Vertebrate
{
public:
	// Public functions...
	static	void	Create(const Asura_Message* pxMessage);

	virtual void PostCreateInitialise();
	virtual	bool HandleMessage(const Asura_Message* pxMessage);

	virtual bool IsBoneInTorso( const int iBoneID );
	virtual Asura_Hash_ID GetDeathAnimation(const AVP_EntityDamage_ApplyToEntity& xDamage) const;

	virtual void GetFootPosition( u_int uFootItr, Asura_Vector_3& xFootPos );

	// Static list accessors...
	static	AVP_ClientActor_AlienQueen*								FindEntity(const Asura_Guid uGuid)	{ return(s_xList.FindEntity(uGuid)); }
	static	const Asura_Hashed_List<AVP_ClientActor_AlienQueen>*	GetList(void)						{ return(&s_xList); }

protected:

	// Protected variables...

	// Protected functions...
	AVP_ClientActor_AlienQueen(void);
	virtual ~AVP_ClientActor_AlienQueen();

	// Overridden functions...
	virtual bool InitialiseMoves(void);
	virtual void CreateAnimationHandler();

	virtual void	GetCurrentBlockBlueprintHashes(Asura_Hash_ID& uBlueprintTypeHash, Asura_Hash_ID& uFirstPersonBlueprintHash, Asura_Hash_ID& uThirdPersonBlueprintHash) const;

	virtual void GetCurrentMeleeBlueprintIDs(Asura_Hash_ID& uFirstPersonID, Asura_Hash_ID& uThirdPersonID) const;
	void		ProcessClientUpdate	(const AVP_Message_Vertebrate_ClientUpdate* pxData, const float fServerTime, const bool bProcessPosAndOri = true);

private:
	// Private typedefs...
	typedef AVP_ClientActor_Vertebrate PARENT;

	virtual const AVP_Actor_AnimStateData* GetStateDataFromMesssageData( const u_int uState, const AVP_Message_Actor_ClientUpdate* pxActorData );
	virtual const AVP_Actor_AnimStateData* GetStateData( const u_int uState, const u_int uGroundType, const u_int uLimbDamage, const bool bIsAiming, const u_int uCoverType );


	// Private variables...
	u_int					m_uDroolPFXEffect;		// The effect ID of the Alien drool PFX (used in grapple-mode).

	union
	{
		u_int		m_uAlienQueenFlags;		// Single access point for the flags.

		struct
		{
			u_int	m_bJustJumped	: 1,
									: 0;	// 31 spare-bits.	
		};
	};

	static	Asura_Hashed_List<AVP_ClientActor_AlienQueen>	s_xList;

	// Private functions...
	AVP_ClientActor_AlienQueen(const AVP_ClientActor_AlienQueen& xOther);
	AVP_ClientActor_AlienQueen&	operator=(const AVP_ClientActor_AlienQueen& xOther);

};   // End of class 'AVP_ClientActor_AlienQueen'.


#endif   // ifndef __AVP_CLIENTACTOR_ALIENQUEEN_H__


/// End of file. ///
