#ifdef ASURA_USE_NEW_NAV_STUFF

//////////////////////////////////////////////////////////////////////////////
//
// Axon_Behaviour_UseGuardZone.h
//
// Copyright (C) 2009 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_USEGUARDZONE_H__
#define __AXON_BEHAVIOUR_USEGUARDZONE_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 "Network/Asura_Guid.h"

// axon
#include "Behaviour/Axon_Behaviour.h"

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

class Asura_ServerNode_OrientedNode;

//////////////////////////////////////////////////////////////////////////////
//
// Axon_Behaviour_UseGuardZone
//
//////////////////////////////////////////////////////////////////////////////

class Axon_Behaviour_UseGuardZone : public Axon_Behaviour
{
	typedef Axon_Behaviour PARENT;

public:
	Axon_Behaviour_UseGuardZone( Axon_Brain* pxBrain );

	virtual void ReadFromChunkStream( Asura_Chunk_Stream& xStream );
	virtual void WriteToChunkStream( Asura_Chunk_Stream& xStream ) const;

	void SetGuardZoneGuid( const Asura_Guid uGuardZoneGuid );
	Asura_Guid GetGuardZoneGuid() const { return m_uGuardZoneGuid; }

protected:
	enum State
	{
		WAITING_FOR_GUARD_ZONE,
		WAITING_FOR_GUARD_POINT,
		WAITING_AT_GUARD_POINT,
		MOVING_TO_GUARD_POINT
	};

	virtual void Deactivate();
	virtual void PostLoadInitialise();
	virtual void Update( const float fTimeslice );

	virtual void OnNewGuardZone();
	virtual void SwitchToState( int iNextState, Asura_ServerNode_OrientedNode* pxGP = NULL );
	bool StartMoving( const Asura_ServerNode_OrientedNode* pxGP );
	void StopMoving();

#ifndef ASURA_NO_DEBUG_OUTPUT
	virtual void RenderDebugInfo();
#endif

private:
	Asura_Guid m_uGuardZoneGuid;
	Asura_Guid m_uGuardPointGuid;
	int        m_iState;
	float      m_fWaitTimer;

	static const u_int uCURRENT_CHUNK_VERSION = 0;
};

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

#endif //__AXON_BEHAVIOUR_USEGUARDZONE_H__
#endif // #ifdef ASURA_USE_NEW_NAV_STUFF
