diff --git a/lib/chess/chess_square.dart b/lib/chess/chess_square.dart index e46b7e2..5b4046e 100644 --- a/lib/chess/chess_square.dart +++ b/lib/chess/chess_square.dart @@ -83,8 +83,12 @@ class ChessSquare extends StatelessWidget { } }, builder: (context, candidateData, rejectedData) { - var maxDrags = - kDebugMode ? 1 : (ChessBloc.turnColor == ChessBloc.myColor ? 1 : 0); + var maxDrags = kDebugMode + ? 1 + : ((ChessBloc.turnColor == ChessBloc.myColor) && + (containedPiece?.color == ChessBloc.turnColor) + ? 1 + : 0); return Container( color: color, diff --git a/lib/chess_bloc/chess_bloc.dart b/lib/chess_bloc/chess_bloc.dart index 4d7acae..fe3bf62 100644 --- a/lib/chess_bloc/chess_bloc.dart +++ b/lib/chess_bloc/chess_bloc.dart @@ -36,6 +36,7 @@ class ChessBloc extends Bloc { } void initBoard(InitBoard event, Emitter emit) { + turnColor = ChessColor.white; ChessPosition.getInstance().resetToStartingPosition(); emit(ChessBoardState(ChessColor.white, ChessColor.white, ChessPosition.getInstance().currentPosition)); diff --git a/lib/chess_bloc/promotion_bloc.dart b/lib/chess_bloc/promotion_bloc.dart index 4a6498c..ffb84ad 100644 --- a/lib/chess_bloc/promotion_bloc.dart +++ b/lib/chess_bloc/promotion_bloc.dart @@ -16,6 +16,14 @@ class PromotionBloc extends Bloc { PawnMovedToPromotionField event, Emitter emit, ) { + switch (event.colorMoved) { + case ChessColor.white: + if (event.move.from.row != 7) return; + break; + case ChessColor.black: + if (event.move.from.row != 2) return; + break; + } move = event.move; emit(PromotionState( showPromotionDialog: true, colorMoved: event.colorMoved));