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

兼容大屏分数

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