Skip to content

Commit cb4a60a

Browse files
committed
fix game-end bugs
1 parent 1ee463e commit cb4a60a

File tree

2 files changed

+19
-28
lines changed

2 files changed

+19
-28
lines changed

src/main/client/src/feature/game/GamePanel.jsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ function Panel({gameState, setGameState}) {
7171
return (
7272
<>
7373
<WhoIsWho gameState={gameState} />
74-
<WarpControls
74+
<ReviewControls
7575
gameState={gameState}
7676
setGameState={setGameState}
7777
activePlay={activePlay} />
@@ -111,13 +111,13 @@ function WhoIsWho({gameState}) {
111111
<IoMdExit />
112112
</IconContext.Provider>
113113
</button>
114-
{timesetting ? <>
114+
{!end && !counting && timesetting ? <>
115115
<div className={color === WHITE ? timeClassname : ""}>
116-
{!counting && !end && color === WHITE ? timeRemaining : timesetting}
116+
{color === WHITE ? timeRemaining : timesetting}
117117
</div>
118118
<div />
119119
<div className={color === BLACK ? timeClassname : ""}>
120-
{!counting && !end && color === BLACK ? timeRemaining : timesetting}
120+
{color === BLACK ? timeRemaining : timesetting}
121121
</div>
122122
<div />
123123
<div />
@@ -126,7 +126,7 @@ function WhoIsWho({gameState}) {
126126
)
127127
}
128128

129-
function WarpControls({gameState, setGameState, activePlay}) {
129+
function ReviewControls({gameState, setGameState, activePlay}) {
130130
return (
131131
<div className="flex-none flex gap-x-1 items-center">
132132
{!activePlay && (

src/main/client/src/feature/game/state.js

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,6 @@ export function isAtEnd(gameState) {
135135

136136
export function teleport(baseState, targetPos) {
137137
let viewPos = baseState.viewPos
138-
if (targetPos >= baseState.queueLength) {
139-
return goToEnd(baseState)
140-
}
141138
let diff = targetPos - viewPos
142139
let direction = Math.sign(diff)
143140
let moves = baseState.moves
@@ -172,26 +169,6 @@ export function moveForward(baseState) {
172169
return teleport(baseState, viewPos + 1)
173170
}
174171

175-
function goToEnd(baseState) {
176-
let moves = baseState.moves
177-
let queueLength = baseState.queueLength
178-
let baseBoard = baseState.baseBoard
179-
let historyBoard = baseState.historyBoard
180-
let counting = baseState.state === STATE_COUNTING
181-
for (let i = baseState.viewPos; i < moves.length; i++) {
182-
let move = moves[i]
183-
let previousMove = getMove(moves, i - 1)
184-
let [, updated] = updateBoardState(baseBoard, previousMove, move, counting)
185-
baseBoard = updated
186-
}
187-
let board = rehydrate(baseBoard, historyBoard)
188-
return produce(baseState, (draft) => {
189-
draft.board = board
190-
draft.viewPos = queueLength
191-
draft.lastMove = getMove(moves, queueLength - 1)
192-
})
193-
}
194-
195172
export function addMove(baseState, move) {
196173
let {action, n} = move
197174
let {moves, baseBoard, historyBoard, state, queueLength} = baseState
@@ -207,11 +184,16 @@ export function addMove(baseState, move) {
207184
}
208185
if (action === "end") {
209186
let updated = resetCounting(baseBoard)
187+
let finalQueueLength = getFinalQueueLength(baseState)
188+
let lastMove = finalQueueLength ? moves[finalQueueLength - 1] : undefined
210189
return produce(baseState, (draft) => {
211190
draft.moves.push(move)
212191
draft.state = 0
213192
draft.baseBoard = updated
214193
draft.board = rehydrate(updated, historyBoard)
194+
draft.queueLength = finalQueueLength
195+
draft.viewPos = finalQueueLength
196+
draft.lastMove = lastMove
215197
})
216198
}
217199
let [storedMove, updated, forbidden] = updateBoardState(baseBoard, previousMove, move, counting)
@@ -234,6 +216,15 @@ export function addMove(baseState, move) {
234216
})
235217
}
236218

219+
function getFinalQueueLength({moves, queueLength}) {
220+
let copy = [...moves]
221+
copy = copy.slice(0, queueLength)
222+
while (copy.length && copy[copy.length - 1].action === "pass") {
223+
copy.pop()
224+
}
225+
return copy.length
226+
}
227+
237228
export function createGameState(game, auth) {
238229
let baseBoard = Array(game.dim)
239230
let historyBoard = Array(game.dim)

0 commit comments

Comments
 (0)