74 lines
1.9 KiB
Dart
74 lines
1.9 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:mchess/chess_bloc/chess_events.dart';
|
|
import 'package:mchess/chessapp/chess_utils.dart';
|
|
import 'package:mchess/connection/ws_connection.dart';
|
|
|
|
class ChessBloc extends Bloc<ChessEvent, ChessBoardState> {
|
|
static final ChessBloc _instance = ChessBloc._internal();
|
|
|
|
ChessBloc._internal() : super(ChessBoardState.init()) {
|
|
on<PieceMoved>(moveHandler);
|
|
}
|
|
|
|
factory ChessBloc.getInstance() {
|
|
return ChessBloc();
|
|
}
|
|
|
|
factory ChessBloc() {
|
|
return _instance;
|
|
}
|
|
|
|
FutureOr<void> moveHandler(PieceMoved event, Emitter<ChessBoardState> emit) {
|
|
Map<ChessCoordinate, ChessPiece> newPosition = {};
|
|
|
|
ServerConnection.getInstance().send(
|
|
"from: ${event.startSquare.toString()} to: ${event.endSquare.toString()}");
|
|
|
|
newPosition[event.endSquare] = state.position[event.startSquare]!;
|
|
newPosition[event.startSquare] = const ChessPiece.none();
|
|
|
|
print('emitting new state with position $newPosition');
|
|
emit(ChessBoardState(
|
|
state.flipped,
|
|
ChessColor.black,
|
|
newPosition,
|
|
));
|
|
}
|
|
|
|
bool preCheckHandler(
|
|
PreCheckMove event,
|
|
) {
|
|
print('Pretending to check a move before you drop a piece');
|
|
return true;
|
|
}
|
|
}
|
|
|
|
class ChessBoardState {
|
|
final bool flipped;
|
|
final ChessColor turnColor;
|
|
final Map<ChessCoordinate, ChessPiece> position;
|
|
|
|
ChessBoardState._(this.flipped, this.turnColor, this.position);
|
|
|
|
factory ChessBoardState(
|
|
bool flipped,
|
|
ChessColor turnColor,
|
|
Map<ChessCoordinate, ChessPiece> position,
|
|
) {
|
|
return ChessBoardState._(flipped, turnColor, position);
|
|
}
|
|
|
|
factory ChessBoardState.init() {
|
|
bool flipped = false;
|
|
ChessColor turnColor = ChessColor.white;
|
|
Map<ChessCoordinate, ChessPiece> position = {};
|
|
|
|
position[ChessCoordinate(1, 1)] =
|
|
ChessPiece(ChessPieceName.blackKing, ChessColor.black);
|
|
|
|
return ChessBoardState._(flipped, turnColor, position);
|
|
}
|
|
}
|