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; } }