Example #1
0
 public void Divide(DividingVert first, DividingVert second, out Board partOne, out Board partTwo)
 {
     //
     /* ADD TEST TO FIND IF NOT ON THE SAME EDGE*/
     //
     Board part1 = new Board(texture,effect);
     Board part2 = new Board(texture, effect);
     int p1_pNum, p2_pNum;
     p1_pNum = Math.Abs(first.big - second.small) + 3;
     if ((first.big == vertNum - 1) && (second.small == 0))
         p1_pNum -= 2;
     p2_pNum = indices.Length - p1_pNum + 2;
     Vector3[] p1_points = new Vector3[p1_pNum];
     Vector2[] p1_texCords = new Vector2[p1_pNum];
     p1_points[0] = first.position;
     p1_texCords[0] = findTexCords(first);
     p1_points[p1_pNum - 1] = second.position;
     p1_texCords[p1_pNum - 1] = findTexCords(second);
     for (int i = 0; i < p1_pNum - 2; i++)
     {
         p1_points[i + 1] = vertices[(first.big + i) % vertNum].Position;
         p1_texCords[i + 1] = vertices[(first.big + i) % vertNum].TextureCoordinate;
     }
     Vector3[] p2_points = new Vector3[p2_pNum];
     Vector2[] p2_texCords = new Vector2[p2_pNum];
     p2_points[0] = second.position;
     p2_texCords[0] = p1_texCords[p1_pNum - 1]; //alreadt calculated before a moment
     p2_points[p2_pNum - 1] = first.position;
     p2_texCords[p2_pNum - 1] = p1_texCords[0]; //alreadt calculated before a moment
     for (int i = 0; i < p2_pNum - 2; i++)
     {
         p2_points[i + 1] = vertices[(second.big + i) % vertNum].Position;
         p2_texCords[i + 1] = vertices[(second.big + i) % vertNum].TextureCoordinate;
     }
     part1.Initialize(p1_pNum, p1_points, p1_texCords);
     part2.Initialize(p2_pNum, p2_points, p2_texCords);
     // storing the smaller part in parOne , bigger -> partTwo
     if (Vector3.Distance(center,part1.center) >= Vector3.Distance(center,part2.center))
     {
         partOne = part1;
         partTwo = part2;
     } else
     {
         partOne = part2;
         partTwo = part1;
     }
 }