Original Post
Hi, I wrote a BSP class and since I'm still pretty new to witeing classes, I wanted to see what you guys thought: Is the class built well? Are the ctor and dtor ok? Any input would be appriciated. Thanks.
struct BSP{
float height, width;
float centerX, centerY;
MinMax limits;
BSP *p_sec1, *p_sec2, *p_sec3, *p_sec4;
bool found_limits;
bool is_leaf;
};
class CBspTree{
public:
CBspTree();
~CBspTree();
int number_of_parts;
private:
BSP* map;
void InitTree(BSP* node, float x, float y, float h, float w);
void EraseBSP(BSP* node);
};
#include "BSP.h"
CBspTree :: CBspTree()
{
map = new BSP;
InitTree(map,MAP_SIZE/2, MAP_SIZE/2, MAP_SIZE, MAP_SIZE);
}
CBspTree :: ~CBspTree()
{
EraseBSP(map);
}
void CBspTree :: InitTree(BSP* node, float x, float y, float h, float w)
{
node->centerX = x; node->centerY = y;
node->height = h; node->width = w;
node->found_limits = false;
number_of_parts++;
if(w>32)
{
node->p_sec1 = new BSP;
node->p_sec2 = new BSP;
node->p_sec3 = new BSP;
node->p_sec4 = new BSP;
InitTree(node->p_sec1, x-w/4, y-h/4, h/2, w/2);
InitTree(node->p_sec2, x+w/4, y-h/4, h/2, w/2);
InitTree(node->p_sec3, x+w/4, y+h/4, h/2, w/2);
InitTree(node->p_sec4, x-w/4, y+h/4, h/2, w/2);
}
else
{
node->is_leaf=true;
}
}
void CBspTree :: EraseBSP(BSP* node)
{
if(!node->is_leaf)
{
EraseBSP(node->p_sec1);
EraseBSP(node->p_sec2);
EraseBSP(node->p_sec3);
EraseBSP(node->p_sec4);
delete node;
}
else
delete node;
}