public async UniTask OnPlayerMove(IMoveData moveData, History.Mode mode) { if (TurnManager.instance.IsGameOver()) { buttonSave.interactable = false; } }
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 } }
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); } }
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); } }
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); } }
public abstract UniTask OnPlayerMove(IMoveData data, History.Mode mode);
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 } }
public async UniTask OnPlayerMove(IMoveData moveData, History.Mode mode) { }