//////////////////////////////////////////////////////////////////////////////
//
// ToolsAVP_Node_OrientedNode.h
//
// (Stuart Perry - 18.04.2007) 
//
// Copyright (c) 2007 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 TOOLSAVP_MODE_ORIENTEDNODE_H___
#define TOOLSAVP_MODE_ORIENTEDNODE_H___ 1

// I N C L U D E S ///////////////////////////////////////////////////////////
#include "Entity/Locations/OrientedNode/Tools_EntityNode_OrientedNode.h"
#include "Objects/Tools_Object_System.h"

//////////////////////////////////////////////////////////////////////////////
//
// ToolsAVP_Node_OrientedNode
//
//////////////////////////////////////////////////////////////////////////////
class ToolsAVP_Node_OrientedNode : public Tools_EntityNode_OrientedNode
{
private:
	typedef Tools_EntityNode_OrientedNode PARENT;

public:
	// Constructor / Destructor
	ToolsAVP_Node_OrientedNode( Asura_Entity* pxEntity );
	virtual ~ToolsAVP_Node_OrientedNode();

	// Virtuals
	virtual void		AddOverlayControls( class Asura_Overlay* pxNewOverlay, class Asura_Vector_2& xOffset );
	virtual void		OnSelection();
	virtual void		OnDeselection();
	virtual void		UpdateWhileSelected();

	// Statics
	static void							CreateGuardPoint( ToolsAVP_Node_OrientedNode** ppxNewNode, Asura_Guid uGZGuid, int iNumGuardPoints );
	static void							Project_Create(void);
	static ToolsAVP_Node_OrientedNode*	FindEntity(Asura_Guid uGuid) { return s_xList.FindEntity(uGuid); }
	static Tools_Object*				Create( Asura_Entity* pxEntity );
	static const Asura_Hashed_List<ToolsAVP_Node_OrientedNode>* GetList() { return &s_xList; }

private:
	// Private Variables
	static ToolsAVP_Node_OrientedNode* CreateAndReturn( int iNumGuardPoints, Asura_Guid uGZGuid );

	// Statics
	static Asura_Hashed_List<ToolsAVP_Node_OrientedNode> s_xList;
	static ToolsAVP_Node_OrientedNode* s_pxAVPToolsOrientedNode;

	// Private variables
	bool			m_bChanged;
	bool			m_bChangedPatrolOrder;
	float			m_fRandomWeighting;
	u_int			m_uPatrolOrder;
	float			m_fWaitTime;
	float			m_fWaitTimeRandomOffset;
	bool			m_bWaitTimeRandomOffset;
	Asura_Dialog*	m_pxRandomOffsetDialog;
};

#endif // #ifndef TOOLSAVP_MODE_ORIENTEDNODE_H___
