@lichess-org/chessground 9.8.5 → 9.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/svg.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { key2pos } from './util.js';
2
2
  import { sameEndpoints, sameColor, } from './draw.js';
3
+ const angleSlotVals = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
3
4
  export { createElement, setAttributes };
4
5
  export function createDefs() {
5
6
  const defs = createElement('defs');
@@ -14,7 +15,7 @@ export function renderSvg(state, els) {
14
15
  if (!s.dest)
15
16
  continue;
16
17
  const sources = dests.get(s.dest) ?? new Set(), from = pos2user(orient(key2pos(s.orig), state.orientation), bounds), to = pos2user(orient(key2pos(s.dest), state.orientation), bounds);
17
- sources.add(moveAngle(from, to));
18
+ sources.add(angleToSlot(moveAngle(from, to)));
18
19
  dests.set(s.dest, sources);
19
20
  }
20
21
  const shapes = [];
@@ -25,14 +26,14 @@ export function renderSvg(state, els) {
25
26
  shape: s,
26
27
  current: false,
27
28
  pendingErase: isPendingErase,
28
- hash: shapeHash(s, isShort(s.dest, dests), false, bounds, isPendingErase),
29
+ hash: shapeHash(s, isShort(s.dest, dests), false, bounds, isPendingErase, angleCount(s.dest, dests)),
29
30
  });
30
31
  }
31
32
  if (cur && pendingEraseIdx === -1)
32
33
  shapes.push({
33
34
  shape: cur,
34
35
  current: true,
35
- hash: shapeHash(cur, isShort(cur.dest, dests), true, bounds, false),
36
+ hash: shapeHash(cur, isShort(cur.dest, dests), true, bounds, false, angleCount(cur.dest, dests)),
36
37
  pendingErase: false,
37
38
  });
38
39
  const fullHash = shapes.map(sc => sc.hash).join(';');
@@ -102,13 +103,14 @@ function syncShapes(shapes, els, renderShape) {
102
103
  }
103
104
  }
104
105
  }
