#ifdef ASURA_USE_AXON
//////////////////////////////////////////////////////////////////////////////
//
// Axon_Behaviour_GS2Attractor.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 __AXON_BEHAVIOUR_GS2ATTRACTOR_H__
#define __AXON_BEHAVIOUR_GS2ATTRACTOR_H__ 1

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

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

// asura
#include "Core/Asura_Maths.h"

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

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

class Axon_Brain;

//////////////////////////////////////////////////////////////////////////////
//
// Axon_Behaviour_GS2AttractorEnRoute
// Behaviour used when en-route to an attractor.
//
//////////////////////////////////////////////////////////////////////////////

class Axon_Behaviour_GS2AttractorEnRoute : public Axon_Behaviour_GS2Interface
{
	typedef Axon_Behaviour_GS2Interface PARENT;

public:
	Axon_Behaviour_GS2AttractorEnRoute( Axon_Brain* pxBrain );

protected:
	virtual void ReadFromChunkStream( Asura_Chunk_Stream& xStream );
	virtual void WriteToChunkStream( Asura_Chunk_Stream& xStream ) const;
	virtual void HandleParams( const Axon_BehaviourParams* pxParams );
	virtual bool Activate();
	virtual void Deactivate();
	virtual void PerFrameUpdate( const float fTimeslice );

private:
	enum State
	{
		UNSET,
		MOVING_TO_ATTRACTOR,
		FINAL_LERPING,
		FINISHED,
		NUM_STATES
	};
	void SwitchToState( const int iState );

private:
	int			    m_iState;
	u_int		    m_uAnimSet;
	float		    m_fArrivalRange;
	Asura_Vector_3  m_xTargetPosition;
	Axon_Behaviour* m_pxGetToBehaviour;

	static const u_int uCURRENT_CHUNK_VERSION = 1;
};

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

#endif //__AXON_BEHAVIOUR_GS2ATTRACTOR_H__
#endif // ASURA_USE_AXON
