scoreboard

This commit is contained in:
ntr 2019-05-21 16:55:17 +10:00
parent 27a7a6e114
commit 35bcd89c03
5 changed files with 62 additions and 49 deletions

View File

@ -28,6 +28,10 @@
grid-area: top; grid-area: top;
} }
.instance .scoreboard {
grid-area: cryps;
}
.instance-ui-btn { .instance-ui-btn {
font-size: 100%; font-size: 100%;
padding: 0; padding: 0;

View File

@ -91,51 +91,6 @@ function Info(args) {
); );
} }
function playerRound(id) {
if (!instance.rounds.length) return null;
return instance.rounds[instance.rounds.length - 1].find(r => r.player_ids.includes(id));
}
function playerText(p) {
const round = playerRound(p.id);
if (!round) {
return p.ready
? 'ready'
: '';
}
if (round.finished) return 'finished';
if (round.game_id) return 'in game';
return p.ready
? 'ready'
: '';
}
function ScoreBoard() {
if (info[0]) return null;
const players = instance.players.map((p, i) => {
const pText = playerText(p);
return (
<tr key={i}
className={p.ready ? 'ready' : ''}>
<td>{p.name}</td>
<td>{p.score.wins} / {p.score.losses}</td>
<td>{pText}</td>
</tr>
);
});
return (
<table>
<tbody>
{players}
</tbody>
</table>
);
}
function Combos() { function Combos() {
if (!player) return false; if (!player) return false;
@ -185,6 +140,4 @@ function Info(args) {
); );
} }
// <ScoreBoard /> Takes up too much space maybe a context switch
module.exports = Info; module.exports = Info;

View File

@ -46,10 +46,13 @@ function Instance(args) {
} }
const rdyClasses = `instance-btn instance-ui-btn ${player.ready ? 'ready' : ''}`; const rdyClasses = `instance-btn instance-ui-btn ${player.ready ? 'ready' : ''}`;
const readyInfo = instance.phase === 'Lobby'
? 'lobbyReady'
: 'ready';
const readyBtn = ( const readyBtn = (
<button <button
className={rdyClasses} className={rdyClasses}
onMouseOver={e => hoverInfo(e, 'ready')} onMouseOver={e => hoverInfo(e, readyInfo)}
onClick={() => sendInstanceReady()}> onClick={() => sendInstanceReady()}>
Ready Ready
</button> </button>
@ -69,6 +72,51 @@ function Instance(args) {
background: player.ready ? 'forestgreen' : 'whitesmoke', background: player.ready ? 'forestgreen' : 'whitesmoke',
}; };
function playerRound(id) {
if (!instance.rounds.length) return null;
return instance.rounds[instance.rounds.length - 1].find(r => r.player_ids.includes(id));
}
function playerText(p) {
const round = playerRound(p.id);
if (!round) {
return p.ready
? 'ready'
: '';
}
if (round.finished) return 'finished';
if (round.game_id) return 'in game';
return p.ready
? 'ready'
: '';
}
function ScoreBoard() {
if (instance.phase !== 'Lobby') return null;
const players = instance.players.map((p, i) => {
const pText = playerText(p);
return (
<tr key={i}
className={p.ready ? 'ready' : ''}>
<td>{p.name}</td>
<td>{p.score.wins} / {p.score.losses}</td>
<td>{pText}</td>
</tr>
);
});
return (
<table className="scoreboard" >
<tbody>
{players}
</tbody>
</table>
);
}
const timer = ( const timer = (
<div className="timer-container"> <div className="timer-container">
<div className="timer" style={timerStyles} >&nbsp;</div> <div className="timer" style={timerStyles} >&nbsp;</div>
@ -84,6 +132,7 @@ function Instance(args) {
<input type="checkbox" id="toggle-vbox"/> <input type="checkbox" id="toggle-vbox"/>
<label id="toggle-vbox-label" htmlFor="toggle-vbox">&nbsp;</label> <label id="toggle-vbox-label" htmlFor="toggle-vbox">&nbsp;</label>
<ScoreBoard />
<Vbox /> <Vbox />
<InfoContainer /> <InfoContainer />
<EquipmentContainer /> <EquipmentContainer />

View File

@ -14,7 +14,7 @@ const addState = connect(
return ws.sendVboxUnequip(instance.id, crypId, item); return ws.sendVboxUnequip(instance.id, crypId, item);
} }
return { player, itemInfo, info, sendUnequip, activeCryp, itemUnequip }; return { player, itemInfo, instance, info, sendUnequip, activeCryp, itemUnequip };
}, },
function receiveDispatch(dispatch) { function receiveDispatch(dispatch) {
@ -42,6 +42,7 @@ const addState = connect(
function Equipment(props) { function Equipment(props) {
const { const {
player, player,
instance,
itemUnequip, itemUnequip,
setItemEquip, setItemEquip,
@ -54,6 +55,8 @@ function Equipment(props) {
setInfo, setInfo,
} = props; } = props;
if (instance.phase === 'Lobby') return false;
const { vbox } = player; const { vbox } = player;
const fullInfo = itemInfo.items.find(i => i.item === itemUnequip); const fullInfo = itemInfo.items.find(i => i.item === itemUnequip);

View File

@ -27,6 +27,10 @@ module.exports = {
item: 'READY', item: 'READY',
description: 'Ends the VBOX PHASE. If your opponent is also ready the GAME PHASE begins.', description: 'Ends the VBOX PHASE. If your opponent is also ready the GAME PHASE begins.',
}, },
lobbyReady: {
item: 'READY',
description: 'Ready for the game to begin. When all players are ready the first VBOX PHASE begins.',
},
reclaim: { reclaim: {
item: 'RECLAIM', item: 'RECLAIM',
description: 'Reclaim ITEMS for half the purchase cost of their combined ITEMS.\nClick to enable and click ITEM to reclaim.', description: 'Reclaim ITEMS for half the purchase cost of their combined ITEMS.\nClick to enable and click ITEM to reclaim.',