From 60e43027fa132b92e33f722b654e713217ba5dff Mon Sep 17 00:00:00 2001 From: Janis Date: Fri, 3 Apr 2026 12:57:45 +0200 Subject: [PATCH] refactor(rule): update RuleSet to use GameContext Replace Situation parameter with GameContext across all RuleSet methods to align with the new game state abstraction. Updated imports to use the api module's types (GameContext, Square, Move). StandardRules will need to be updated in Task 3 to implement the new interface signature and use api types instead of maichess. Co-Authored-By: Claude Haiku 4.5 --- .../scala/de/nowchess/rules/RuleSet.scala | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala b/modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala index 906987e..ab8437b 100644 --- a/modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala +++ b/modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala @@ -1,29 +1,33 @@ package de.nowchess.rules -import de.nowchess.chess.{Move, Situation, Square} +import de.nowchess.api.game.GameContext +import de.nowchess.api.board.Square +import de.nowchess.api.move.Move -/** Extension point for chess rule variants. Implement to support Chess960, etc. */ +/** Extension point for chess rule variants (standard, Chess960, etc.). + * All rule queries are stateless: given a GameContext, return the answer. + */ trait RuleSet: /** All pseudo-legal moves for the piece on `square` (ignores check). */ - def candidateMoves(situation: Situation, square: Square): List[Move] + def candidateMoves(context: GameContext, square: Square): List[Move] /** Legal moves for `square`: candidates that don't leave own king in check. */ - def legalMoves(situation: Situation, square: Square): List[Move] + def legalMoves(context: GameContext, square: Square): List[Move] /** All legal moves for the side to move. */ - def allLegalMoves(situation: Situation): List[Move] + def allLegalMoves(context: GameContext): List[Move] /** True if the side to move's king is in check. */ - def isCheck(situation: Situation): Boolean + def isCheck(context: GameContext): Boolean /** True if the side to move is in check and has no legal moves. */ - def isCheckmate(situation: Situation): Boolean + def isCheckmate(context: GameContext): Boolean /** True if the side to move is not in check and has no legal moves. */ - def isStalemate(situation: Situation): Boolean + def isStalemate(context: GameContext): Boolean /** True if neither side has enough material to checkmate. */ - def isInsufficientMaterial(situation: Situation): Boolean + def isInsufficientMaterial(context: GameContext): Boolean /** True if halfMoveClock >= 100 (50-move rule). */ - def isFiftyMoveRule(situation: Situation): Boolean + def isFiftyMoveRule(context: GameContext): Boolean