Skip to content

Commit 21194fb

Browse files
fix: play tree errors
1 parent ae4b102 commit 21194fb

3 files changed

Lines changed: 37 additions & 35 deletions

File tree

src/hooks/usePlayController/usePlayController.ts

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,12 @@ const computeTimeTermination = (
5353
}
5454

5555
export const usePlayController = (id: string, config: PlayGameConfig) => {
56-
const controller = useTreeController(
57-
new GameTree(config.startFen || nullFen),
58-
config.player,
56+
const [gameTree, setGameTree] = useState<GameTree>(
57+
() => new GameTree(config.startFen || nullFen),
5958
)
6059

60+
const controller = useTreeController(gameTree, config.player)
61+
6162
const [treeVersion, setTreeVersion] = useState<number>(0)
6263
const [resigned, setResigned] = useState<boolean>(false)
6364

@@ -72,23 +73,21 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
7273
const [lastMoveTime, setLastMoveTime] = useState<number>(0)
7374

7475
const moveList = useMemo(
75-
() => controller.tree.toMoveArray(),
76-
[controller.tree, treeVersion],
76+
() => gameTree.toMoveArray(),
77+
[gameTree, treeVersion],
7778
)
7879

7980
const moveTimes = useMemo(
80-
() => controller.tree.toTimeArray(),
81-
[controller.tree, treeVersion],
81+
() => gameTree.toTimeArray(),
82+
[gameTree, treeVersion],
8283
)
8384

8485
const game: PlayedGame = useMemo(() => {
85-
const mainLine = controller.tree.getMainLine()
86-
console.log(mainLine)
86+
const mainLine = gameTree.getMainLine()
87+
8788
const lastNode = mainLine[mainLine.length - 1]
8889
const turn = lastNode.turn
89-
const chess = controller.tree.toChess()
90-
91-
console.log('gme node', lastNode.fen)
90+
const chess = gameTree.toChess()
9291

9392
const termination = resigned
9493
? Math.min(whiteClock, blackClock) > 0
@@ -101,7 +100,7 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
101100
: computeTermination(chess)
102101

103102
const moves = []
104-
const rootNode = controller.tree.getRoot()
103+
const rootNode = gameTree.getRoot()
105104
const rootChess = new Chess(rootNode.fen)
106105
moves.push({
107106
board: rootNode.fen,
@@ -129,10 +128,10 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
129128
return {
130129
id,
131130
termination,
132-
tree: controller.tree,
131+
tree: gameTree,
133132
turn: turn == 'b' ? 'black' : 'white',
134133
}
135-
}, [controller.tree, treeVersion, resigned, whiteClock, blackClock, id])
134+
}, [gameTree, treeVersion, resigned, whiteClock, blackClock, id])
136135

137136
const toPlay: Color | null = game.termination ? null : game.turn
138137
const playerActive = toPlay == config.player
@@ -226,7 +225,7 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
226225

227226
const addMoveWithTime = useCallback(
228227
(moveUci: string, moveTime: number) => {
229-
const lastNode = controller.tree.getLastMainlineNode()
228+
const lastNode = gameTree.getLastMainlineNode()
230229
const board = new Chess(lastNode.fen)
231230
const result = board.move(moveUci, { sloppy: true })
232231

@@ -241,18 +240,18 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
241240
)
242241

243242
if (newNode) {
244-
controller.setCurrentNode(newNode)
243+
// Tree is modified in place, so we need to trigger re-renders
245244
setTreeVersion((prev) => prev + 1)
245+
controller.setCurrentNode(newNode)
246246
}
247247
}
248248
},
249-
[controller.tree, controller],
249+
[gameTree, controller.setCurrentNode],
250250
)
251251

252252
const reset = () => {
253253
const newTree = new GameTree(config.startFen || nullFen)
254-
controller.tree = newTree
255-
controller.setCurrentNode(newTree.getRoot())
254+
setGameTree(newTree)
256255
setResigned(false)
257256
setLastMoveTime(0)
258257
setWhiteClock(initialClockValue)

src/hooks/usePlayController/useVsMaiaController.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ export const useVsMaiaPlayController = (
3939
!controller.playerActive &&
4040
!controller.game.termination
4141
) {
42-
console.log('node before move', controller.currentNode.fen)
4342
const maiaClock =
4443
(controller.player == 'white'
4544
? controller.blackClock
@@ -98,7 +97,15 @@ export const useVsMaiaPlayController = (
9897
return () => {
9998
canceled = true
10099
}
101-
}, [controller, playGameConfig, simulateMaiaTime])
100+
}, [
101+
controller.game.id,
102+
controller.playerActive,
103+
controller.game.termination,
104+
controller.moveList.length,
105+
playGameConfig.maiaVersion,
106+
playGameConfig.startFen,
107+
simulateMaiaTime,
108+
])
102109

103110
useEffect(() => {
104111
const gameOverState = controller.game.termination?.type || 'not_over'

src/hooks/useTreeController/useTreeController.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,17 @@ export const useTreeController = (
55
gameTree: GameTree,
66
initialOrientation: Color = 'white',
77
) => {
8-
const [tree, setTree] = useState(gameTree)
9-
const [currentNode, setCurrentNode] = useState<GameNode>(tree.getRoot())
8+
const [currentNode, setCurrentNode] = useState<GameNode>(gameTree.getRoot())
109
const [orientation, setOrientation] = useState<Color>(initialOrientation)
1110

1211
useEffect(() => {
13-
if (tree !== gameTree) {
14-
setTree(gameTree)
15-
setCurrentNode(gameTree.getRoot())
16-
}
12+
setCurrentNode(gameTree.getRoot())
1713
}, [gameTree])
1814

1915
const plyCount = useMemo(() => {
20-
if (!tree) return 0
21-
return tree.getMainLine().length
22-
}, [tree])
16+
if (!gameTree) return 0
17+
return gameTree.getMainLine().length
18+
}, [gameTree])
2319

2420
const goToNode = useCallback(
2521
(node: GameNode) => {
@@ -41,17 +37,17 @@ export const useTreeController = (
4137
}, [currentNode, setCurrentNode])
4238

4339
const goToRootNode = useCallback(() => {
44-
if (tree) {
45-
setCurrentNode(tree.getRoot())
40+
if (gameTree) {
41+
setCurrentNode(gameTree.getRoot())
4642
}
47-
}, [tree, setCurrentNode])
43+
}, [gameTree, setCurrentNode])
4844

4945
useEffect(() => {
5046
setOrientation(initialOrientation)
5147
}, [initialOrientation])
5248

5349
return {
54-
tree,
50+
tree: gameTree,
5551
currentNode,
5652
setCurrentNode,
5753
orientation,

0 commit comments

Comments
 (0)