提交 1064c573 authored 作者: lidongxu's avatar lidongxu

兼容大屏分数

上级 8d8112f7
......@@ -306,11 +306,13 @@ export function drawTeamResultOverlay(ctx, playerStates, getPlayerTeam, totalWid
const canvasWidth = totalWidth || SCREEN_WIDTH
const canvasHeight = SCREEN_HEIGHT
console.log('[drawTeamResultOverlay]', { totalWidth, canvasWidth, canvasHeight, SCREEN_WIDTH, SCREEN_HEIGHT })
console.log('[drawTeamResultOverlay]', { totalWidth, canvasWidth, canvasHeight, SCREEN_WIDTH, SCREEN_HEIGHT, statesCount: states.length })
console.log('[drawTeamResultOverlay] 玩家状态:', states.map(s => ({ playerId: s.playerId, nickname: s.nickname, score: s.score, team: getPlayerTeam(s.playerId ?? 1) })))
// 按队伍分组
const teamAPlayers = states.filter(s => getPlayerTeam(s.playerId ?? 1) === 'A')
const teamBPlayers = states.filter(s => getPlayerTeam(s.playerId ?? 1) === 'B')
console.log('[drawTeamResultOverlay] 队伍分组:', { A: teamAPlayers.length, B: teamBPlayers.length })
// 计算总分
const teamAScore = teamAPlayers.reduce((sum, p) => sum + (p.score || 0), 0)
......
......@@ -5,7 +5,7 @@
* 发送 → JSON.stringify({ event: string, data: any })
* 接收 ← JSON.stringify({ event: string, data: any })
*/
import { setCurrentRoom, setGameState, clearGameState, setPlayerGameOver, setAllGameOver, setPlayerTeam } from './stateManager.js'
import { setCurrentRoom, setGameState, getPlayerState, clearGameState, setPlayerGameOver, setAllGameOver, setPlayerTeam } from './stateManager.js'
/**
* WebSocket 服务器地址配置
......@@ -122,6 +122,11 @@ function _dispatch(event, data) {
if (data?.playerId && data?.team) {
setPlayerTeam(data.playerId, data.team)
}
// 如果状态中有 nickname,更新到状态中
if (data?.playerId && data?.nickname) {
const prev = getPlayerState(data.playerId) || {}
data.nickname = data.nickname || prev.nickname
}
setGameState(data)
break
}
......@@ -143,11 +148,19 @@ function _dispatch(event, data) {
/**
* 某个玩家游戏结束(正常结束/泡泡压底)
* data: { roomId, score, playerId }
* data: { roomId, scores: {playerId: score, ...}, playerId, nickname }
*/
case 'room:gameOver': {
console.log('[Socket] room:gameOver', data)
setPlayerGameOver(data?.playerId, data?.score, data?.nickname)
// 处理所有玩家的分数(新格式)
if (data?.scores) {
Object.entries(data.scores).forEach(([pid, score]) => {
setPlayerGameOver(Number(pid), score, data.nickname)
})
} else if (data?.playerId !== undefined) {
// 兼容旧格式:单个玩家分数
setPlayerGameOver(data.playerId, data.score, data.nickname)
}
break
}
......
......@@ -54,6 +54,7 @@ export function setPlayerGameOver(playerId, score, nickname) {
const prev = playerStates.get(pid) || {}
playerStates.set(pid, {
...prev,
playerId: pid,
isGameOver: true,
score: score ?? prev.score ?? 0,
nickname: nickname ?? prev.nickname,
......@@ -88,6 +89,13 @@ export function getGameState() {
return all.length > 0 ? all[0] : null
}
/**
* 根据 playerId 获取玩家状态
*/
export function getPlayerState(playerId) {
return playerStates.get(playerId)
}
export function clearGameState() {
playerStates.clear()
playerTeams.clear()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论