scoreboard

This commit is contained in:
ntr 2019-06-08 16:15:44 +10:00
parent be427f2271
commit 4722b4507d
4 changed files with 50 additions and 54 deletions

View File

@ -41,8 +41,8 @@ do not allow vbox actions for finished instances
*SERVER*
* std game mode
* time control
* modify time controls to be optional
* eth adapter
* pay for rerolls

View File

@ -5,13 +5,15 @@ const { INFO } = require('./../constants');
const { convertItem } = require('../utils');
const shapes = require('./shapes');
const ScoreBoard = require('./scoreboard');
function InfoComponent(args) {
const {
info,
itemInfo,
combiner,
player,
instance,
} = args;
function Info() {
@ -152,12 +154,13 @@ function InfoComponent(args) {
);
}
// const beginningHdr = instance.phase === 'Lobby'
// ? <h2>game beginning...</h2>
// : null;
const scoreboard = instance.phase === 'Lobby' || info
? null
: <ScoreBoard />;
return (
<div class='info' >
{scoreboard}
<Info />
<Combos />
</div>

View File

@ -5,12 +5,13 @@ const Vbox = require('./vbox.component');
const InfoContainer = require('./info.container');
const InstanceConstructsContainer = require('./instance.constructs');
const EquipmentContainer = require('./instance.equip');
const ScoreBoard = require('./scoreboard');
const actions = require('../actions');
const addState = connect(
function receiveState(state) {
const { ws, instance, nav } = state;
const { instance, nav } = state;
return { instance, nav };
},
@ -34,57 +35,15 @@ function Instance(args) {
} = args;
if (!instance) return false;
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 === 'InProgress') return null;
const players = instance.players.map((p, i) => {
const pText = playerText(p);
return (
<tr key={i}
class={p.ready ? 'ready' : ''}>
<td>{p.name}</td>
<td>{p.wins} / {p.losses}</td>
<td>{pText}</td>
</tr>
);
});
return (
<table class="scoreboard" >
<tbody>
{players}
</tbody>
</table>
);
}
const instanceClasses = `instance ${nav === 'constructs' ? 'constructs-visible' : ''}`;
const lobbyInfo = (instance.phase === 'Lobby')
? <ScoreBoard />
: null;
return (
<main class={instanceClasses} onMouseOver={() => setInfo(null)} >
<ScoreBoard />
{lobbyInfo}
<Vbox />
<InfoContainer />
<EquipmentContainer />

View File

@ -0,0 +1,34 @@
const preact = require('preact');
const { connect } = require('preact-redux');
const addState = connect(
function receiveState(state) {
const { instance } = state;
return { instance };
},
);
function ScoreBoard(args) {
const {
instance,
} = args;
const players = instance.players.map((p, i) =>
<tr key={i}
class={p.ready ? 'ready' : ''}>
<td>{p.name}</td>
<td>{p.wins} / {p.losses}</td>
<td>{p.ready ? 'ready' : ''}</td>
</tr>
);
return (
<table class="scoreboard" >
<tbody>
{players}
</tbody>
</table>
);
}
module.exports = addState(ScoreBoard);