@@ -92,6 +92,7 @@ public virtual int Eval(Board board, PlyData plyData = null)
9292 var pawns = _evalPawns . PawnEval ( board ) ;
9393 if ( plyData == null ) { plyData = _plyData ; }
9494
95+ plyData . EvalResults . MaterialPawnsApply ( board , material , pawns , DrawScore ) ;
9596 EvalAdvanced ( board , plyData , material , pawns ) ;
9697 return plyData . EvalResults . Score ;
9798 }
@@ -107,36 +108,31 @@ public void EvalAdvanced(Board board, PlyData plyData, MaterialResults material,
107108 //mark that advanced eval terms are from this ply
108109 evalInfo . LazyAge = 0 ;
109110
110- //set up
111- var attacksWhite = evalInfo . Attacks [ ( int ) Player . White ] ;
112- var attacksBlack = evalInfo . Attacks [ ( int ) Player . Black ] ;
111+ plyData . AttacksWhite . Initialize ( board ) ;
112+ plyData . AttacksBlack . Initialize ( board ) ;
113+ var whiteAttackInfo = plyData . AttacksWhite ;
114+ var blackAttackInfo = plyData . AttacksBlack ;
113115
114- attacksWhite . PawnEast = board [ Player . White , PieceType . Pawn ] . ShiftDirNE ( ) ;
115- attacksWhite . PawnWest = board [ Player . White , PieceType . Pawn ] . ShiftDirNW ( ) ;
116- attacksBlack . PawnEast = board [ Player . Black , PieceType . Pawn ] . ShiftDirSE ( ) ;
117- attacksBlack . PawnWest = board [ Player . Black , PieceType . Pawn ] . ShiftDirSW ( ) ;
118-
119- attacksWhite . King = Attacks . KingAttacks ( board . KingPosition ( Player . White ) ) ;
120- attacksBlack . King = Attacks . KingAttacks ( board . KingPosition ( Player . Black ) ) ;
116+
121117
122- _evalMobility . EvaluateMyPieces ( board , Player . White , evalInfo ) ;
123- _evalMobility . EvaluateMyPieces ( board , Player . Black , evalInfo ) ;
118+ Bitboard whiteAttackers ;
119+ Bitboard blackAttackers ;
124120
125- _evalKing . EvaluateMyKingAttack ( board , Player . White , evalInfo ) ;
126- _evalKing . EvaluateMyKingAttack ( board , Player . Black , evalInfo ) ;
121+ var whiteMobility = _evalMobility . EvaluateMyPieces ( board , Player . White , evalInfo , plyData , out whiteAttackers ) ;
122+ var blackMobility = _evalMobility . EvaluateMyPieces ( board , Player . Black , evalInfo , plyData , out blackAttackers ) ;
123+ evalInfo . Mobility = whiteMobility . Subtract ( blackMobility ) ;
127124
125+ var whiteKingAttack = _evalKing . EvaluateMyKingAttack ( board , Player . White , evalInfo , plyData , whiteAttackers ) ;
126+ var blackKingAttack = _evalKing . EvaluateMyKingAttack ( board , Player . Black , evalInfo , plyData , blackAttackers ) ;
127+ evalInfo . KingAttack = whiteKingAttack - blackKingAttack ;
128128
129129 //first check for unstoppable pawns, if none, then eval normal passed pawns.
130130 evalInfo . PawnsPassed = PawnEvaluator . EvalUnstoppablePawns ( board , pawns . PassedPawns , pawns . Candidates ) ;
131131 if ( evalInfo . PawnsPassed == 0 )
132132 {
133- evalInfo . PawnsPassed = this . _evalPawns . EvalPassedPawns ( board , evalInfo . Attacks , pawns . PassedPawns , pawns . Candidates , evalInfo . Workspace ) ; ;
133+ evalInfo . PawnsPassed = this . _evalPawns . EvalPassedPawns ( board , plyData , pawns . PassedPawns , pawns . Candidates , evalInfo . Workspace ) ; ;
134134 }
135135
136- //evalInfo.PawnsPassed = this._evalPawns.EvalPassedPawns(board, evalInfo.Attacks, pawns.PassedPawns, pawns.Candidates, evalInfo.Workspace); ;
137-
138-
139-
140136 //shelter storm;
141137 if ( material . DoShelter )
142138 {
@@ -155,14 +151,12 @@ public void EvalAdvanced(Board board, PlyData plyData, MaterialResults material,
155151 if ( PcSqEvaluator . UseEndGamePcSq ( board , Player . White , out endGamePcSq ) )
156152 {
157153 evalInfo . PcSq = endGamePcSq ;
158- evalInfo . Attacks [ 0 ] . Mobility = 0 ;
159- evalInfo . Attacks [ 1 ] . Mobility = 0 ;
154+ evalInfo . Mobility = 0 ;
160155 }
161156 else if ( PcSqEvaluator . UseEndGamePcSq ( board , Player . Black , out endGamePcSq ) )
162157 {
163158 evalInfo . PcSq = endGamePcSq . Negate ( ) ;
164- evalInfo . Attacks [ 0 ] . Mobility = 0 ;
165- evalInfo . Attacks [ 1 ] . Mobility = 0 ;
159+ evalInfo . Mobility = 0 ;
166160 }
167161
168162
@@ -220,81 +214,6 @@ protected virtual float CalcStartWeight(int basicMaterialCount)
220214
221215 }
222216
223-
224- public class ChessEvalAttackInfo
225- {
226- public Bitboard PawnEast ;
227- public Bitboard PawnWest ;
228-
229- public Bitboard Knight ;
230- public Bitboard Knight2 ;
231- public Bitboard Bishop ;
232-
233- public Bitboard Rook ;
234- public Bitboard Rook2 ;
235- public Bitboard Queen ;
236- public Bitboard King ;
237-
238- public PhasedScore Mobility ;
239-
240- public int KingQueenTropism ;
241- public int KingAttackerWeight ;
242- public int KingAttackerCount ;
243- public int KingAttackerScore ;
244-
245- public void Reset ( )
246- {
247- PawnEast = Bitboard . Empty ;
248- PawnWest = Bitboard . Empty ;
249- Knight = Bitboard . Empty ;
250- Knight2 = Bitboard . Empty ;
251- Bishop = Bitboard . Empty ;
252- Rook = Bitboard . Empty ;
253- Rook2 = Bitboard . Empty ;
254- Queen = Bitboard . Empty ;
255- King = Bitboard . Empty ;
256- Mobility = 0 ;
257- KingQueenTropism = 24 ; //init to far away.
258- KingAttackerWeight = 0 ;
259- KingAttackerCount = 0 ;
260- KingAttackerScore = 0 ;
261- }
262-
263- public Bitboard All ( )
264- {
265- return PawnEast | PawnWest | Knight | Knight2 | Bishop | Rook | Rook2 | Queen | King ;
266- }
267-
268- public int AttackCountTo ( Position pos )
269- {
270- return 0
271- + ( int ) ( ( ( ulong ) PawnEast >> ( int ) pos ) & 1 )
272- + ( int ) ( ( ( ulong ) PawnWest >> ( int ) pos ) & 1 )
273- + ( int ) ( ( ( ulong ) Knight >> ( int ) pos ) & 1 )
274- + ( int ) ( ( ( ulong ) Knight2 >> ( int ) pos ) & 1 )
275- + ( int ) ( ( ( ulong ) Bishop >> ( int ) pos ) & 1 )
276- + ( int ) ( ( ( ulong ) Rook >> ( int ) pos ) & 1 )
277- + ( int ) ( ( ( ulong ) Rook2 >> ( int ) pos ) & 1 )
278- + ( int ) ( ( ( ulong ) Queen >> ( int ) pos ) & 1 )
279- + ( int ) ( ( ( ulong ) King >> ( int ) pos ) & 1 ) ;
280- }
281-
282- public ChessEvalAttackInfo Reverse ( )
283- {
284- return new ChessEvalAttackInfo ( )
285- {
286- PawnEast = PawnEast . Reverse ( ) ,
287- PawnWest = PawnWest . Reverse ( ) ,
288- Knight = Knight . Reverse ( ) ,
289- Knight2 = Knight2 . Reverse ( ) ,
290- Bishop = Bishop . Reverse ( ) ,
291- Rook = Rook . Reverse ( ) ,
292- Rook2 = Rook2 . Reverse ( ) ,
293- Queen = Queen . Reverse ( ) ,
294- King = King . Reverse ( )
295- } ;
296- }
297- }
298-
217+
299218
300219}
0 commit comments