22
22
/* never gonna turn around, and, desert you. */
23
23
24
24
import { Color , PieceType , None } from './types'
25
+ import { ColorClass , PieceTypeClass } from './classtypes'
26
+ import { IntFlagEnum } from './enums'
25
27
26
28
/**
27
29
* @fileoverview
@@ -33,59 +35,6 @@ import { Color, PieceType, None } from './types'
33
35
* Syzygy tablebase probing, and XBoard/UCI engine communication.
34
36
*/
35
37
36
- /**
37
- * Instead of using the constructor, use the ColorClass.from() method instead
38
- * true instanceof ColorClass === true
39
- * false instanceof ColorClass === true
40
- * Everything else, even Object(Boolean), instanceof Color === false
41
- */
42
- class ColorClass extends Boolean {
43
- static from ( value ?: any ) : boolean {
44
- return Boolean ( value )
45
- }
46
-
47
- static [ Symbol . hasInstance ] ( value ?: unknown ) : value is boolean {
48
- return typeof value === 'boolean'
49
- }
50
-
51
- static readonly CorrespondingPythonClass = 'bool'
52
- static readonly WHITE : Color = true
53
- static readonly BLACK : Color = false
54
- }
55
-
56
- class PieceTypeClass extends Number {
57
- constructor ( ...args : any [ ] ) {
58
- super ( ...args )
59
-
60
- if ( ! Number . isInteger ( this . valueOf ( ) ) ) {
61
- throw RangeError ( 'Number created must be an integer' )
62
- } else if ( this . valueOf ( ) < 1 || this . valueOf ( ) > 6 ) {
63
- console . warn ( `PieceType value ${ this . valueOf ( ) } is outside of valid PieceType range` )
64
- }
65
- }
66
-
67
- static from ( value ?: any ) : number {
68
- return Number ( new PieceTypeClass ( value ) )
69
- }
70
-
71
- static [ Symbol . hasInstance ] ( value ?: unknown ) : boolean | 'outside of range' {
72
- if ( typeof value === 'number' && Number . isInteger ( value ) ) {
73
- return ( value >= 1 && value < 7 ) ? true : 'outside of range'
74
- } else {
75
- return false
76
- }
77
- }
78
-
79
- static readonly CorrespondingPythonClass = 'int'
80
- static readonly PAWN : PieceType = 1
81
- static readonly KNIGHT : PieceType = 2
82
- static readonly BISHOP : PieceType = 3
83
- static readonly ROOK : PieceType = 4
84
- static readonly QUEEN : PieceType = 5
85
- static readonly KING : PieceType = 6
86
- static readonly PIECE_TYPES : PieceType [ ] = [ 1 , 2 , 3 , 4 , 5 , 6 ]
87
- }
88
-
89
38
export const Chess = {
90
39
Color : ColorClass ,
91
40
isColor : ColorClass [ Symbol . hasInstance ] ,
@@ -139,24 +88,43 @@ export const Chess = {
139
88
/** The board part of the FEN for the standard chess starting position. */
140
89
STARTING_BOARD_FEN : 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR' ,
141
90
142
- // Status: CreateIntFlagEnum('Status', {
143
- // VALID: 0,
144
- // NO_WHITE_KING: 1 << 0,
145
- // NO_BLACK_KING: 1 << 1,
146
- // TOO_MANY_KINGS: 1 << 2,
147
- // TOO_MANY_WHITE_PAWNS: 1 << 3,
148
- // TOO_MANY_BLACK_PAWNS: 1 << 4,
149
- // PAWNS_ON_BACKRANK: 1 << 5,
150
- // TOO_MANY_WHITE_PIECES: 1 << 6,
151
- // TOO_MANY_BLACK_PIECES: 1 << 7,
152
- // BAD_CASTLING_RIGHTS: 1 << 8,
153
- // INVALID_EP_SQUARE: 1 << 9,
154
- // OPPOSITE_CHECK: 1 << 10,
155
- // EMPTY: 1 << 11,
156
- // RACE_CHECK: 1 << 12,
157
- // RACE_OVER: 1 << 13,
158
- // RACE_MATERIAL: 1 << 14,
159
- // TOO_MANY_CHECKERS: 1 << 15,
160
- // IMPOSSIBLE_CHECK: 1 << 16,
161
- // })
91
+ Status : new IntFlagEnum ( {
92
+ VALID : 0 ,
93
+ NO_WHITE_KING : 1 << 0 ,
94
+ NO_BLACK_KING : 1 << 1 ,
95
+ TOO_MANY_KINGS : 1 << 2 ,
96
+ TOO_MANY_WHITE_PAWNS : 1 << 3 ,
97
+ TOO_MANY_BLACK_PAWNS : 1 << 4 ,
98
+ PAWNS_ON_BACKRANK : 1 << 5 ,
99
+ TOO_MANY_WHITE_PIECES : 1 << 6 ,
100
+ TOO_MANY_BLACK_PIECES : 1 << 7 ,
101
+ BAD_CASTLING_RIGHTS : 1 << 8 ,
102
+ INVALID_EP_SQUARE : 1 << 9 ,
103
+ OPPOSITE_CHECK : 1 << 10 ,
104
+ EMPTY : 1 << 11 ,
105
+ RACE_CHECK : 1 << 12 ,
106
+ RACE_OVER : 1 << 13 ,
107
+ RACE_MATERIAL : 1 << 14 ,
108
+ TOO_MANY_CHECKERS : 1 << 15 ,
109
+ IMPOSSIBLE_CHECK : 1 << 16 ,
110
+ } ) ,
111
+
112
+ STATUS_VALID : 0 ,
113
+ STATUS_NO_WHITE_KING : 1 << 0 ,
114
+ STATUS_NO_BLACK_KING : 1 << 1 ,
115
+ STATUS_TOO_MANY_KINGS : 1 << 2 ,
116
+ STATUS_TOO_MANY_WHITE_PAWNS : 1 << 3 ,
117
+ STATUS_TOO_MANY_BLACK_PAWNS : 1 << 4 ,
118
+ STATUS_PAWNS_ON_BACKRANK : 1 << 5 ,
119
+ STATUS_TOO_MANY_WHITE_PIECES : 1 << 6 ,
120
+ STATUS_TOO_MANY_BLACK_PIECES : 1 << 7 ,
121
+ STATUS_BAD_CASTLING_RIGHTS : 1 << 8 ,
122
+ STATUS_INVALID_EP_SQUARE : 1 << 9 ,
123
+ STATUS_OPPOSITE_CHECK : 1 << 10 ,
124
+ STATUS_EMPTY : 1 << 11 ,
125
+ STATUS_RACE_CHECK : 1 << 12 ,
126
+ STATUS_RACE_OVER : 1 << 13 ,
127
+ STATUS_RACE_MATERIAL : 1 << 14 ,
128
+ STATUS_TOO_MANY_CHECKERS : 1 << 15 ,
129
+ STATUS_IMPOSSIBLE_CHECK : 1 << 16 ,
162
130
}
0 commit comments