const preact = require('preact'); const range = require('lodash/range'); const { ITEMS: { SPECS: SPEC_CONSTANT }, INFO } = require('./../constants'); const { COLOUR_ICONS, convertItem } = require('../utils'); function Info(args) { const { info, itemInfo, combiner, instance, player, } = args; function Info() { if (!info) return false; const fullInfo = itemInfo.items.find(i => i.item === info) || INFO[info]; if (!fullInfo) return false; const isSkill = fullInfo.skill; const isSpec = fullInfo.spec; let red = 0; let blue = 0; let green = 0; player.cryps.forEach(cryp => { red += cryp.colours.red; blue += cryp.colours.blue; green += cryp.colours.green; }); const teamColours = { red, blue, green }; if (isSkill) { return (

{fullInfo.item}

{fullInfo.description}
); } if (isSpec) { const breaks = SPEC_CONSTANT[info].thresholds; const colourReqs = SPEC_CONSTANT[info].colours || []; const thresholdEl = colourReqs.map((c, i) => { const numIcons = Math.max(...breaks); const dots = range(0, numIcons).map(j => { const unmet = teamColours[c] < j + 1; const caption = breaks.includes(j + 1) ? '+ x' : ''; const reqClass = unmet ? 'unmet' : ''; return (
{COLOUR_ICONS[c].svg(`stat-icon ${COLOUR_ICONS[c].colour}`)}
{caption}
); }); return (
{dots}
); }); return (
{info}
{fullInfo.description}
{thresholdEl}
); } return (

{fullInfo.item}

{fullInfo.description}
); } 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 ( {p.name} {p.score.wins} / {p.score.losses} {pText} ); }); return ( {players}
); } function Combos() { if (info) return false; if (!player) return false; if (!(combiner.every(u => u === null))) { const filteredCombos = itemInfo.combos .filter(combo => combiner.every(u => u === null || combo.units.includes(player.vbox.bound[u]))); if (filteredCombos.length > 6) return false; return ( {filteredCombos.map((c, i) => {c.units.map((u, j) => )} )}
{convertItem(c.item)}{convertItem(u)}
); } const vboxCombos = itemInfo.combos.filter(c => c.units.includes(info)); if (vboxCombos.length > 6) return false; return ( {vboxCombos.map((c, i) => {c.units.map((u, j) => )} )}
{convertItem(c.item)}{convertItem(u)}
); } // const beginningHdr = instance.phase === 'Lobby' // ?

game beginning...

// : null; return (
); } // Takes up too much space maybe a context switch module.exports = Info;