public static void ProcessIndexes(OctreeNode[] nodes, int direction, List<int> indexes)
{
int min_size = 10000000;
int min_index = 0;
int[] indices = { -1, -1, -1, -1 };
bool flip = false;
bool sign_changed = false;
for (int i = 0; i < 4; i++)
{
int edge = processEdgeMask[direction, i];
int c1 = edgevmap[edge, 0];
int c2 = edgevmap[edge, 1];
int m1 = (nodes[i].draw_info.corners >> c1) & 1;
int m2 = (nodes[i].draw_info.corners >> c2) & 1;
if (nodes[i].size < min_size)
{
min_size = nodes[i].size;
min_index = i;
flip = m1 == 1;
sign_changed = ((m1 == 0 && m2 != 0) || (m1 != 0 && m2 == 0));
}
indices[i] = nodes[i].draw_info.index;
//sign_changed = true;
}
if (sign_changed)
{
if (!flip)
{
if (indices[0] != indices[1] && indices[1] != indices[3])
{
indexes.Add(indices[0]);
indexes.Add(indices[1]);
indexes.Add(indices[3]);
}
if (indices[0] != indices[2] && indices[2] != indices[3])
{
indexes.Add(indices[0]);
indexes.Add(indices[3]);
indexes.Add(indices[2]);
}
}
else
{
if (indices[0] != indices[1] && indices[1] != indices[3])
{
indexes.Add(indices[0]);
indexes.Add(indices[3]);
indexes.Add(indices[1]);
}
if (indices[0] != indices[2] && indices[2] != indices[3])
{
indexes.Add(indices[0]);
indexes.Add(indices[2]);
indexes.Add(indices[3]);
}
}
}
}