@@ -53,11 +53,12 @@ const computeTimeTermination = (
5353}
5454
5555export 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 )
0 commit comments