@@ -2,90 +2,120 @@ import MapFrame from "./MapFrame";
22import { GameMap } from "./GameMap" ;
33import { CalculateChessMoves } from "./CalculateChessMoves" ;
44export class ChessMoveProvider {
5- public static Provide ( gameMap : GameMap , item : MapFrame , markedItems : string [ ] , setMarkedItems : React . Dispatch < string [ ] > , setMarkedPossibleCastles : React . Dispatch < string [ ] > ) {
6- let possibleMoves : Array < string > ;
7- let possibleCastles : Array < string > ;
8- let selectedFrame = gameMap . mapFrames . get ( item . positionName ) ;
9- if ( markedItems [ 0 ] !== undefined ) {
10- markedItems . forEach ( ( markedItem ) => {
11- gameMap . mapFrames . get ( markedItem ) ?. SetIsMarked ( false ) ;
12- } )
5+ public static Provide (
6+ gameMap : GameMap ,
7+ item : MapFrame ,
8+ markedItems : string [ ] ,
9+ setMarkedItems : React . Dispatch < string [ ] > ,
10+ setMarkedPossibleCastles : React . Dispatch < string [ ] >
11+ ) {
12+ let possibleMoves : Array < string > = [ ] ;
13+ let possibleCastles : Array < string > = [ ] ;
14+ let isKingInCheckWithoutThisPiecePosition : boolean = false ;
15+ let selectedFrame = gameMap . mapFrames . get ( item . positionName ) ;
16+ let pieceColor : "white" | "black" =
17+ selectedFrame ?. piece ?. color === "black"
18+ ? selectedFrame . piece . color
19+ : "white" ;
20+ if ( markedItems [ 0 ] !== undefined ) {
21+ markedItems . forEach ( ( markedItem ) => {
22+ gameMap . mapFrames . get ( markedItem ) ?. SetIsMarked ( false ) ;
23+ } ) ;
24+ }
25+ function setPossibleMoves ( ) {
26+ if ( possibleMoves ) {
27+ possibleMoves . forEach ( ( cordinate ) => {
28+ gameMap . mapFrames . get ( cordinate ) ?. SetIsMarked ( true ) ;
29+ } ) ;
30+ setMarkedItems ( possibleMoves ) ;
31+ }
32+ }
33+ function setPossibleCastles ( ) {
34+ if ( possibleCastles ) {
35+ possibleCastles . forEach ( ( cordinate ) => {
36+ gameMap . mapFrames . get ( cordinate ) ?. SetIsMarkedForCastle ( true ) ;
37+ } ) ;
38+ }
39+ setMarkedPossibleCastles ( possibleCastles ) ;
40+ }
41+
42+ console . log ( selectedFrame ?. piece ?. name ) ;
43+ console . log ( selectedFrame ?. positionName ) ;
44+
45+
46+ if ( selectedFrame ?. piece ?. name !== "King" ) {
47+ isKingInCheckWithoutThisPiecePosition = gameMap . isThreatenedPosition (
48+ pieceColor === "white"
49+ ? gameMap . whiteKingLocation
50+ : gameMap . blackKingLocation ,
51+ pieceColor ,
52+ selectedFrame ?. positionName ,
53+ "" ,
54+ true
55+ ) ;
56+
57+ if ( isKingInCheckWithoutThisPiecePosition ) {
58+ return [ ] ;
1359 }
14- function setPossibleMoves ( ) {
15- if ( possibleMoves ) {
16- possibleMoves . forEach ( ( cordinate ) => {
17- gameMap . mapFrames . get ( cordinate ) ?. SetIsMarked ( true ) ;
18- } )
19- setMarkedItems ( possibleMoves ) ;
20- }
60+ }
61+
62+ switch ( item . piece ?. name ) {
63+ case "Pawn" :
64+ if ( selectedFrame ) {
65+ possibleMoves = CalculateChessMoves . Pawn ( gameMap , selectedFrame ) ;
2166 }
22- function setPossibleCastles ( ) {
23- if ( possibleCastles ) {
24- possibleCastles . forEach ( ( cordinate ) => {
25- gameMap . mapFrames . get ( cordinate ) ?. SetIsMarkedForCastle ( true ) ;
26- } )
27- }
28- setMarkedPossibleCastles ( possibleCastles ) ;
67+ break ;
68+ case "Knight" :
69+ if ( selectedFrame ) {
70+ possibleMoves = CalculateChessMoves . Knight ( gameMap , selectedFrame ) ;
2971 }
30- switch ( item . piece ?. name ) {
31- case "Pawn" :
32- if ( selectedFrame ) {
33- possibleMoves = CalculateChessMoves . Pawn ( gameMap , selectedFrame ) ;
34-
35- setPossibleMoves ( ) ;
36-
37- return possibleMoves ;
38- }
39- break ;
40- case "Knight" :
41- if ( selectedFrame ) {
42- possibleMoves = CalculateChessMoves . Knight ( gameMap , selectedFrame ) ;
43-
44- setPossibleMoves ( ) ;
45-
46- return possibleMoves ;
47- }
48- break ;
49- case "Bishop" :
50- if ( selectedFrame ) {
51- possibleMoves = CalculateChessMoves . Bishop ( gameMap , selectedFrame ) ;
52-
53- setPossibleMoves ( ) ;
54-
55- return possibleMoves ;
56- }
57- break ;
58- case "Rook" :
59- if ( selectedFrame ) {
60- possibleMoves = CalculateChessMoves . Rook ( gameMap , selectedFrame ) ;
61-
62- setPossibleMoves ( ) ;
72+ break ;
73+ case "Bishop" :
74+ if ( selectedFrame ) {
75+ possibleMoves = CalculateChessMoves . Bishop ( gameMap , selectedFrame ) ;
76+ }
77+ break ;
78+ case "Rook" :
79+ if ( selectedFrame ) {
80+ possibleMoves = CalculateChessMoves . Rook ( gameMap , selectedFrame ) ;
81+ }
82+ break ;
83+ case "Queen" :
84+ if ( selectedFrame ) {
85+ possibleMoves = CalculateChessMoves . Queen ( gameMap , selectedFrame ) ;
86+ }
87+ break ;
88+ case "King" :
89+ if ( selectedFrame ) {
90+ possibleMoves = CalculateChessMoves . King ( gameMap , selectedFrame ) ;
91+ possibleCastles = CalculateChessMoves . KingCastles (
92+ gameMap ,
93+ selectedFrame
94+ ) ;
6395
64- return possibleMoves ;
65- }
66- break ;
67- case "Queen" :
68- if ( selectedFrame ) {
69- possibleMoves = CalculateChessMoves . Queen ( gameMap , selectedFrame ) ;
96+ setPossibleMoves ( ) ;
97+ setPossibleCastles ( ) ;
7098
71- setPossibleMoves ( ) ;
99+ return possibleMoves ;
100+ }
101+ break ;
102+ }
72103
73- return possibleMoves ;
74- }
75- break ;
76- case "King" :
77- if ( selectedFrame ) {
78- possibleMoves = CalculateChessMoves . King ( gameMap , selectedFrame ) ;
79- possibleCastles = CalculateChessMoves . KingCastles ( gameMap , selectedFrame ) ;
80- console . log ( possibleCastles ) ;
81-
104+ if ( gameMap . isKingInCheck ( ) ) {
105+ possibleMoves = possibleMoves . filter ( ( move ) => {
106+ return ! gameMap . isThreatenedPosition (
107+ pieceColor === "white"
108+ ? gameMap . whiteKingLocation
109+ : gameMap . blackKingLocation ,
110+ pieceColor ,
111+ "" ,
112+ move
113+ ) ;
114+ } ) ;
115+ }
82116
83- setPossibleMoves ( ) ;
84- setPossibleCastles ( ) ;
117+ setPossibleMoves ( ) ;
85118
86- return possibleMoves ;
87- }
88- break ;
89- }
90- }
91- }
119+ return possibleMoves ;
120+ }
121+ }
0 commit comments