Added filtered skills and specs

This commit is contained in:
Mashy 2019-05-13 23:12:04 +10:00
parent 3a06774817
commit 20fd2376e8
3 changed files with 178 additions and 21 deletions

View File

@ -11,8 +11,8 @@
"n v v v v v v v x x x x" "n v v v v v v v x x x x"
"n v v v v v v v x x x x" "n v v v v v v v x x x x"
"n v v v v v v v x x x x" "n v v v v v v v x x x x"
"g g g g g g g g x x x x" "n g g g g g g g x x x x"
"g g g g g g g g x x x x" "n g g g g g g g x x x x"
"f f f f f f f f x x x x" "f f f f f f f f x x x x"
"f f f f f f f f x x x x" "f f f f f f f f x x x x"
"f f f f f f f f x x x x" "f f f f f f f f x x x x"
@ -33,19 +33,6 @@
} }
.instance-cryp-list {
grid-area: f;
flex: 1 1 auto;
display: flex;
flex-flow: row;
padding: 0 2em 0 2em;
align-content: flex-start;
min-width: 300px;
overflow: hidden;
}
.instance .spacer { .instance .spacer {
flex-grow: 1 flex-grow: 1
@ -54,11 +41,11 @@
.vbox { .vbox {
grid-area: v; grid-area: v;
display: grid; display: grid;
grid-template-columns: repeat(11, 1fr); grid-template-columns: 5fr 1fr 5fr;
grid-template-rows: repeat(2, 1fr); grid-template-rows: repeat(2, 1fr);
grid-template-areas: grid-template-areas:
"vb vb vb vb vb . i i i i i" "vb . i"
"vb vb vb vb vb . i i i i i"; "vb . i";
} }
.vbox-box { .vbox-box {
@ -121,6 +108,8 @@
margin: 0; margin: 0;
} }
/* VBOX */
.vbox-btn:active, .vbox-btn:hover, .vbox-btn:focus { .vbox-btn:active, .vbox-btn:hover, .vbox-btn:focus {
color: black; color: black;
} }
@ -177,6 +166,20 @@
} }
/* CRYP BOX */ /* CRYP BOX */
.instance-cryp-list {
grid-area: f;
flex: 1 1 auto;
display: flex;
flex-flow: row;
padding: 0 2em 0 2em;
align-content: flex-start;
min-width: 300px;
overflow: hidden;
}
.instance-cryp { .instance-cryp {
display: grid; display: grid;
grid-template-columns: repeat(5, 1fr); grid-template-columns: repeat(5, 1fr);
@ -249,10 +252,10 @@
grid-area: st; grid-area: st;
display: grid; display: grid;
grid-template-rows: 1fr 3fr; grid-template-rows: 1fr 3fr;
grid-template-columns: repeat(7, 1fr); grid-template-columns: 3fr 1fr 3fr;
grid-template-areas: grid-template-areas:
"dl dl dl sl ll ll ll" "dl sl ll"
"di di di si li li li"; "di si li";
border-top: 1px solid whitesmoke; border-top: 1px solid whitesmoke;
} }
@ -311,4 +314,61 @@
justify-content: center; justify-content: center;
} }
/* Equipment */
.instance-equip {
grid-area: g;
display: flex;
justify-content: center;
}
.instance-equip .skills {
display: flex;
min-height: 100px;
flex-direction: column;
}
.instance-equip .skills button {
flex: 1 1 100%;
color: whitesmoke;
font-size: 16pt;
padding: 10px;
border-width: 0px;
border-bottom-width: 1px;
border-left-width: 1px;
border-right-width: 1px;
border-top-width: 1px;
height: 100%;
}
.instance-equip .specs {
display: flex;
padding-left: 50px;
flex-direction: column;
}
.instance-equip .items {
display: flex;
justify-content: center;
}
.instance-equip .label {
display: flex;
justify-content: center;
font-size: 20pt;
padding: 15px;
}
.instance-equip .specs figure {
flex: 1;
border: 0;
padding: 0.5em 1em 0 0;
text-align: center;
}
.instance-equip .specs figcaption {
font-size: 75%;
}

View File

@ -3,6 +3,7 @@ const preact = require('preact');
const VboxContainer = require('./vbox.container'); const VboxContainer = require('./vbox.container');
const InfoContainer = require('./info.container'); const InfoContainer = require('./info.container');
const InstanceCrypsContainer = require('./instance.cryps'); const InstanceCrypsContainer = require('./instance.cryps');
const EquipmentContainer = require('./instance.equip');
function InstanceComponent(args) { function InstanceComponent(args) {
const { const {
@ -92,6 +93,7 @@ function InstanceComponent(args) {
</div> </div>
<VboxContainer /> <VboxContainer />
<InstanceCrypsContainer /> <InstanceCrypsContainer />
<EquipmentContainer />
<InfoContainer /> <InfoContainer />
</main> </main>
); );

View File

@ -0,0 +1,95 @@
const { connect } = require('preact-redux');
const preact = require('preact');
const range = require('lodash/range');
const actions = require('../actions');
const { convertVar, SPECS } = require('./../utils');
const addState = connect(
function receiveState(state) {
const { player, vboxInfo } = state;
return { player, vboxInfo };
},
function receiveDispatch(dispatch) {
function setInfo(item, value) {
dispatch(actions.setInfo([item, value]));
}
function clearInfo() {
return dispatch(actions.setInfo([]));
}
return { setInfo, clearInfo };
}
);
function Equipment(props) {
const {
player,
setInfo,
vboxInfo,
} = props;
const { vbox } = player;
function boundClick(e, i) {
const value = vbox.bound[i];
setInfo('item', value);
return false;
}
// const classes = `right ${skill ? '' : 'action'}`;
const skillList = vboxInfo.vars.filter(v => v.skill).map(v => v.v);
const specList = vboxInfo.vars.filter(v => v.spec).map(v => v.v);
const skills = range(0, 9).map(i => {
const item = convertVar(vbox.bound[i]);
if (skillList.includes(item)) {
return (
<button key={i} className={''} onClick={e => boundClick(e, i)}>
{item}
</button>
);
} return false;
});
const specs = range(0, 9).map(i => {
const item = convertVar(vbox.bound[i]);
if (specList.includes(item)) {
return (
<figure key={i} onClick={e => boundClick(e, i)}>
{SPECS[item].svg(`stat-icon ${SPECS[item].colour}`)}
<figcaption>{SPECS[item].caption}</figcaption>
</figure>
);
} return false;
});
// const specLabel = specs.every(i => i === false) ? '' : 'Specs';
return (
<div className="instance-equip" >
<div className="skills">
<div className="label">
Skills
</div>
<div className ="items">
{skills}
</div>
</div>
<div className="specs">
<div className="label">
Specs
</div>
<div className ="items">
{specs}
</div>
</div>
</div>
);
}
module.exports = addState(Equipment);