////////////////////////////////////////////////////////////////////////////////
// Filename: quadtreeclass.h
////////////////////////////////////////////////////////////////////////////////
#ifndef _QUADTREECLASS_H_
#define _QUADTREECLASS_H_


///////////////////////
// MY CLASS INCLUDES //
///////////////////////
#include "frustumclass.h"


////////////////////////////////////////////////////////////////////////////////
// Class name: QuadTreeClass
////////////////////////////////////////////////////////////////////////////////
class QuadTreeClass
{
private:
	struct NodeType
	{
		float positionX, positionZ, width;
		int nodeID;
		NodeType* nodes[4];
	};

public:
	QuadTreeClass();
	QuadTreeClass(const QuadTreeClass&);
	~QuadTreeClass();

	void Initialize(float, float, float, float);
	void Shutdown();
    void Render(FrustumClass*, float, float);

    void GetNodesDrawn(int&, int&);
    void GetRenderList(int*, int&);

private:
	void CreateTreeNode(NodeType*, float, float, float);
	void ReleaseNode(NodeType*);
    void RenderNode(NodeType*, FrustumClass*, float, float);

private:
    NodeType* m_parentNode;
    int* m_renderList;
    float m_terrainWidth, m_nodeWidth, m_upperLeftX, m_upperLeftZ;
    int m_nodeCount, m_visibleNodes;
};

#endif
