//////////////////////////////////////////////////////////////////////////////
//
// ToolsAVP_Node_GS2Node.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 __TOOLSAVP_NODE_GS2NODE_H__
#define __TOOLSAVP_NODE_GS2NODE_H__ 1

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

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

// tools
#include "Entity/Locations/OrientedNode/GamesceneNode/Tools_EntityNode_GS2Node.h"
#include "Objects/ToolsAVP_Object_Type.h"

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

class Asura_Tabs_Dialog;
class Asura_Vector_2;
class AVP_ServerNode_GS2Node;

//////////////////////////////////////////////////////////////////////////////
//
// ToolsAVP_Node_GS2Node
//
//////////////////////////////////////////////////////////////////////////////

class ToolsAVP_Node_GS2Node : virtual public Tools_EntityNode_GS2Node
{
	typedef Tools_EntityNode_GS2Node PARENT;

public:
	ToolsAVP_Node_GS2Node( Asura_Entity* pxEntity );
	virtual ~ToolsAVP_Node_GS2Node();

	virtual const char* GetTypeDescription() { return "AVP GS2 Node"; }
	virtual bool IsBaseOrDerivativeOf( int iToolsObjectType ) const;

	virtual void Render();
	virtual void PrintInfo( float& fX, float& fY );
	virtual bool HandlesThisMessage( int iMessageID );

	virtual bool          CanBeCopied() const { return ( Type == TOT_Entity_AVPGS2Node ); }
	virtual void          Copy( const Tools_Object* pxObject );
	virtual Tools_Object* CreateObjectOfThisType() const;

	static void					  Create();
	static ToolsAVP_Node_GS2Node* Create( Asura_Entity* pxEntity );
	static ToolsAVP_Node_GS2Node* CreateAndReturn();

	static ToolsAVP_Node_GS2Node* FindEntity( const Asura_Guid uGuid ) { return s_xList.FindEntity( uGuid ); }
	static Asura_Hashed_List< ToolsAVP_Node_GS2Node >* GetList() { return &s_xList; }

protected:
	virtual void AddPropertiesTabControls( Asura_Tabs_Dialog* pxTabsDialogue, Asura_Vector_2& xOffset );
	virtual void AddUnderTabsControls( Asura_Overlay* pxNewOverlay, Asura_Vector_2& xOffset );
	virtual bool GetParameter( Asura_Hash_ID uParamID, Tools_Parameter* pxParam ) const;
	virtual bool SetParameter( Asura_Hash_ID uParamID, const Tools_Parameter* pxParam );

	virtual AVP_ServerNode_GS2Node* GetAVPGameNode() const;

private:
	static Asura_Hashed_List< ToolsAVP_Node_GS2Node > s_xList;
};

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

#endif //__TOOLSAVP_NODE_GS2NODE_H__
