const { connect } = require('react-redux'); const preact = require('preact'); const range = require('lodash/range'); const actions = require('../actions'); const { STATS, eventClasses, getCombatText, constructAvatar } = require('../utils'); const { animationDivs } = require('../animations'); const shapes = require('./shapes'); const SkillBtn = require('./skill.btn'); const addState = connect( function receiveState(state) { const { ws, game, account, resolution, activeSkill, } = state; function selectSkillTarget(targetConstructId) { if (activeSkill) { return ws.sendGameSkill(game.id, activeSkill.constructId, targetConstructId, activeSkill.skill); } return false; } // intercept self casting skills if (activeSkill && activeSkill.skill.self_targeting) { ws.sendGameSkill(game.id, activeSkill.constructId, null, activeSkill.skill.skill); } return { game, account, resolution, activeSkill, selectSkillTarget, }; }, ); function GameConstruct(props) { const { game, account, construct, resolution, activeSkill, setActiveConstruct, selectSkillTarget, } = props; const ko = construct.green_life.value === 0 ? 'ko' : ''; const classes = eventClasses(resolution, construct); const skills = range(0, 3) .map(i => ); const stats = ['RedLife', 'GreenLife', 'BlueLife'].map((s, j) => (
{shapes[s]()}
{construct[STATS[s].stat].value} / {construct[STATS[s].stat].max}
{construct[STATS[s].stat].value}
)); const [combatText, combatClass] = getCombatText(construct, resolution); const combatTextClass = `combat-text ${combatClass}`; const combatTextEl = combatText ?
{combatText}
: null; const effects = construct.effects.length ? construct.effects.map(c =>
{c.effect} - {c.duration}T
) :
 
; const playerTeam = game.players.find(t => t.id === account.id); const playerTeamIds = playerTeam.constructs.map(c => c.id); const targeting = game.stack .filter(s => playerTeamIds.includes(s.source_construct_id) && s.target_construct_id === construct.id) .map((s, i) =>

{`< ${s.skill}`}

); const anim = (
{animationDivs(combatClass)}
); return (

{construct.name}

{skills}
{targeting}
selectSkillTarget(construct.id)} > {constructAvatar(construct.name, construct.id)} {combatTextEl} {anim}
{effects}
{stats}
); } module.exports = addState(GameConstruct);