Exemplo n.º 1
0
    /// <summary>
    /// 보드 클릭시 피스 선택 및 활동 타일 선택
    /// </summary>
    private void OnMouseDown()
    {
        BoardCoord clickedCoord = GetClickedCoord();

        if (!clickedCoord.IsAvailable())
        {
            return;
        }

        ResetBoardHighlighter();
        selectedBoardCoord = clickedCoord;
        Piece selectedPieceScript = isPieceSelected ? selectedPiece.GetComponent <Piece>() : null;

        if (isMagicReady && selectedMagicCard != null)
        {
            if (boardStatus[selectedBoardCoord.col][selectedBoardCoord.row] == null)
            {
                ResetBoardHighlighter();
            }
            else
            {
                selectedMagicCard.skillData.Operate(new BoardCoord[] { selectedBoardCoord });

                CardManager.Instance.UseCard(selectedMagicCard);
            }
        }
        else if (isPieceSkillReady && selectedHeroCard != null)
        {
            if (boardStatus[selectedBoardCoord.col][selectedBoardCoord.row] == null)
            {
                ResetBoardHighlighter();
            }
            else
            {
                selectedHeroCard.skills[0].Operate(selectedPieceScript, new BoardCoord[] { selectedBoardCoord });
            }
        }
        // 이동
        else if (isPieceSelected && selectedPieceScript.GetMovability() > 0 && selectedPieceScript.GetMovablePositions().Contains(selectedBoardCoord) && !GameManager.Instance.isMoved)
        {
            BoardManager.Instance.boardStatus[selectedPieceScript.GetPosition().col][selectedPieceScript.GetPosition().row] = null;
            BoardManager.Instance.boardStatus[selectedBoardCoord.col][selectedBoardCoord.row] = selectedPiece;
            selectedPiece.transform.position = selectedBoardCoord.GetBoardCoardVector3();
            selectedPieceScript.MovePosition(selectedBoardCoord);

            selectedPieceScript.SetStatus(Piece.StatusFlag.Moved);
            GameManager.Instance.isMoved = true;
        }
        // 공격
        else if (isPieceSelected && selectedPieceScript.GetAttackablePositions().Contains(selectedBoardCoord) && !GameManager.Instance.isMoved)
        {
            var targetPiece = GetPieceAt(selectedBoardCoord);
            targetPiece.DamageHP(selectedPieceScript.GetCurrentATK());
            targetPiece.UpdateStatus();

            if ((targetPiece.GetStatus() & Piece.StatusFlag.Dead) == Piece.StatusFlag.Dead)
            {
                BoardManager.Instance.boardStatus[selectedPieceScript.GetPosition().col][selectedPieceScript.GetPosition().row] = null;
                boardStatus[targetPiece.GetPosition().col][targetPiece.GetPosition().row] = selectedPiece;
                selectedPiece.transform.position = targetPiece.GetPosition().GetBoardCoardVector3();
                selectedPieceScript.MovePosition(targetPiece.GetPosition());
            }

            GameManager.Instance.isMoved = true;
        }
        // 피스 선택
        else
        {
            if (!SelectPiece(selectedBoardCoord))
            {
                return;
            }
            selectedPieceScript = selectedPiece.GetComponent <Piece>();
            selectedHeroCard    = selectedPieceScript.GetHeroCard();

            if (!GameManager.Instance.isMoved)
            {
                if (selectedPieceScript.GetMovability() > 0)
                {
                    HighlightBoard(selectedPieceScript.GetMovablePositions().ToList(), Action.Move);
                }
                HighlightBoard(selectedPieceScript.GetAttackablePositions().ToList(), Action.Attack);
            }
            return;
        }

        UnselectPiece();
    }