Esempio n. 1
0
    /// <summary>
    /// Use to close all the pieces opened wrong
    /// </summary>
    private void CloseOpenedPieces()
    {
        int i = 0;

        for (i = 0; i < _openedPieces.Count; i++)
        {
            MPPieceController Controller = _openedPieces[i].gameObject.GetComponent <MPPieceController>();
            Controller.FlipPiece();
            Controller.HideOnShow();
        }
    }
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, 30f))
            {
                if (hit.transform.name.Contains("Piece"))
                {
                    MPPieceController Temp = hit.transform.GetComponent <MPPieceController>();

                    if (Temp.IsPieceHidden)
                    {
                        _openedPieces.Add(hit.transform.gameObject);

                        Temp.FlipPiece();

                        if (_openedPieces.Count == NoPiecesToFind)
                        {
                            if (MatchOpenedPieces())
                            {
                                _correctOpenedPieces += _openedPieces.Count;

                                //Check for all pieces opened correctly
                                if (_correctOpenedPieces == TotalCols * TotalRows)
                                {
                                    OnAllPiecesOpened();
                                }
                                else
                                {
                                    OnMatchedPiecesOpened();
                                }
                            }
                            else
                            {
                                CloseOpenedPieces();
                                OnWrongPiecesOpened();
                            }

                            _openedPieces.Clear();
                        }
                    }
                }
            }
        }
    }
Esempio n. 3
0
    /// <summary>
    /// Resets puzzle for replay
    /// </summary>
    public void Reset()
    {
        //Close all opened pieces
        for (int rowTrav = 0; rowTrav < TotalRows; rowTrav++)
        {
            for (int colTrav = 0; colTrav < TotalCols; colTrav++)
            {
                MPPieceController ThisPieceController = _pieceControllerInstances[rowTrav][colTrav];
                if (!ThisPieceController.IsPieceHidden)
                {
                    ThisPieceController.FlipPiece();
                }
            }
        }

        _openedPieces.Clear();
        _correctOpenedPieces = 0;


        //Reposition pieces places randomly
        for (int rowTrav = 0; rowTrav < TotalRows; rowTrav++) //Shuffle every row
        {
            for (int colTrav = 0; colTrav < TotalCols; colTrav++)
            {
                int r = Random.Range(0, TotalCols);

                //Swap positions
                Vector3 TempPosition = _pieceInstances[rowTrav][colTrav].transform.position;
                _pieceInstances[rowTrav][colTrav].transform.position = _pieceInstances[rowTrav][r].transform.position;
                _pieceInstances[rowTrav][r].transform.position       = TempPosition;

                //Swap inside arrays
                GameObject TempGameobject = _pieceInstances[rowTrav][colTrav];
                _pieceInstances[rowTrav][colTrav] = _pieceInstances[rowTrav][r];
                _pieceInstances[rowTrav][r]       = TempGameobject;

                MPPieceController TempMPPieceController = _pieceControllerInstances[rowTrav][colTrav];
                _pieceControllerInstances[rowTrav][colTrav] = _pieceControllerInstances[rowTrav][r];
                _pieceControllerInstances[rowTrav][r]       = TempMPPieceController;

                Vector3 TempPiecePositions = _piecePositions[rowTrav][colTrav];
                _piecePositions[rowTrav][colTrav] = _piecePositions[rowTrav][r];
                _piecePositions[rowTrav][r]       = TempPiecePositions;
            }
        }
    }
Esempio n. 4
0
    /// <summary>
    /// UnityMethod: Handles user input for pieces
    /// </summary>
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, 30f))
            {
                if (hit.transform.name.Contains("Piece"))
                {
                    MPPieceController Temp = hit.transform.GetComponent <MPPieceController>();

                    if (Temp.IsPieceHidden)
                    {
                        _openedPieces.Add(hit.transform.gameObject);

                        Temp.FlipPiece();

                        if (_openedPieces.Count == NoPiecesToFind)
                        {
                            if (MatchOpenedPieces())
                            {
                                _correctOpenedPieces += _openedPieces.Count;

                                //Check for all pieces opened correctly
                                if (_correctOpenedPieces == TotalCols * TotalRows)
                                {
                                    _audioManager.PlaySFXSound(PuzzleCompletionSound);
                                    E_OnAllPiecesOpened();
                                    OnAllPiecesOpened.Invoke();
                                }
                                else
                                {
                                    OnMatchedPiecesOpened.Invoke();
                                    E_OnMatchedPiecesOpened();
                                    _audioManager.PlaySFXSound(CorrectPairOpened);
                                }
                            }
                            else
                            {
                                if (AnimateColorOnWrongPiece)
                                {
                                    GetComponent <ColorAnimator>().StartEffect(Temp.gameObject, WrongPieceAnimationColor,
                                                                               NoOfTimesToBlink, BlinkSpeed);
                                }

                                CloseOpenedPieces();

                                _audioManager.PlaySFXSound(IncorrectPairOpened);
                                E_OnWrongPiecesOpened();
                                OnWrongPiecesOpened.Invoke();
                            }

                            _openedPieces.Clear();
                        }
                    }
                }
            }
        }
    }