Exemplo n.º 1
0
 IEnumerator Move(MidLayersOfCube layer, bool prime)
 {
     cube.RotateMidLayer(layer, prime);
     while (cubeDisp.rotating)
     {
         yield return(null);
     }
     if (pauseAfterMove)
     {
         Debug.Break();
     }
 }
Exemplo n.º 2
0
    Vector3 GetDirFromLayer(MidLayersOfCube layer)
    {
        switch (layer)
        {
        case MidLayersOfCube.Middle:
            return(Vector3.left);

        case MidLayersOfCube.Equatorial:
            return(Vector3.up);

        default:
            return(Vector3.forward);
        }
    }
Exemplo n.º 3
0
    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();
    }
Exemplo n.º 4
0
 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);
         }
     }
 }
Exemplo n.º 5
0
    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;
    }
Exemplo n.º 6
0
 void RotateLayer(MidLayersOfCube layer, bool prime)
 {
     StartCoroutine(RotateLayerCo(layer, prime));
 }