clean resume state when pausing game

This commit is contained in:
RandyJC
2025-12-09 14:25:21 +01:00
parent 84b269d2d1
commit 8a25192034
3 changed files with 33 additions and 0 deletions

View File

@@ -314,6 +314,10 @@ class Game {
players: this.players, players: this.players,
}) })
socket.emit("game:totalPlayers", this.players.length) socket.emit("game:totalPlayers", this.players.length)
if (this.breakActive) {
socket.emit("manager:break", true)
socket.emit("game:break", true)
}
registry.reactivateGame(this.gameId) registry.reactivateGame(this.gameId)
console.log(`Manager reconnected to game ${this.inviteCode}`) console.log(`Manager reconnected to game ${this.inviteCode}`)
@@ -365,6 +369,9 @@ class Game {
}, },
}) })
socket.emit("game:totalPlayers", this.players.length) socket.emit("game:totalPlayers", this.players.length)
if (this.breakActive) {
socket.emit("game:break", true)
}
console.log( console.log(
`Player ${player.username} reconnected to game ${this.inviteCode}` `Player ${player.username} reconnected to game ${this.inviteCode}`
) )

View File

@@ -26,6 +26,7 @@ const ManagerGame = () => {
useManagerStore() useManagerStore()
const { setQuestionStates } = useQuestionStore() const { setQuestionStates } = useQuestionStore()
const [cooldownPaused, setCooldownPaused] = useState(false) const [cooldownPaused, setCooldownPaused] = useState(false)
const [breakActive, setBreakActive] = useState(false)
const { players } = useManagerStore() const { players } = useManagerStore()
useEvent("game:status", ({ name, data }) => { useEvent("game:status", ({ name, data }) => {
@@ -73,6 +74,9 @@ const ManagerGame = () => {
setCooldownPaused(isPaused) setCooldownPaused(isPaused)
}) })
useEvent("game:break", (active) => setBreakActive(active))
useEvent("manager:break", (active) => setBreakActive(active))
const handleSkip = () => { const handleSkip = () => {
if (!gameId) { if (!gameId) {
return return
@@ -115,6 +119,11 @@ const ManagerGame = () => {
} }
} }
const handleBreakToggle = () => {
if (!gameId) return
socket?.emit("manager:setBreak", { gameId, active: !breakActive })
}
const handleEndGame = () => { const handleEndGame = () => {
if (!gameId) return if (!gameId) return
socket?.emit("manager:endGame", { gameId }) socket?.emit("manager:endGame", { gameId })
@@ -173,6 +182,8 @@ const ManagerGame = () => {
showPause={ showPause={
status?.name === STATUS.SHOW_QUESTION || status?.name === STATUS.SELECT_ANSWER status?.name === STATUS.SHOW_QUESTION || status?.name === STATUS.SELECT_ANSWER
} }
onBreakToggle={handleBreakToggle}
breakActive={breakActive}
onEnd={handleEndGame} onEnd={handleEndGame}
players={players} players={players}
manager manager

View File

@@ -21,6 +21,8 @@ type Props = PropsWithChildren & {
onEnd?: () => void onEnd?: () => void
players?: { id: string; username: string; connected: boolean }[] players?: { id: string; username: string; connected: boolean }[]
manager?: boolean manager?: boolean
onBreakToggle?: () => void
breakActive?: boolean
} }
const GameWrapper = ({ const GameWrapper = ({
@@ -33,6 +35,8 @@ const GameWrapper = ({
onEnd, onEnd,
players, players,
manager, manager,
onBreakToggle,
breakActive,
}: Props) => { }: Props) => {
const { isConnected } = useSocket() const { isConnected } = useSocket()
const { player } = usePlayerStore() const { player } = usePlayerStore()
@@ -135,6 +139,17 @@ const GameWrapper = ({
</Button> </Button>
)} )}
{manager && onBreakToggle && (
<Button
className={clsx("self-end bg-white px-4 text-black!", {
"pointer-events-none": isDisabled,
})}
onClick={onBreakToggle}
>
{breakActive ? "Resume game" : "Break"}
</Button>
)}
{manager && onEnd && ( {manager && onEnd && (
<Button className="self-end bg-red-600 px-4" onClick={onEnd}> <Button className="self-end bg-red-600 px-4" onClick={onEnd}>
End game End game