Esempio n. 1
0
 public async UniTask OnPlayerMove(IMoveData moveData, History.Mode mode)
 {
     if (TurnManager.instance.IsGameOver())
     {
         buttonSave.interactable = false;
     }
 }
Esempio n. 2
0
        public async UniTask OnPlayerMove(IMoveData moveData, History.Mode mode)
        {
            var data = moveData as Core.MoveData;

            core.Move(data, mode);

            if (mode != History.Mode.Undo)
            {
                #region DO
                var piece = mailBox[data.from.x][data.from.y];
                mailBox[data.from.x][data.from.y] = null;
                piece.IncreaseSortOrder();

                // Nếu là AI hoặc Remote thì tô màu đích đến trước khi di chuyển quân cờ
                if (!TurnManager.instance.CurrentPlayerIsLocalHuman())
                {
                    moveTarget.position = data.to.ToVector3();
                }

                await piece.transform.Move(data.to.ToVector3(), pieceMoveSpeed);

                piece.DecreaseSortOrder();

                var opponent = mailBox[data.to.x][data.to.y];
                if (opponent)
                {
                    opponent.gameObject.SetActive(false);
                }
                (mailBox[data.to.x][data.to.y] = piece).hidden = false;
                moveTarget.position = data.to.ToVector3();
                #endregion
            }
            else
            {
                #region UNDO
                var piece = mailBox[data.to.x][data.to.y];
                if (data.capturedPiece != null)
                {
                    var opponent = data.capturedPiece.Value;
                    (mailBox[data.to.x][data.to.y] = pieces[opponent.color][opponent.name].Show(data.to.ToVector3()))
                    .hidden = opponent.hidden;
                }
                else
                {
                    mailBox[data.to.x][data.to.y] = null;
                }

                await piece.transform.Move(data.from.ToVector3(), pieceMoveSpeed);

                (mailBox[data.from.x][data.from.y] = piece).hidden = core[data.from.x, data.from.y].Value.hidden;
                moveTarget.position = data.from.ToVector3();
                #endregion
            }
        }
Esempio n. 3
0
        public async override UniTask OnPlayerMove(IMoveData moveData, History.Mode mode)
        {
            var data = moveData as Core.MoveData;

            if (mode == History.Mode.Undo)
            {
                emptyCells.Add(data.index);
            }
            else
            {
                emptyCells.Remove(data.index);
            }
        }
Esempio n. 4
0
        public async UniTask OnPlayerMove(IMoveData moveData, History.Mode mode)
        {
            var data = moveData as Core.MoveData;

            core.Move(data, mode);

            if (mode != History.Mode.Undo)
            {
                flag.position = data.index.ToVector3();
            }
            else
            {
                var t = TurnManager.instance;
                flag.position = t.moveCount != 0 ? (t[t.moveCount - 1] as Core.MoveData).index.ToVector3() : new Vector3(-1, -1);
            }
        }
Esempio n. 5
0
        public async UniTask OnPlayerMove(IMoveData moveData, History.Mode mode)
        {
            var data = moveData as Core.MoveData;

            core.Move(data, mode);

            if (mode != History.Mode.Undo)
            {
                pieceMap.SetTile(data.index.ToVector3Int(), pieces[(Symbol)data.playerID]);
                flag.position = data.index.ToVector3();
            }
            else
            {
                pieceMap.SetTile(data.index.ToVector3Int(), null);
                var t = TurnManager.instance;
                flag.position = t.moveCount != 0 ? (t[t.moveCount - 1] as Core.MoveData).index.ToVector3() : new Vector3(-1, -1);
            }
        }
Esempio n. 6
0
 public abstract UniTask OnPlayerMove(IMoveData data, History.Mode mode);