105
- function shapeHash({ orig, dest, brush, piece, modifiers, customSvg, label, below }, shorten, current, bounds, pendingErase) {
106
+ function shapeHash({ orig, dest, brush, piece, modifiers, customSvg, label, below }, shorten, current, bounds, pendingErase, angleCountOfDest) {
106
107
  // a shape and an overlay svg share a lifetime and have the same cgHash attribute
107
108
  return [
108
109
  bounds.width,
109
110
  bounds.height,
110
111
  current,
111
112
  pendingErase && 'pendingErase',
113
+ angleCountOfDest,
112
114
  orig,
113
115
  dest,
114
116
  brush,
@@ -122,12 +124,8 @@ function shapeHash({ orig, dest, brush, piece, modifiers, customSvg, label, belo
122
124
  .filter(x => x)
123
125
  .join(',');
124
126
  }
125
- function pieceHash(piece) {
126
- return [piece.color, piece.role, piece.scale].filter(x => x).join(',');
127
- }
128
- function modifiersHash(m) {
129
- return [m.lineWidth, m.hilite].filter(x => x).join(',');
130
- }
127
+ const pieceHash = (piece) => [piece.color, piece.role, piece.scale].filter(x => x).join(',');
128
+ const modifiersHash = (m) => [m.lineWidth, m.hilite].filter(x => x).join(',');
131
129
  function textHash(s) {
132
130
  // Rolling hash with base 31 (cf. https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript)
133
131
  let h = 0;
@@ -240,15 +238,13 @@ function renderLabel(label, hash, from, to, slots, corner) {
240
238
  g.appendChild(labelEl);
241
239
  return g;
242
240
  }
243
- function orient(pos, color) {
244
- return color === 'white' ? pos : [7 - pos[0], 7 - pos[1]];
245
- }
246
- function isShort(dest, dests) {
247
- return true === (dest && dests.has(dest) && dests.get(dest).size > 1);
248
- }
249
- function createElement(tagName) {
250
- return document.createElementNS('http://www.w3.org/2000/svg', tagName);
251
- }
241
+ const orient = (pos, color) => (color === 'white' ? pos : [7 - pos[0], 7 - pos[1]]);
242
+ const mod = (n, m) => ((n % m) + m) % m;
243
+ const rotateAngleSlot = (slot, steps) => mod(slot + steps, 16);
244
+ const anyTwoCloserThan90Degrees = (slots) => [...slots].some(slot => [-3, -2, -1, 1, 2, 3].some(i => slots.has(rotateAngleSlot(slot, i))));
245
+ const isShort = (dest, dests) => !!dest && dests.has(dest) && anyTwoCloserThan90Degrees(dests.get(dest));
246
+ const createElement = (tagName) => document.createElementNS('http://www.w3.org/2000/svg', tagName);
247
+ const angleCount = (dest, dests) => dest && dests.has(dest) ? dests.get(dest).size : 0;
252
248
  function setAttributes(el, attrs) {
253
249
  for (const key in attrs) {
254
250
  if (Object.prototype.hasOwnProperty.call(attrs, key))
@@ -256,32 +252,22 @@ function setAttributes(el, attrs) {
256
252
  }
257
253
  return el;
258
254
  }
259
- function makeCustomBrush(base, modifiers) {
260
- return !modifiers
261
- ? base
262
- : {
263
- color: base.color,
264
- opacity: Math.round(base.opacity * 10) / 10,
265
- lineWidth: Math.round(modifiers.lineWidth || base.lineWidth),
266
- key: [base.key, modifiers.lineWidth].filter(x => x).join(''),
267
- };
268
- }
269
- function circleWidth() {
270
- return [3 / 64, 4 / 64];
271
- }
272
- function lineWidth(brush, current) {
273
- return ((brush.lineWidth || 10) * (current ? 0.85 : 1)) / 64;
274
- }
255
+ const makeCustomBrush = (base, modifiers) => !modifiers
256
+ ? base
257
+ : {
258
+ color: base.color,
259
+ opacity: Math.round(base.opacity * 10) / 10,
260
+ lineWidth: Math.round(modifiers.lineWidth || base.lineWidth),
261
+ key: [base.key, modifiers.lineWidth].filter(x => x).join(''),
262
+ };
263
+ const circleWidth = () => [3 / 64, 4 / 64];
264
+ const lineWidth = (brush, current) => ((brush.lineWidth || 10) * (current ? 0.85 : 1)) / 64;
275
265
  function hiliteOf(shape) {
276
266
  const hilite = shape.modifiers?.hilite;
277
267
  return { key: hilite && `hilite-${hilite.replace('#', '')}`, color: hilite };
278
268
  }
279
- function opacity(brush, current, pendingErase) {
280
- return (brush.opacity || 1) * (pendingErase ? 0.6 : current ? 0.9 : 1);
281
- }
282
- function arrowMargin(shorten) {
283
- return (shorten ? 20 : 10) / 64;
284
- }
269
+ const opacity = (brush, current, pendingErase) => (brush.opacity || 1) * (pendingErase ? 0.6 : current ? 0.9 : 1);
270
+ const arrowMargin = (shorten) => (shorten ? 20 : 10) / 64;
285
271
  function pos2user(pos, bounds) {
286
272
  const xScale = Math.min(1, bounds.width / bounds.height);
287
273
  const yScale = Math.min(1, bounds.height / bounds.width);
@@ -303,13 +289,9 @@ function filterBox(from, to) {
303
289
  stroke: 'none',
304
290
  });
305
291
  }
306
- function moveAngle(from, to, asSlot = true) {
307
- const angle = Math.atan2(to[1] - from[1], to[0] - from[0]) + Math.PI;
308
- return asSlot ? (Math.round((angle * 8) / Math.PI) + 16) % 16 : angle;
309
- }
310
- function dist(from, to) {
311
- return Math.sqrt([from[0] - to[0], from[1] - to[1]].reduce((acc, x) => acc + x * x, 0));
312
- }
292
+ const angleToSlot = (angle) => mod(Math.round((angle * 8) / Math.PI), 16);
293
+ const moveAngle = (from, to) => Math.atan2(to[1] - from[1], to[0] - from[0]) + Math.PI;
294
+ const dist = (from, to) => Math.sqrt([from[0] - to[0], from[1] - to[1]].reduce((acc, x) => acc + x * x, 0));
313
295
  /*
314
296
  try to place label at the junction of the destination shaft and arrowhead. if there's more than
315
297
  1 arrow pointing to a square, the arrow shortens by 10 / 64 units so the label must move as well.
@@ -321,17 +303,15 @@ function dist(from, to) {
321
303
  function labelCoords(from, to, slots) {
322
304
  let mag = dist(from, to);
323
305
  //if (mag === 0) return [from[0], from[1]];
324
- const angle = moveAngle(from, to, false);
306
+ const angle = moveAngle(from, to);
325
307
  if (slots) {
326
308
  mag -= 33 / 64; // reduce by arrowhead length
327
- if (slots.size > 1) {
309
+ if (anyTwoCloserThan90Degrees(slots)) {
328
310
  mag -= 10 / 64; // reduce by shortening factor
329
- const slot = moveAngle(from, to);
330
- if (slots.has((slot + 1) % 16) || slots.has((slot + 15) % 16)) {
331
- if (slot & 1)
332
- mag -= 0.4;
333
- // and by label size for the knight if another arrow is within pi / 8.
334
- }
311
+ const slot = angleToSlot(angle);
312
+ // reduce by label size for the knight if another arrow is within pi / 8:
313
+ if (slot & 1 && [-1, 1].some(s => slots.has(rotateAngleSlot(slot, s))))
314
+ mag -= 0.4;
335
315
  }
336
316
  }
337
317
  return [from[0] - Math.cos(angle) * mag, from[1] - Math.sin(angle) * mag].map(c => c + 0.5);
package/dist/svg.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -106,9 +106,7 @@ export type MobilityContext = {
106
106
  allPieces: Pieces;
107
107
  friendlies: Pieces;
108
108
  enemies: Pieces;
109
- unrestrictedPremoves: boolean;
110
109
  color: Color;
111
- canCastle: boolean;
112
110
  rookFilesFriendlies: number[];
113
111
  lastMove: Key[] | undefined;
114
112
  };
package/dist/wrap.js CHANGED
@@ -47,11 +47,11 @@ export function renderWrap(element, s) {
47
47
  const ranksPositionClass = s.ranksPosition === 'left' ? ' left' : '';
48
48
  if (s.coordinatesOnSquares) {
49
49
  const rankN = s.orientation === 'white' ? i => i + 1 : i => 8 - i;
50
- files.forEach((f, i) => container.appendChild(renderCoords(ranks.map(r => f + r), 'squares rank' + rankN(i) + orientClass + ranksPositionClass)));
50
+ files.forEach((f, i) => container.appendChild(renderCoords(ranks.map(r => f + r), 'squares rank' + rankN(i) + orientClass + ranksPositionClass, i % 2 === 0 ? 'black' : 'white')));
51
51
  }
52
52
  else {
53
- container.appendChild(renderCoords(ranks, 'ranks' + orientClass + ranksPositionClass));
54
- container.appendChild(renderCoords(files, 'files' + orientClass));
53
+ container.appendChild(renderCoords(ranks, 'ranks' + ranksPositionClass, s.ranksPosition === 'right' ? 'white' : 'black'));
54
+ container.appendChild(renderCoords(files, 'files', 'black'));
55
55
  }
56
56
  }
57
57
  let ghost;
@@ -73,14 +73,15 @@ function svgContainer(cls, isShapes) {
73
73
  svg.appendChild(createSVG('g'));
74
74
  return svg;
75
75
  }
76
- function renderCoords(elems, className) {
76
+ function renderCoords(elems, className, firstColor) {
77
77
  const el = createEl('coords', className);
78
78
  let f;
79
- for (const elem of elems) {
80
- f = createEl('coord');
79
+ elems.forEach((elem, i) => {
80
+ const light = i % 2 === (firstColor === 'white' ? 0 : 1);
81
+ f = createEl('coord', `coord-${light ? 'light' : 'dark'}`);
81
82
  f.textContent = elem;
82
83
  el.appendChild(f);
83
- }
84
+ });
84
85
  return el;
85
86
  }
86
87
  //# sourceMappingURL=wrap.js.map
package/dist/wrap.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lichess-org/chessground",
3
- "version": "9.8.5",
3
+ "version": "9.10.1",
4
4
  "//": "version is managed by the build system",
5
5
  "description": "lichess.org chess ui",
6
6
  "type": "module",
package/src/config.ts CHANGED
@@ -13,6 +13,7 @@ export interface Config {
13
13
  selected?: cg.Key; // square currently selected "a1"
14
14
  coordinates?: boolean; // include coords attributes
15
15
  coordinatesOnSquares?: boolean; // include coords attributes on every square
16
+ ranksPosition?: cg.RanksPosition; // render rank coords on the right (default) or the left
16
17
  autoCastle?: boolean; // immediately complete the castle by moving the rook after king move
17
18
  viewOnly?: boolean; // don't bind events: the user will never be able to move pieces around
18
19
  disableContextMenu?: boolean; // because who needs a context menu on a chessboard
@@ -47,7 +48,6 @@ export interface Config {
47
48
  castle?: boolean; // whether to allow king castle premoves
48
49
  dests?: cg.Key[]; // premove destinations for the current selection
49
50
  customDests?: cg.Dests; // use custom valid premoves. {"a2" ["a3" "a4"] "b1" ["a3" "c3"]}
50
- unrestrictedPremoves?: boolean; // if falsy, the positions of friendly pieces will be used to trim premove options
51
51
  additionalPremoveRequirements?: cg.Mobility;
52
52
  events?: {
53
53
  set?: (orig: cg.Key, dest: cg.Key, metadata?: cg.SetPremoveMetadata) => void; // called after the premove has been set
package/src/premove.ts CHANGED
@@ -3,204 +3,33 @@ import * as cg from './types.js';
3
3
  import { HeadlessState } from './state.js';
4
4
  import { Mobility, MobilityContext } from './types.js';
5
5
 
6
- const isDestOccupiedByFriendly = (ctx: MobilityContext): boolean => ctx.friendlies.has(ctx.dest.key);
6
+ const pawn: Mobility = (ctx: MobilityContext) =>
7
+ util.diff(ctx.orig.pos[0], ctx.dest.pos[0]) <= 1 &&
8
+ (util.diff(ctx.orig.pos[0], ctx.dest.pos[0]) === 1
9
+ ? ctx.dest.pos[1] === ctx.orig.pos[1] + (ctx.color === 'white' ? 1 : -1)
10
+ : util.pawnDirAdvance(...ctx.orig.pos, ...ctx.dest.pos, ctx.color === 'white'));
7
11
 
8
- const isDestOccupiedByEnemy = (ctx: MobilityContext): boolean => ctx.enemies.has(ctx.dest.key);
12
+ const knight: Mobility = (ctx: MobilityContext) => util.knightDir(...ctx.orig.pos, ...ctx.dest.pos);
9
13
 
10
- const anyPieceBetween = (orig: cg.Pos, dest: cg.Pos, pieces: cg.Pieces): boolean =>
11
- util.squaresBetween(...orig, ...dest).some(s => pieces.has(s));
14
+ const bishop: Mobility = (ctx: MobilityContext) => util.bishopDir(...ctx.orig.pos, ...ctx.dest.pos);
12
15
 
13
- const canEnemyPawnAdvanceToSquare = (pawnStart: cg.Key, dest: cg.Key, ctx: MobilityContext): boolean => {
14
- const piece = ctx.enemies.get(pawnStart);
15
- if (piece?.role !== 'pawn') return false;
16
- const step = piece.color === 'white' ? 1 : -1;
17
- const startPos = util.key2pos(pawnStart);
18
- const destPos = util.key2pos(dest);
19
- return (
20
- util.pawnDirAdvance(...startPos, ...destPos, piece.color === 'white') &&
21
- !anyPieceBetween(startPos, [destPos[0], destPos[1] + step], ctx.allPieces)
22
- );
23
- };
24
-
25
- const canEnemyPawnCaptureOnSquare = (pawnStart: cg.Key, dest: cg.Key, ctx: MobilityContext): boolean => {
26
- const enemyPawn = ctx.enemies.get(pawnStart);
27
- return (
28
- enemyPawn?.role === 'pawn' &&
29
- util.pawnDirCapture(...util.key2pos(pawnStart), ...util.key2pos(dest), enemyPawn.color === 'white') &&
30
- (ctx.friendlies.has(dest) ||
31
- canBeCapturedBySomeEnemyEnPassant(
32
- util.squareShiftedVertically(dest, enemyPawn.color === 'white' ? -1 : 1),
33
- ctx.friendlies,
34
- ctx.enemies,
35
- ctx.lastMove,
36
- ))
37
- );
38
- };
39
-
40
- const canSomeEnemyPawnAdvanceToDest = (ctx: MobilityContext): boolean =>
41
- [...ctx.enemies.keys()].some(key => canEnemyPawnAdvanceToSquare(key, ctx.dest.key, ctx));
42
-
43
- const isDestControlledByEnemy = (ctx: MobilityContext, pieceRolesExclude?: cg.Role[]): boolean => {
44
- const square: cg.Pos = ctx.dest.pos;
45
- return [...ctx.enemies].some(([key, piece]) => {
46
- const piecePos = util.key2pos(key);
47
- return (
48
- !pieceRolesExclude?.includes(piece.role) &&
49
- ((piece.role === 'pawn' && util.pawnDirCapture(...piecePos, ...square, piece.color === 'white')) ||
50
- (piece.role === 'knight' && util.knightDir(...piecePos, ...square)) ||
51
- (piece.role === 'bishop' && util.bishopDir(...piecePos, ...square)) ||
52
- (piece.role === 'rook' && util.rookDir(...piecePos, ...square)) ||
53
- (piece.role === 'queen' && util.queenDir(...piecePos, ...square)) ||
54
- (piece.role === 'king' && util.kingDirNonCastling(...piecePos, ...square))) &&
55
- (!['bishop', 'rook', 'queen'].includes(piece.role) || !anyPieceBetween(piecePos, square, ctx.allPieces))
56
- );
57
- });
58
- };
59
-
60
- const isFriendlyOnDestAndAttacked = (ctx: MobilityContext): boolean =>
61
- isDestOccupiedByFriendly(ctx) &&
62
- (canBeCapturedBySomeEnemyEnPassant(ctx.dest.key, ctx.friendlies, ctx.enemies, ctx.lastMove) ||
63
- isDestControlledByEnemy(ctx));
64
-
65
- const canBeCapturedBySomeEnemyEnPassant = (
66
- potentialSquareOfFriendlyPawn: cg.Key | undefined,
67
- friendlies: cg.Pieces,
68
- enemies: cg.Pieces,
69
- lastMove?: cg.Key[],
70
- ): boolean => {
71
- if (!potentialSquareOfFriendlyPawn || (lastMove && potentialSquareOfFriendlyPawn !== lastMove[1]))
72
- return false;
73
- const pos = util.key2pos(potentialSquareOfFriendlyPawn);
74
- const friendly = friendlies.get(potentialSquareOfFriendlyPawn);
75
- return (
76
- friendly?.role === 'pawn' &&
77
- pos[1] === (friendly.color === 'white' ? 3 : 4) &&
78
- (!lastMove || util.diff(util.key2pos(lastMove[0])[1], pos[1]) === 2) &&
79
- [1, -1].some(delta => {
80
- const k = util.pos2key([pos[0] + delta, pos[1]]);
81
- return !!k && enemies.get(k)?.role === 'pawn';
82
- })
83
- );
84
- };
85
-
86
- const isPathClearEnoughOfFriendliesForPremove = (ctx: MobilityContext, isPawnAdvance: boolean): boolean => {
87
- if (ctx.unrestrictedPremoves) return true;
88
- const squaresBetween = util.squaresBetween(...ctx.orig.pos, ...ctx.dest.pos);
89
- if (isPawnAdvance) squaresBetween.push(ctx.dest.key);
90
- const squaresOfFriendliesBetween = squaresBetween.filter(s => ctx.friendlies.has(s));
91
- if (!squaresOfFriendliesBetween.length) return true;
92
- const firstSquareOfFriendliesBetween = squaresOfFriendliesBetween[0];
93
- const nextSquare = util.squareShiftedVertically(
94
- firstSquareOfFriendliesBetween,
95
- ctx.color === 'white' ? -1 : 1,
96
- );
97
- return (
98
- squaresOfFriendliesBetween.length === 1 &&
99
- canBeCapturedBySomeEnemyEnPassant(
100
- firstSquareOfFriendliesBetween,
101
- ctx.friendlies,
102
- ctx.enemies,
103
- ctx.lastMove,
104
- ) &&
105
- !!nextSquare &&
106
- !squaresBetween.includes(nextSquare)
107
- );
108
- };
109
-
110
- const isPathClearEnoughOfEnemiesForPremove = (ctx: MobilityContext, isPawnAdvance: boolean): boolean => {
111
- if (ctx.unrestrictedPremoves) return true;
112
- const squaresBetween = util.squaresBetween(...ctx.orig.pos, ...ctx.dest.pos);
113
- if (isPawnAdvance) squaresBetween.push(ctx.dest.key);
114
- const squaresOfEnemiesBetween = squaresBetween.filter(s => ctx.enemies.has(s));
115
- if (squaresOfEnemiesBetween.length > 1) return false;
116
- if (!squaresOfEnemiesBetween.length) return true;
117
- const enemySquare = squaresOfEnemiesBetween[0];
118
- const enemy = ctx.enemies.get(enemySquare);
119
- if (!enemy || enemy.role !== 'pawn') return true;
120
-
121
- const enemyStep = enemy.color === 'white' ? 1 : -1;
122
- const squareAbove = util.squareShiftedVertically(enemySquare, enemyStep);
123
- const enemyPawnDests: cg.Key[] = squareAbove
124
- ? [
125
- ...util.adjacentSquares(squareAbove).filter(s => canEnemyPawnCaptureOnSquare(enemySquare, s, ctx)),
126
- ...[squareAbove, util.squareShiftedVertically(squareAbove, enemyStep)]
127
- .filter(s => !!s)
128
- .filter(s => canEnemyPawnAdvanceToSquare(enemySquare, s, ctx)),
129
- ]
130
- : [];
131
- const badSquares = [...squaresBetween, ctx.orig.key];
132
- return enemyPawnDests.some(square => !badSquares.includes(square));
133
- };
134
-
135
- const isPathClearEnoughForPremove = (ctx: MobilityContext, isPawnAdvance: boolean): boolean =>
136
- isPathClearEnoughOfFriendliesForPremove(ctx, isPawnAdvance) &&
137
- isPathClearEnoughOfEnemiesForPremove(ctx, isPawnAdvance);
138
-
139
- const pawn: Mobility = (ctx: MobilityContext) => {
140
- const step = ctx.color === 'white' ? 1 : -1;
141
- if (util.diff(ctx.orig.pos[0], ctx.dest.pos[0]) > 1) return false;
142
- if (!util.diff(ctx.orig.pos[0], ctx.dest.pos[0]))
143
- return (
144
- util.pawnDirAdvance(...ctx.orig.pos, ...ctx.dest.pos, ctx.color === 'white') &&
145
- isPathClearEnoughForPremove(ctx, true)
146
- );
147
- if (ctx.dest.pos[1] !== ctx.orig.pos[1] + step) return false;
148
- if (ctx.unrestrictedPremoves || isDestOccupiedByEnemy(ctx)) return true;
149
- if (isDestOccupiedByFriendly(ctx)) return isDestControlledByEnemy(ctx);
150
- else
151
- return (
152
- canSomeEnemyPawnAdvanceToDest(ctx) ||
153
- canBeCapturedBySomeEnemyEnPassant(
154
- util.pos2key([ctx.dest.pos[0], ctx.dest.pos[1] + step]),
155
- ctx.friendlies,
156
- ctx.enemies,
157
- ctx.lastMove,
158
- ) ||
159
- isDestControlledByEnemy(ctx, ['pawn'])
160
- );
161
- };
162
-
163
- const knight: Mobility = (ctx: MobilityContext) =>
164
- util.knightDir(...ctx.orig.pos, ...ctx.dest.pos) &&
165
- (ctx.unrestrictedPremoves || !isDestOccupiedByFriendly(ctx) || isFriendlyOnDestAndAttacked(ctx));
166
-
167
- const bishop: Mobility = (ctx: MobilityContext) =>
168
- util.bishopDir(...ctx.orig.pos, ...ctx.dest.pos) &&
169
- isPathClearEnoughForPremove(ctx, false) &&
170
- (ctx.unrestrictedPremoves || !isDestOccupiedByFriendly(ctx) || isFriendlyOnDestAndAttacked(ctx));
171
-
172
- const rook: Mobility = (ctx: MobilityContext) =>
173
- util.rookDir(...ctx.orig.pos, ...ctx.dest.pos) &&
174
- isPathClearEnoughForPremove(ctx, false) &&
175
- (ctx.unrestrictedPremoves || !isDestOccupiedByFriendly(ctx) || isFriendlyOnDestAndAttacked(ctx));
16
+ const rook: Mobility = (ctx: MobilityContext) => util.rookDir(...ctx.orig.pos, ...ctx.dest.pos);
176
17
 
177
18
  const queen: Mobility = (ctx: MobilityContext) => bishop(ctx) || rook(ctx);
178
19
 
179
20
  const king: Mobility = (ctx: MobilityContext) =>
180
- (util.kingDirNonCastling(...ctx.orig.pos, ...ctx.dest.pos) &&
181
- (ctx.unrestrictedPremoves || !isDestOccupiedByFriendly(ctx) || isFriendlyOnDestAndAttacked(ctx))) ||
182
- (ctx.canCastle &&
183
- ctx.orig.pos[1] === ctx.dest.pos[1] &&
21
+ util.kingDirNonCastling(...ctx.orig.pos, ...ctx.dest.pos) ||
22
+ (ctx.orig.pos[1] === ctx.dest.pos[1] &&
184
23
  ctx.orig.pos[1] === (ctx.color === 'white' ? 0 : 7) &&
185
24
  ((ctx.orig.pos[0] === 4 &&
186
25
  ((ctx.dest.pos[0] === 2 && ctx.rookFilesFriendlies.includes(0)) ||
187
26
  (ctx.dest.pos[0] === 6 && ctx.rookFilesFriendlies.includes(7)))) ||
188
- ctx.rookFilesFriendlies.includes(ctx.dest.pos[0])) &&
189
- (ctx.unrestrictedPremoves ||
190
- /* The following checks if no non-rook friendly piece is in the way between the king and its castling destination.
191
- Note that for the Chess960 edge case of Kb1 "long castling", the check passes even if there is a piece in the way
192
- on c1. But this is fine, since premoving from b1 to a1 as a normal move would have already returned true. */
193
- util
194
- .squaresBetween(...ctx.orig.pos, ctx.dest.pos[0] > ctx.orig.pos[0] ? 7 : 1, ctx.dest.pos[1])
195
- .map(s => ctx.allPieces.get(s))
196
- .every(p => !p || util.samePiece(p, { role: 'rook', color: ctx.color }))));
27
+ ctx.rookFilesFriendlies.includes(ctx.dest.pos[0])));
197
28
 
198
29
  const mobilityByRole = { pawn, knight, bishop, rook, queen, king };
199
30
 
200
31
  export function premove(state: HeadlessState, key: cg.Key): cg.Key[] {
201
- const pieces = state.pieces,
202
- canCastle = state.premovable.castle,
203
- unrestrictedPremoves = !!state.premovable.unrestrictedPremoves;
32
+ const pieces = state.pieces;
204
33
  const piece = pieces.get(key);
205
34
  if (!piece || piece.color === state.turnColor) return [];
206
35
  const color = piece.color,
@@ -215,9 +44,7 @@ export function premove(state: HeadlessState, key: cg.Key): cg.Key[] {
215
44
  allPieces: pieces,
216
45
  friendlies: friendlies,
217
46
  enemies: enemies,
218
- unrestrictedPremoves: unrestrictedPremoves,
219
47
  color: color,
220
- canCastle: canCastle,
221
48
  rookFilesFriendlies: Array.from(pieces)
222
49
  .filter(
223
50
  ([k, p]) => k[1] === (color === 'white' ? '1' : '8') && p.color === color && p.role === 'rook',
@@ -225,5 +52,6 @@ export function premove(state: HeadlessState, key: cg.Key): cg.Key[] {
225
52
  .map(([k]) => util.key2pos(k)[0]),
226
53
  lastMove: state.lastMove,
227
54
  };
55
+ // todo - remove more properties from MobilityContext that aren't used in this file, and adjust as needed in lila.
228
56
  return util.allPosAndKey.filter(dest => mobility({ ...partialCtx, dest })).map(pk => pk.key);
229
57
  }