コード例 #1
0
    private IEnumerator ApplySequence(List <RubiksColor> colors, List <FaceRotation> directions)
    {
        yield return(new WaitForEndOfFrame());

        for (int i = 0; i < colors.Count; i++)
        {
            yield return(new WaitUntil(() => RubiksCubeRotation.CurrentRotationState == RubiksCubeRotation.RotationState.IDLE));

            RubiksFaceRotation.RubiksFace faceToRotate = RubiksFaceRotation.RubiksFace.NONE;
            GameObject faceGO = null;

            if (colors[i] == UpFaceColor)
            {
                faceToRotate = RubiksFaceRotation.RubiksFace.UP;
                faceGO       = GameObject.FindGameObjectWithTag("UP");
            }
            else if (colors[i] == LeftFaceColor)
            {
                faceToRotate = RubiksFaceRotation.RubiksFace.LEFT;
                faceGO       = GameObject.FindGameObjectWithTag("LEFT");
            }
            else if (colors[i] == RightFaceColor)
            {
                faceToRotate = RubiksFaceRotation.RubiksFace.RIGHT;
                faceGO       = GameObject.FindGameObjectWithTag("RIGHT");
            }
            else if (colors[i] == m_rubiksLogic.RubiksOppositeColor[UpFaceColor])
            {
                m_rubiksVertical.RotateVerticalUp(m_shuffleRotationDuration);

                faceToRotate = RubiksFaceRotation.RubiksFace.LEFT;
                faceGO       = GameObject.FindGameObjectWithTag("LEFT");
            }
            else if (colors[i] == m_rubiksLogic.RubiksOppositeColor[LeftFaceColor])
            {
                m_rubiksHorizontal.RotateHorizontalLeft(m_shuffleRotationDuration);

                faceToRotate = RubiksFaceRotation.RubiksFace.RIGHT;
                faceGO       = GameObject.FindGameObjectWithTag("RIGHT");
            }
            else if (colors[i] == m_rubiksLogic.RubiksOppositeColor[RightFaceColor])
            {
                m_rubiksHorizontal.RotateHorizontalRight(m_shuffleRotationDuration);

                faceToRotate = RubiksFaceRotation.RubiksFace.LEFT;
                faceGO       = GameObject.FindGameObjectWithTag("LEFT");
            }

            yield return(new WaitUntil(() => RubiksCubeRotation.CurrentRotationState == RubiksCubeRotation.RotationState.IDLE));

            if (faceToRotate != RubiksFaceRotation.RubiksFace.NONE && faceGO != null)
            {
                Rotate(faceToRotate, colors[i], faceGO, directions[i]);
            }
        }

        yield return(new WaitUntil(() => RubiksCubeRotation.CurrentRotationState == RubiksCubeRotation.RotationState.IDLE));

        m_isApplyingSequence = false;
    }
コード例 #2
0
 private void Rotate(RubiksFaceRotation.RubiksFace faceToRotate, RubiksColor faceColor, GameObject faceGO, FaceRotation direction)
 {
     m_rubiksFaceRotation.Rotate(faceToRotate, direction, faceGO, m_shuffleRotationDuration, OnRotationFinished);
 }