diff --git a/public/icons/forced.png b/public/icons/forced.png index e34ba39..e099400 100644 Binary files a/public/icons/forced.png and b/public/icons/forced.png differ diff --git a/src/lib/chess.ts b/src/lib/chess.ts index 165dfb0..753299a 100644 --- a/src/lib/chess.ts +++ b/src/lib/chess.ts @@ -337,6 +337,7 @@ export const getLineEvalLabel = ( export const moveClassificationColors: Record = { [MoveClassification.Book]: "#d5a47d", + [MoveClassification.Forced]: "#d5a47d", [MoveClassification.Brilliant]: "#26c2a3", [MoveClassification.Great]: "#4099ed", [MoveClassification.Best]: "#3aab18", diff --git a/src/lib/engine/helpers/moveClassification.ts b/src/lib/engine/helpers/moveClassification.ts index a9bf856..4dbc078 100644 --- a/src/lib/engine/helpers/moveClassification.ts +++ b/src/lib/engine/helpers/moveClassification.ts @@ -13,7 +13,7 @@ export const getMovesClassification = ( fens: string[] ): PositionEval[] => { const positionsWinPercentage = rawPositions.map(getPositionWinPercentage); - let currentOpening: string | undefined = undefined; + let currentOpening: string = "Unknown opening"; const positions = rawPositions.map((rawPosition, index) => { if (index === 0) return rawPosition; @@ -30,7 +30,8 @@ export const getMovesClassification = ( } const prevPosition = rawPositions[index - 1]; - if (prevPosition.bestMove && prevPosition.lines.length <= 1) { + + if (prevPosition.lines.length === 1) { return { ...rawPosition, opening: currentOpening, @@ -39,11 +40,9 @@ export const getMovesClassification = ( } const playedMove = uciMoves[index - 1]; - const bestMove = rawPositions[index - 1].bestMove; - const lastPositionAlternativeLine: LineEval | undefined = rawPositions[ - index - 1 - ].lines.filter((line) => line.pv[0] !== playedMove)?.[0]; + const lastPositionAlternativeLine: LineEval | undefined = + prevPosition.lines.filter((line) => line.pv[0] !== playedMove)?.[0]; const lastPositionAlternativeLineWinPercentage = lastPositionAlternativeLine ? getLineWinPercentage(lastPositionAlternativeLine) : undefined; @@ -93,7 +92,7 @@ export const getMovesClassification = ( }; } - if (playedMove === bestMove) { + if (playedMove === prevPosition.bestMove) { return { ...rawPosition, opening: currentOpening, diff --git a/src/sections/analysis/panelBody/analysisTab/moveInfo.tsx b/src/sections/analysis/panelBody/analysisTab/moveInfo.tsx index 71e2337..3b02295 100644 --- a/src/sections/analysis/panelBody/analysisTab/moveInfo.tsx +++ b/src/sections/analysis/panelBody/analysisTab/moveInfo.tsx @@ -48,6 +48,7 @@ export default function MoveInfo() { const bestMoveLabel = moveClassification === MoveClassification.Best || moveClassification === MoveClassification.Book || + moveClassification === MoveClassification.Forced || moveClassification === MoveClassification.Brilliant || moveClassification === MoveClassification.Great ? null @@ -97,6 +98,7 @@ export default function MoveInfo() { const moveClassificationLabels: Record = { [MoveClassification.Book]: "a book move", + [MoveClassification.Forced]: "forced", [MoveClassification.Brilliant]: "brilliant !!", [MoveClassification.Great]: "a great move !", [MoveClassification.Best]: "the best move", diff --git a/src/sections/analysis/panelBody/classificationTab/movesPanel/moveItem.tsx b/src/sections/analysis/panelBody/classificationTab/movesPanel/moveItem.tsx index 5647c91..b6c71d2 100644 --- a/src/sections/analysis/panelBody/classificationTab/movesPanel/moveItem.tsx +++ b/src/sections/analysis/panelBody/classificationTab/movesPanel/moveItem.tsx @@ -74,11 +74,7 @@ export default function MoveItem({ san, moveClassification, moveIdx }: Props) { }} /> )} - + {san} @@ -99,4 +95,5 @@ const getMoveColor = (moveClassification?: MoveClassification) => { const moveClassificationsToIgnore: MoveClassification[] = [ MoveClassification.Good, MoveClassification.Excellent, + MoveClassification.Forced, ];