From 68f84507e91f19936dc7d1959f0320c43883f1b4 Mon Sep 17 00:00:00 2001 From: Marco Date: Sat, 6 Jan 2024 13:26:22 +0100 Subject: [PATCH] Fix promotions when tapping and fix handling of subsequently tapping two pieces of your color --- lib/chess/chess_square_outer_dragtarget.dart | 4 ++-- lib/chess_bloc/tap_bloc.dart | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/chess/chess_square_outer_dragtarget.dart b/lib/chess/chess_square_outer_dragtarget.dart index 29b5a24..bfa8919 100644 --- a/lib/chess/chess_square_outer_dragtarget.dart +++ b/lib/chess/chess_square_outer_dragtarget.dart @@ -32,10 +32,10 @@ class ChessSquareOuterDragTarget extends StatelessWidget { )) { var move = ChessMove( from: pieceDragged.fromSquare, to: pieceDragged.toSquare); - PromotionBloc.getInstance().add(PawnMovedToPromotionField( + PromotionBloc().add(PawnMovedToPromotionField( move: move, colorMoved: ChessBloc.myColor!)); } else if (coordinate != pieceDragged.fromSquare) { - ChessBloc.getInstance().add(OwnPieceMoved( + ChessBloc().add(OwnPieceMoved( startSquare: pieceDragged.fromSquare, endSquare: pieceDragged.toSquare)); } diff --git a/lib/chess_bloc/tap_bloc.dart b/lib/chess_bloc/tap_bloc.dart index 684ad7b..f89fc66 100644 --- a/lib/chess_bloc/tap_bloc.dart +++ b/lib/chess_bloc/tap_bloc.dart @@ -3,6 +3,7 @@ import 'dart:developer'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:mchess/chess_bloc/chess_bloc.dart'; import 'package:mchess/chess_bloc/chess_events.dart'; +import 'package:mchess/chess_bloc/promotion_bloc.dart'; import 'package:mchess/utils/chess_utils.dart'; class TapBloc extends Bloc { @@ -25,6 +26,8 @@ class TapBloc extends Bloc { ChessPiece? piece; if (ChessBloc.myColor != ChessBloc.turnColor) return; + if (event.pieceOnSquare != null && + ChessBloc.myColor != event.pieceOnSquare!.color) return; if (state.firstSquareTapped == null) { //first tap @@ -33,6 +36,13 @@ class TapBloc extends Bloc { piece = event.pieceOnSquare; } else { //second tap + if (event.pieceOnSquare?.color == ChessBloc.myColor) { + emit(TapState( + firstSquareTapped: event.tapped, + pieceOnFirstTappedSquare: event.pieceOnSquare, + secondSquareTapped: null)); + return; + } secondTappedSquare = event.tapped; } @@ -43,9 +53,9 @@ class TapBloc extends Bloc { ChessBloc.myColor!, event.tapped, )) { - ChessBloc().add(OwnPromotionPlayed( - pieceClass: state.pieceOnFirstTappedSquare!.pieceClass, - move: ChessMove(from: state.firstSquareTapped!, to: event.tapped))); + PromotionBloc().add(PawnMovedToPromotionField( + move: ChessMove(from: state.firstSquareTapped!, to: event.tapped), + colorMoved: ChessBloc.myColor!)); emit(TapState.init()); return; } else {