IEnumerator Move(MidLayersOfCube layer, bool prime) { cube.RotateMidLayer(layer, prime); while (cubeDisp.rotating) { yield return(null); } if (pauseAfterMove) { Debug.Break(); } }
Vector3 GetDirFromLayer(MidLayersOfCube layer) { switch (layer) { case MidLayersOfCube.Middle: return(Vector3.left); case MidLayersOfCube.Equatorial: return(Vector3.up); default: return(Vector3.forward); } }
public void RotateMidLayer(MidLayersOfCube layer, bool prime) { int[] centerIndexes, edgeIndexes; //set the index arrays to correspond to the layer that's being rotated switch (layer) { case MidLayersOfCube.Middle: centerIndexes = centerIndexesMiddle; edgeIndexes = edgeIndexesMiddle; break; case MidLayersOfCube.Equatorial: centerIndexes = centerIndexesEquatorial; edgeIndexes = edgeIndexesEquatorial; prime = !prime; break; default: // standing centerIndexes = centerIndexesStanding; edgeIndexes = edgeIndexesStanding; break; } //move the pieces CyclePieces(centerIndexes, edgeIndexes, null, prime); //rotate the pieces for (int i = 0; i < 4; i++) { centerPieces[centerIndexes[i]].RotateTiles(layer, prime); edgePieces[edgeIndexes[i]].RotateTiles(layer, prime); } if (rotationMade_Layer != null) { rotationMade_Layer(layer, prime); } WriteSidesToFile(); }
public void RotateTiles(MidLayersOfCube layer, bool prime) { if (layer == MidLayersOfCube.Middle) { foreach (Tile tile in tiles) { RotateCubieRL(tile, prime); } } else if (layer == MidLayersOfCube.Equatorial) { foreach (Tile tile in tiles) { RotateCubieUD(tile, prime); } } else { foreach (Tile tile in tiles) { RotateCubieFB(tile, prime); } } }
IEnumerator RotateLayerCo(MidLayersOfCube layer, bool prime) { rotating = true; //find the cubies that are on the layer being rotated List <GameObject> cubiesToRotate = new List <GameObject>(); for (int i = 0; i < 6; i++) { switch (layer) { case MidLayersOfCube.Middle: if (centers[i].transform.position.x == 0) { cubiesToRotate.Add(centers[i]); } break; case MidLayersOfCube.Equatorial: if (centers[i].transform.position.y == 0) { cubiesToRotate.Add(centers[i]); } break; case MidLayersOfCube.Standing: if (centers[i].transform.position.z == 0) { cubiesToRotate.Add(centers[i]); } break; } } for (int i = 0; i < 12; i++) { switch (layer) { case MidLayersOfCube.Middle: if (edges[i].transform.position.x == 0) { cubiesToRotate.Add(edges[i]); } break; case MidLayersOfCube.Equatorial: if (edges[i].transform.position.y == 0) { cubiesToRotate.Add(edges[i]); } break; case MidLayersOfCube.Standing: if (edges[i].transform.position.z == 0) { cubiesToRotate.Add(edges[i]); } break; } } //rotate them all around the axis in the correct direction Vector3 axis = GetDirFromLayer(layer); float rotationTotal = 0; while (rotationTotal < 90) { RotateWorldCubies(cubiesToRotate, ref rotationTotal, axis, prime); yield return(null); } //once the rotation is finished, round their positions and rotations to the nearest integer, //just in case they're slightly off RoundWorldCubiePositions(cubiesToRotate); rotating = false; }
void RotateLayer(MidLayersOfCube layer, bool prime) { StartCoroutine(RotateLayerCo(layer, prime)); }