Esempio n. 7
0
        public async UniTask OnPlayerMove(IMoveData moveData, History.Mode mode)
        {
            var data = moveData as Core.MoveData;

            core.Move(data, mode);

            var from = data.from.ToMailBoxIndex();
            var to   = data.to.ToMailBoxIndex();

            if (mode != History.Mode.Undo)
            {
                #region DO
                var piece = mailBox[from.x][from.y];
                mailBox[from.x][from.y] = null;

                // Nếu là AI hoặc Remote thì tô màu đích đến trước khi di chuyển quân cờ
                if (!TurnManager.instance.CurrentPlayerIsLocalHuman())
                {
                    moveTarget.position = to.ToVector3();
                }

                await piece.transform.Move(to.ToVector3(), pieceMoveSpeed);

                #region Đặt quân vào ô vị trí {to}
                if (data.promotedName != null)
                {
                    pieces[piece.color][piece.name].Recycle(piece);
                    piece = pieces[(Color)data.playerID][data.promotedName.Value].Get(to.ToVector3());
                }

                var opponent = mailBox[to.x][to.y];
                if (opponent)
                {
                    pieces[opponent.color][opponent.name].Recycle(opponent);
                }
                mailBox[to.x][to.y] = piece;
                moveTarget.position = to.ToVector3();
                #endregion

                #region Xử lý nếu có bắt quân đối phương
                if (data.capturedName != null)
                {
                    if (data.enpassantCapturedIndex != null)
                    {
                        var index = data.enpassantCapturedIndex.Value.ToMailBoxIndex();
                        opponent = mailBox[index.x][index.y];
                        mailBox[index.x][index.y] = null;
                        pieces[opponent.color][opponent.name].Recycle(opponent);
                    }
                }
                #endregion

                if (data.castling != Core.MoveData.Castling.None)
                {
                    var r    = Core.CASTLING_ROOK_MOVEMENTS[(Color)data.playerID][data.castling];
                    var rook = mailBox[r.m_from.x][r.m_from.y];
                    mailBox[r.m_from.x][r.m_from.y] = null;
                    await rook.transform.Move(r.m_to.ToVector3(), pieceMoveSpeed);

                    mailBox[r.m_to.x][r.m_to.y] = rook;
                }
                #endregion
            }
            else
            {
                #region UNDO
                var piece = mailBox[to.x][to.y];

                #region Lấy quân {data.name} hoặc {data.promotedName} ra khỏi ô vị trí {to}
                if (data.promotedName != null)
                {
                    pieces[piece.color][piece.name].Recycle(piece);
                    piece = pieces[(Color)data.playerID][data.name].Get(new Vector3(to.x, to.y));
                }
                #endregion

                #region Khôi phục lại quân đối phương bị bắt nếu có
                if (data.capturedName != null)
                {
                    if (data.enpassantCapturedIndex != null)
                    {
                        mailBox[to.x][to.y] = null;
                        var index = data.enpassantCapturedIndex.Value.ToMailBoxIndex();
                        mailBox[index.x][index.y] = pieces[(Color)(1 - data.playerID)][PieceName.Pawn].Get(index.ToVector3());
                    }
                    else
                    {
                        mailBox[to.x][to.y] = pieces[(Color)(1 - data.playerID)][data.capturedName.Value].Get(to.ToVector3());
                    }
                }
                else
                {
                    mailBox[to.x][to.y] = null;
                }
                #endregion

                // Nếu là AI hoặc Remote thì tô màu đích đến trước khi di chuyển quân cờ
                if (!TurnManager.instance.CurrentPlayerIsLocalHuman())
                {
                    moveTarget.position = from.ToVector3();
                }
                await piece.transform.Move(from.ToVector3(), pieceMoveSpeed);

                mailBox[from.x][from.y] = piece;

                if (data.castling != Core.MoveData.Castling.None)
                {
                    var r    = Core.CASTLING_ROOK_MOVEMENTS[(Color)data.playerID][data.castling];
                    var rook = mailBox[r.m_to.x][r.m_to.y];
                    mailBox[r.m_to.x][r.m_to.y] = null;
                    await rook.transform.Move(from.ToVector3(), pieceMoveSpeed);

                    mailBox[r.m_from.x][r.m_from.y] = rook;
                }
                #endregion
            }
        }
Esempio n. 8
0
 public async UniTask OnPlayerMove(IMoveData moveData, History.Mode mode)
 {
 }