示例#1
0
 public void OnMove(Tuple <Peice, Point> moveData)
 {
     PlaySound(Sounds.move);
     if (myGame.CanDraw())
     {
         btn_draw.Enabled = true;
     }
     else
     {
         btn_draw.Enabled = false;
     }
 }
    public void SelectSquare()
    {
        if (!_selectorInBound)
        {
            return;
        }

        GameObject piece = GetPieceGameObject(_currentHoverSquareCord);

        // When no piece is currently selected
        if (!_isPieceSelected)
        {
            if (piece)
            {
                // Select piece (checks if selected piece is on player's side)
                if (_currentGame.SelectPeice(_currentHoverSquareCord))
                {
                    // Fetch and display possible moves
                    List <Point> possibleMoves = _currentGame.GetSelectedMoves();
                    // Check if selected piece has available moves, else unselect it
                    if (!possibleMoves.Any())
                    {
                        return;
                    }
                    foreach (Point move in possibleMoves)
                    {
                        // Create square colliders and add them to _squareColliders
                        Tuple <float, float> position = ToCord(move);
                        var p = Instantiate(squarePossibleMovementsPrefab, currentBoard.transform);
                        p.transform.localPosition = new Vector3(position.Item1, currentBoard.transform.position.y + 0.1f, position.Item2);
                        p.transform.localScale   *= 0.5f;
                        _squareColliders.Add(p);
                    }

                    _selectedPiece = piece;
                    _prevMat       = _selectedPiece.GetComponent <Renderer>().material;
                    _selectedPiece.GetComponent <Renderer>().material = selectedMaterial;
                    _isPieceSelected = true;
                }
            }
        }

        // When a piece is already selected
        else
        {
            // If reselecting same piece, deselect
            if (piece == _selectedPiece)
            {
                _selectedPiece.GetComponent <Renderer>().material = _prevMat;
                _selectedPiece   = null;
                _isPieceSelected = false;
                RemoveSquareColliders();
                return;
            }
            else
            {
                // Check that we can make this move
                if (!_currentGame.GetSelectedMoves().Contains(_currentHoverSquareCord))
                {
                    return;
                }

                // If there's already a piece in the case we've to delete the corresponding game object
                if (piece)
                {
                    Destroy(piece);
                }
                _currentGame.MakeMove(_currentHoverSquareCord);
                var newCoord = ToCord(_currentHoverSquareCord);
                _selectedPiece.transform.localPosition            = new Vector3(newCoord.Item1, 0, newCoord.Item2);
                _selectedPiece.GetComponent <Renderer>().material = _prevMat;

                _selectedPiece   = null;
                _isPieceSelected = false;
                RemoveSquareColliders();

                if (_currentGame.CanDraw())
                {
                    if (!_drawOffered)
                    {
                        offerDrawButton.SetActive(true);
                        _drawOffered = true;
                    }
                }
                else
                {
                    offerDrawButton.SetActive(false);
                }

                selectionButton.GetComponentInChildren <Text>().color = _currentGame.turn == PSide.Black ? Color.white : Color
                                                                        .black;
                selectionButton.GetComponent <Image>().color =
                    _currentGame.turn == PSide.Black ? Color.black : Color.white;
            }
        }
    }