//////////////////////////////////////////////////////////////////////////////
//
// AVP_Behaviour_GS2Actor.h
//
// Copyright (C) 2008 Rebellion. All Rights Reserved.
//
//////////////////////////////////////////////////////////////////////////////

// B E G I N   F I L E   W R A P P E R ///////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
#pragma once
#endif

#ifndef __AVP_BEHAVIOUR_GS2ACTOR_H__
#define __AVP_BEHAVIOUR_GS2ACTOR_H__ 1

// E N D   F I L E   W R A P P E R ///////////////////////////////////////////

// I N C L U D E S ///////////////////////////////////////////////////////////

// axon
#include "Behaviour/BehaviourTypes/Axon_Behaviour_GS2Actor.h"

// F O R W A R D   D E C L A R A T I O N S ///////////////////////////////////

class AVP_Brain_Actor;
class Asura_AnimationController_Animation;

//////////////////////////////////////////////////////////////////////////////
//
// AVP_Behaviour_GS2Actor
//
//////////////////////////////////////////////////////////////////////////////

class AVP_Behaviour_GS2Actor : public Axon_Behaviour_GS2Actor
{
	typedef Axon_Behaviour_GS2Actor PARENT;

public:
	AVP_Behaviour_GS2Actor( AVP_Brain_Actor* pxActorBrain );

	virtual void SetOwnerPhysicsToExtControl();
	virtual void ResetOwnerPhysicsFromExtControl();
	virtual bool SetOwnerPosition( const Asura_Vector_3& xPosition, bool bShouldIgnoreCollisions = false );
	virtual void SetOwnerOrientation( const Asura_Matrix_3x3& xOrientation );

	virtual bool GetOwnerAnimationMovementOffset( Asura_Vector_3& xPosition, Asura_Quat& xQOrient ) const;

	virtual Axon_Behaviour* CreateGetToBehaviour( const GetToBehaviourParams* pxParams = NULL );
	virtual void			DestroyGetToBehaviour( Axon_Behaviour* pxBehaviour );

protected:
	virtual bool HandleMessage( const Asura_Message* pxMessage );
	virtual bool Activate();
	virtual void Deactivate();
	virtual void PerFrameUpdate( const float fTimeslice );

	virtual void* GetAnimMappingData();

	void UpdateAnimFlagEvents();

	bool GetIsAllowedToExitOnKnowledge() const;

#ifndef ASURA_NO_DEBUG_OUTPUT
	virtual void RenderDebugInfo();
#endif

private:
	AVP_Brain_Actor* GetActorBrain() const;

	Asura_Vector_3 m_xLastPositionForMovementDirection;
};

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

#endif //__AVP_BEHAVIOUR_GS2ACTOR_H__
