static void NormalMove(TaskCompletionSource <bool> tcs, bool skipMovement) { Piece piece = Board.instance.selectedPiece; AffectedPiece pieceMoving = piece.CreateAffected(); pieceMoving.piece = piece; pieceMoving.from = piece.tile; pieceMoving.to = Board.instance.tiles[Board.instance.selectedMove.pos]; changes.Insert(0, pieceMoving); piece.tile.content = null; piece.tile = pieceMoving.to; if (piece.tile.content != null) { Piece deadPiece = piece.tile.content; AffectedEnemy pieceKilled = new AffectedEnemy(); pieceKilled.piece = deadPiece; pieceKilled.from = pieceKilled.to = piece.tile; changes.Add(pieceKilled); deadPiece.gameObject.SetActive(false); pieceKilled.index = deadPiece.team.IndexOf(deadPiece); deadPiece.team.RemoveAt(pieceKilled.index); } piece.tile.content = piece; piece.wasMoved = true; if (skipMovement) { piece.wasMoved = true; // Vector3 v3Pos = new Vector3(Board.instance.selectedMove.pos.x, Board.instance.selectedMove.pos.y, 0); //piece.transform.position = v3Pos; tcs.SetResult(true); } else { Vector3 v3Pos = new Vector3(Board.instance.selectedMove.pos.x, Board.instance.selectedMove.pos.y, 0); float timing = Vector3.Distance (piece.transform.position, v3Pos) * 0.5f; LeanTween.move(piece.gameObject, v3Pos, timing). setOnComplete(() => { tcs.SetResult(true); }); } }
static void EnPassant(TaskCompletionSource <bool> tcs, bool skipMovement) { Piece pawn = Board.instance.selectedPiece; Vector2Int direction = pawn.maxTeam ? new Vector2Int(0, -1) : new Vector2Int(0, 1); Tile enemy = Board.instance.tiles[Board.instance.selectedMove.pos + direction]; AffectedEnemy affectedEnemy = new AffectedEnemy(); affectedEnemy.from = affectedEnemy.to = enemy; affectedEnemy.piece = enemy.content; affectedEnemy.index = affectedEnemy.piece.team.IndexOf(affectedEnemy.piece); affectedEnemy.piece.team.RemoveAt(affectedEnemy.index); changes.Add(affectedEnemy); enemy.content.gameObject.SetActive(false); enemy.content = null; NormalMove(tcs, skipMovement); }