///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_PSP_BotanicalsTemplate.h
// Author : Catalin Arsenescu
// Date   : 09-March-2007
//
// Copyright (C) 2007 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////
#ifdef ASURA_USE_PRAGMA_ONCE
	#pragma once
#endif //ASURA_USE_PRAGMA_ONCE

#ifdef ASURA_USE_BOTANICALS
#ifndef __ASURA_PSP_BOTANICALS_TEMPLATE__
#define __ASURA_PSP_BOTANICALS_TEMPLATE__

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////
#include "Core/Asura_String.h"
// Asura BGR
#include "Botanicals/Asura_Botanical_Game_Render_Instance_Header.h"
#include "Botanicals/Asura_Botanical_Game_Render_Instance.h"

////////////////////////////////////////////////////////////////////////////////
// Forward class declaration...
////////////////////////////////////////////////////////////////////////////////
class Asura_PSP_BotanicalsShape;
class Asura_PSP_BotanicalsTemplate;

////////////////////////////////////////////////////////////////////////////////
// Class        : Asura_PSP_BotanicalsInstance
// Author       : Catalin Arsenescu
// Date         : 09-March-2007
////////////////////////////////////////////////////////////////////////////////
class Asura_PSP_BotanicalsInstance : public Asura_BGR_Instance
{
public:
//Public functions
	void Render(Asura_PSP_BotanicalsTemplate* pxTemplate, Asura_PSP_BotanicalsShape* pxShape, int iInstanceID);

protected:
//Protected functions
	void RenderShape(Asura_PSP_BotanicalsShape* pxShape, Asura_Vector_3 xInstancePosition);
	void RenderBotanicalShape(Asura_PSP_BotanicalsTemplate* pxTemplate,Asura_PSP_BotanicalsShape* pxShape, Asura_Vector_3 xInstancePosition, int iInstanceID);
}; /// End of class Asura_PSP_BotanicalsInstance declaration

////////////////////////////////////////////////////////////////////////////////
// Class        : Asura_PSP_BotanicalsTemplate
// Author       : Catalin Arsenescu
// Date         : 09-March-2007
////////////////////////////////////////////////////////////////////////////////
class Asura_PSP_BotanicalsTemplate : public Asura_BGR_Instances_Header
{
public:
	// BGR Header functions
	virtual u_int							GetInstanceCount() const;
	virtual const Asura_BGR_Instance* const	GetInstance( const u_int uInstanceIndex) const;
	
	// Own functions
	Asura_PSP_BotanicalsTemplate();
	virtual ~Asura_PSP_BotanicalsTemplate();

	void	Render(void);

//Public members
	Asura_PSP_BotanicalsShape*			m_pxShape;
	Asura_PSP_BotanicalsInstance*		m_pxInstances;

	Asura_String						m_xName;
	int									m_iUID;
	int									m_iNumInstances;
	int									m_iOffsetToNextBase;
}; /// End of class Asura_PSP_BotanicalsTemplate declaration

#endif //__ASURA_PSP_BOTANICALS_TEMPLATE__
#endif //ASURA_USE_BOTANICALS
