public CubeManager CreateCube(int size) { CubeManager cubeManager = new GameObject("Cube").AddComponent<CubeManager>(); List<Cubelet> cubeletList = new List<Cubelet>(); float startingPoint = (size - 1) * -0.5f; Vector3 pos = Vector3.one * startingPoint; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { for (int k = 0; k < size; k++) { //Check if array is not inside of the cube if (!((i > 0 && i < (size - 1)) && (j > 0 && j < (size - 1)) && (k > 0 && k < (size - 1)))) { Cubelet cubelet = SpawnCubelet(cubeManager.transform, pos, ("C" + i + j + k)); if (i == 0) cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Back)); else if (i == (size - 1)) cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Front)); if (k == 0) cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Left)); else if (k == (size - 1)) cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Right)); if(j == 0) cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Bottom)); else if(j == (size - 1)) cubelet.AddSticker(SpawnSticker(cubelet, CubeDirections.Top)); cubeletList.Add(cubelet); } pos.x += CubeletSize; } pos.y += CubeletSize; pos.x = startingPoint; } pos.z += CubeletSize; pos.y = startingPoint; } cubeManager.SetCube(cubeletList, size); return cubeManager; }
private Sticker LoadSticker(Cubelet parent, CubeDirections dir, StickerColors color) { Sticker sticker = Instantiate(prefabSticker, parent.transform).AddComponent<Sticker>(); Vector3 vDir = DirectionsOrdered[(int)dir]; sticker.transform.localPosition = vDir * 0.5f; sticker.transform.forward = vDir; sticker.GetComponentInChildren<MeshRenderer>().material.color = StickersColorsOrdered[(int)color]; sticker.MyColor = color; return sticker; }
bool isSideComplete(List <GameObject> slice) { Cubelet center = null; GameObject centerPlane = null; int index = -1; for (int i = 0; i < 9; i++) { int count = 0; for (int j = 0; j < 6; j++) { if (slice[i].GetComponent <Cubelet>().Planes[j].activeInHierarchy) { count++; index = j; } } if (count == 1) { center = slice[i].GetComponent <Cubelet>(); centerPlane = center.Planes[index]; break; } } if (index != -1) { Vector3 position = Quaternion.Inverse(center.transform.localRotation) * centerPlane.transform.localPosition; foreach (GameObject cube in slice) { if (!cube.GetComponent <Cubelet>().Planes[index].activeInHierarchy || (Quaternion.Inverse(cube.transform.localRotation) * cube.GetComponent <Cubelet>().Planes[index].transform.localPosition) != position) { return(false); } } return(true); } return(false); }