11import { Color , Check , GameTree , Termination , PlayGameConfig } from 'src/types'
22import { AllStats } from '../useStats'
3- import { PlayedGame } from 'src/types/play'
3+ import { PlayedGame , QueuedPremove } from 'src/types/play'
44import { Chess , Piece , SQUARES } from 'chess.ts'
55import { useTreeController } from '../useTreeController'
66import { useMemo , useState , useCallback , useEffect } from 'react'
@@ -165,9 +165,13 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
165165 return { availableMoves, pieces }
166166 } , [ controller . currentNode , playerActive , game . termination , treeVersion ] )
167167
168- const updateClock = useCallback (
169- ( overrideTime : number | undefined = undefined ) : number => {
170- if ( moveList . length < 2 ) {
168+ const updateClockForColor = useCallback (
169+ (
170+ color : Color ,
171+ overrideTime : number | undefined = undefined ,
172+ forceClockUpdate = false ,
173+ ) : number => {
174+ if ( moveList . length < 2 && ! forceClockUpdate ) {
171175 return 0 // Clock does not start until first two moves made
172176 }
173177
@@ -176,7 +180,7 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
176180 overrideTime === undefined ? now - lastMoveTime : overrideTime
177181
178182 if ( lastMoveTime > 0 ) {
179- if ( toPlay == 'white' ) {
183+ if ( color == 'white' ) {
180184 setWhiteClock (
181185 Math . max ( whiteClock - elapsed + incrementSeconds * 1000 , 0 ) ,
182186 )
@@ -190,14 +194,18 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
190194 setLastMoveTime ( now )
191195 return elapsed
192196 } ,
193- [
194- moveList . length ,
195- lastMoveTime ,
196- toPlay ,
197- whiteClock ,
198- blackClock ,
199- incrementSeconds ,
200- ] ,
197+ [ moveList . length , lastMoveTime , whiteClock , blackClock , incrementSeconds ] ,
198+ )
199+
200+ const updateClock = useCallback (
201+ ( overrideTime : number | undefined = undefined ) : number => {
202+ if ( ! toPlay ) {
203+ return 0
204+ }
205+
206+ return updateClockForColor ( toPlay , overrideTime )
207+ } ,
208+ [ toPlay , updateClockForColor ] ,
201209 )
202210
203211 const expireOnTime = useCallback ( ( color : Color ) => {
@@ -275,12 +283,23 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
275283 setTreeVersion ( ( prev ) => prev + 1 )
276284 }
277285
278- const makePlayerMove = async ( moveUci : string ) : Promise < void > => {
286+ const makePlayerMove = async (
287+ _moveUci : string ,
288+ _moveTimeOverride ?: number ,
289+ ) : Promise < void > => {
279290 throw new Error (
280291 'makePlayerMove should be overridden by the consuming component' ,
281292 )
282293 }
283294
295+ const queuedPremove = null as QueuedPremove | null
296+ const setPremove = ( _from : string , _to : string ) => {
297+ return
298+ }
299+ const clearPremove = ( ) => {
300+ return
301+ }
302+
284303 const stats : AllStats = {
285304 lifetime : undefined ,
286305 session : { gamesWon : 0 , gamesPlayed : 0 } ,
@@ -322,5 +341,11 @@ export const usePlayController = (id: string, config: PlayGameConfig) => {
322341 reset,
323342 makePlayerMove,
324343 updateClock,
344+ updateClockForColor,
345+ premovesEnabled : false ,
346+ queuedPremove,
347+ setPremove,
348+ clearPremove,
349+ premoveResetKey : 0 ,
325350 }
326351}
0 commit comments