From 5cfac7700c5e0d5f1f9f07c565753fe6420b960e Mon Sep 17 00:00:00 2001 From: GuillaumeSD <47183782+GuillaumeSD@users.noreply.github.com> Date: Thu, 8 May 2025 01:38:41 +0200 Subject: [PATCH] fix : forced move classification --- public/icons/forced.png | Bin 1484 -> 2121 bytes src/lib/chess.ts | 1 + src/lib/engine/helpers/moveClassification.ts | 13 ++++++------- .../panelBody/analysisTab/moveInfo.tsx | 2 ++ .../classificationTab/movesPanel/moveItem.tsx | 7 ++----- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/public/icons/forced.png b/public/icons/forced.png index e34ba39704a0863cc91c23f976b8e7d254099466..e0994008735304f09cb25eabef70e01f8ea9eec9 100644 GIT binary patch literal 2121 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 Vk!_0SVY&bS002ovPDHLkV1oBa);0hD 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, ];