const preact = require('preact'); const range = require('lodash/range'); const reactStringReplace = require('react-string-replace'); const { INFO } = require('./../constants'); const { convertItem, removeTier } = require('../utils'); const shapes = require('./shapes'); function InfoComponent(args) { const { itemInfo, player, info, } = args; // args.info = 'Life'; // const { info } = args; function Info() { if (!info) { return (

VBOX phase

Strengthen and specialise your constructs by equipping items to them.

Double click to purchase items in the VBOX and move them to your INVENTORY.

Combine a SKILL or SPEC with 2 COLOURS to create an item.
Combine 3 of the same item to upgrade it.
Click an item and then click a construct to equip that item to it.

Click the READY button for the GAME PHASE.

); } const fullInfo = itemInfo.items.find(i => i.item === info) || INFO[info]; if (!fullInfo) return false; const isSkill = fullInfo.skill; const isSpec = fullInfo.spec; if (isSkill) { const regEx = /(RedPower|BluePower|GreenPower|RedLife|BlueLife|GreenLife|SpeedStat)/; const infoDescription = reactStringReplace(fullInfo.description, regEx, match => shapes[match]()); const itemSource = itemInfo.combos.filter(c => c.item === removeTier(info)); const itemSourceInfo = itemSource.length ? `${itemSource[0].components[0]} ${itemSource[0].components[1]} ${itemSource[0].components[2]}` : false; const itemRegEx = /(Red|Blue|Green)/; const itemSourceDescription = reactStringReplace(itemSourceInfo, itemRegEx, match => shapes[match]()); const speed =
Speed {shapes.SpeedStat()} multiplier {fullInfo.speed * 4}%
; const cooldown = fullInfo.cooldown ? `${fullInfo.cooldown} Turn delay` : null; return (

{fullInfo.item} - {fullInfo.cost}b

SKILL

{itemSourceDescription}
{cooldown}
{infoDescription}
{speed}
); } if (isSpec) { let red = 0; let blue = 0; let green = 0; player.constructs.forEach(construct => { red += construct.colours.red; blue += construct.colours.blue; green += construct.colours.green; }); const teamColours = { red, blue, green }; const colourReqs = fullInfo.values.bonuses || []; const thresholds = colourReqs.map((bonus, i) => { const colours = ['red', 'green', 'blue']; const colourGoals = { red: [], green: [], blue: [], }; const overFlow = []; colours.forEach(c => { const colourReq = bonus.req[c]; if (colourReqs === 0) return false; const start = i === 0 ? 0 : colourReqs[i - 1].req[c]; const dots = range(start, colourReq).map(j => { const unmet = teamColours[c] < j + 1; const reqClass = unmet ? 'unmet' : ''; if (j - start > 4) { overFlow.push(
{shapes.vboxColour(c)}
); } else { colourGoals[c].push(
{shapes.vboxColour(c)}
); } return true; }); return dots; }); const reqsMet = colours.every(c => teamColours[c] >= bonus.req[c]); const reqClass = reqsMet ? '' : 'unmet'; const goals = colours.map((c, j) => { if (colourGoals[c].length) { return (
{colourGoals[c]}
); } return false; }); const bonusObj = info.includes('Life') ?
+ {bonus.bonus}
:
+ {bonus.bonus}%
; const overFlowObj = overFlow.length ?
{overFlow}
: null; return (
{goals} {overFlowObj} {bonusObj}
); }); const regEx = /(RedPower|BluePower|GreenPower|RedLife|BlueLife|GreenLife|SpeedStat)/; const infoDescription = reactStringReplace(fullInfo.description, regEx, match => shapes[match]()); const itemSource = itemInfo.combos.filter(c => c.item === info); const itemSourceInfo = itemSource.length ? `${itemSource[0].components[0]} ${itemSource[0].components[1]} ${itemSource[0].components[2]}` : false; const itemRegEx = /(Red|Blue|Green)/; const itemSourceDescription = reactStringReplace(itemSourceInfo, itemRegEx, match => shapes[match]()); return (

{info} - {fullInfo.cost}b

SPEC

{itemSourceDescription}
{infoDescription}
{thresholds}
); } const cost = fullInfo.cost ? `- ${fullInfo.cost}b` : false; return (

{fullInfo.item} {cost}

{fullInfo.description}
); } function Combos() { if (!player) return false; if (!info) return false; const vboxCombos = itemInfo.combos.filter(c => c.components.includes(info)); if (vboxCombos.length > 6) return false; return ( {vboxCombos.map((c, i) => {c.components.map((u, j) => )} )}
{convertItem(c.item)}{convertItem(u)}
); } return (
); } module.exports = InfoComponent;