-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.js
72 lines (67 loc) · 1.95 KB
/
util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
const { getPhrase } = require('junkyard-brawl/src/language')
const { getGame, getSocket } = require('./state')
module.exports = {
scrubGameData,
scrubPlayerData
}
// We need to remove circular references and return
// only the data needing to be sent over the socket.
function scrubGameData(game, playerSocket) {
if (!game) {
return game
}
const language = playerSocket.language || game.language
return {
manager: {
id: game.manager.id,
name: game.manager.name
},
dropouts: game.dropouts.map(player => scrubOpponentData(player, language)),
players: game.players.map(player => scrubOpponentData(player, language)),
started: game.started ? game.started.valueOf() : false,
stopped: game.stopped ? game.stopped.valueOf() : false,
turns: game.turns
}
}
// We can know everything about the player but what is in their hand
function scrubOpponentData(player, language) {
if (!player) {
return player
}
return {
id: player.id,
conditionCards: scrubCards(player.conditionCards, language),
discard: scrubCards(player.discard, language),
extraTurns: player.extraTurns,
name: player.name,
hand: player.hand.map(card => ({ type: 'unknown' })),
hp: player.hp,
maxHand: player.maxHand,
maxHp: player.maxHp,
missTurns: player.missTurns,
score: 12,
turns: player.turns
}
}
// Re-use the data we get from scrubbing an opponent but also hand cards
function scrubPlayerData(player) {
if (!player) {
return player
}
const playerSocket = getSocket(player.id)
const game = getGame(playerSocket.gameId)
const language = playerSocket.language || game.language
return Object.assign(scrubOpponentData(player, language), {
hand: scrubCards(player.hand, language)
})
}
function scrubCards(cards, language) {
return cards.map((card) => {
return {
id: card.id,
name: getPhrase(`card:${card.id}`, language)(),
type: card.type,
uid: card.uid
}
})
}