Merge branch 'vbox-perf' into tutorial-merged

This commit is contained in:
Mashy 2019-10-28 12:02:35 +10:00
commit 4331a39f42
4 changed files with 397 additions and 365 deletions

View File

@ -39,7 +39,6 @@ const Stun = require('./anims/stun');
const Triage = require('./anims/triage'); const Triage = require('./anims/triage');
const TriageTick = require('./anims/triage.tick'); const TriageTick = require('./anims/triage.tick');
const actions = require('../actions');
const { removeTier } = require('../utils'); const { removeTier } = require('../utils');
@ -47,10 +46,16 @@ const addState = connect(
function receiveState(state) { function receiveState(state) {
const { animTarget } = state; const { animTarget } = state;
return { animTarget }; return { animTarget };
}, }
); );
class ConstructAnimation extends Component { class ConstructAnimation extends Component {
shouldComponentUpdate(nextProps) {
if (nextProps.animTarget !== this.props.animTarget) return true;
if (nextProps.construct !== this.props.construct) return true;
return false;
}
render(props) { render(props) {
const { const {
animTarget, animTarget,
@ -70,7 +75,7 @@ class ConstructAnimation extends Component {
// find target animation // find target animation
const chooseAnim = (animSkill) => { const chooseAnim = () => {
switch (animSkill) { switch (animSkill) {
// Attack base // Attack base
case 'Attack': return <Attack direction={direction}/>; case 'Attack': return <Attack direction={direction}/>;
@ -124,7 +129,7 @@ class ConstructAnimation extends Component {
case 'Reflect': return <Refl player={player} />; case 'Reflect': return <Refl player={player} />;
default: return false; default: return false;
}; }
}; };
const anim = chooseAnim(animSkill); const anim = chooseAnim(animSkill);

View File

@ -2,14 +2,13 @@ const preact = require('preact');
const range = require('lodash/range'); const range = require('lodash/range');
const reactStringReplace = require('react-string-replace'); const reactStringReplace = require('react-string-replace');
const { Component } = require('preact');
const { INFO } = require('./../constants'); const { INFO } = require('./../constants');
const { convertItem, removeTier } = require('../utils'); const { convertItem, removeTier } = require('../utils');
const { tutorialStage } = require('../tutorial.utils'); const { tutorialStage } = require('../tutorial.utils');
const shapes = require('./shapes'); const shapes = require('./shapes');
class InfoComponent extends Component { class InfoComponent extends preact.Component {
shouldComponentUpdate(newProps) { shouldComponentUpdate(newProps) {
if (newProps.tutorial !== this.props.tutorial) return true; if (newProps.tutorial !== this.props.tutorial) return true;
// We don't care about info during tutorial // We don't care about info during tutorial

View File

@ -19,7 +19,6 @@ const addState = connect(
account, account,
itemInfo, itemInfo,
itemEquip, itemEquip,
activeConstruct,
navInstance, navInstance,
tutorial, tutorial,
} = state; } = state;
@ -40,7 +39,6 @@ const addState = connect(
itemInfo, itemInfo,
itemEquip, itemEquip,
navInstance, navInstance,
activeConstruct,
sendUnequip, sendUnequip,
tutorial, tutorial,
}; };
@ -78,20 +76,20 @@ const addState = connect(
function Construct(props) { function Construct(props) {
const { const {
// Changing state variables
construct,
iter, iter,
itemEquip, itemEquip,
instance, instance,
construct,
player, player,
tutorial,
// Function Calls
sendVboxApply, sendVboxApply,
sendUnequip,
setActiveConstruct, setActiveConstruct,
setItemUnequip, setItemUnequip,
setItemEquip, setItemEquip,
itemInfo,
setInfo, setInfo,
sendUnequip,
mobileVisible,
tutorial,
} = props; } = props;
const { vbox } = player; const { vbox } = player;
@ -242,24 +240,35 @@ function Construct(props) {
); );
} }
function InstanceConstructs(props) { class InstanceConstructs extends preact.Component {
shouldComponentUpdate(newProps) {
if (newProps.itemEquip !== this.props.itemEquip) return true;
if (newProps.tutorial !== this.props.tutorial) return true;
if (newProps.navInstance !== this.props.navInstance) return true;
// JSON or Array objects
if (newProps.player !== this.props.player) return true;
if (newProps.instance !== this.props.instance) return true;
return false;
}
render(props) {
const { const {
activeConstruct, // Changing state variables
itemEquip, itemEquip,
player,
instance, instance,
// clearInfo, navInstance,
player,
tutorial,
// Static data
itemInfo,
// Function calls
setInfo, setInfo,
setActiveConstruct, setActiveConstruct,
sendVboxApply, sendVboxApply,
itemInfo,
setVboxHighlight, setVboxHighlight,
setItemUnequip, setItemUnequip,
setItemEquip, setItemEquip,
sendUnequip, sendUnequip,
navInstance,
tutorial,
} = props; } = props;
if (!player) return false; if (!player) return false;
@ -268,12 +277,12 @@ function InstanceConstructs(props) {
const constructs = range(0, 3).map(i => { const constructs = range(0, 3).map(i => {
const tutorialConstruct = tutorialConstructDisplay(player, instance, tutorial, navInstance, i); const tutorialConstruct = tutorialConstructDisplay(player, instance, tutorial, navInstance, i);
if (tutorialConstruct) return (tutorialConstruct); if (tutorialConstruct) return (tutorialConstruct);
return Construct({ return Construct({
iter: i, iter: i,
construct: player.constructs[i], construct: player.constructs[i],
activeConstruct,
instance,
itemEquip, itemEquip,
instance,
setItemUnequip, setItemUnequip,
setItemEquip, setItemEquip,
player, player,
@ -294,5 +303,6 @@ function InstanceConstructs(props) {
</div> </div>
); );
} }
}
module.exports = addState(InstanceConstructs); module.exports = addState(InstanceConstructs);

View File

@ -1,8 +1,9 @@
const preact = require('preact'); const preact = require('preact');
const { connect } = require('preact-redux');
const range = require('lodash/range'); const range = require('lodash/range');
const countBy = require('lodash/countBy'); const countBy = require('lodash/countBy');
const without = require('lodash/without'); const without = require('lodash/without');
const { connect } = require('preact-redux');
const { removeTier } = require('../utils'); const { removeTier } = require('../utils');
const shapes = require('./shapes'); const shapes = require('./shapes');
const actions = require('../actions'); const actions = require('../actions');
@ -95,31 +96,47 @@ const addState = connect(
); );
function Vbox(args) { class Vbox extends preact.Component {
shouldComponentUpdate(newProps) {
// Single variable props
if (newProps.combiner !== this.props.combiner) return true;
if (newProps.itemUnequip !== this.props.itemUnequip) return true;
if (newProps.reclaiming !== this.props.reclaiming) return true;
if (newProps.navInstance !== this.props.navInstance) return true;
if (newProps.tutorial !== this.props.tutorial) return true;
// Don't bother if info changes during tutorial
if (!newProps.tutorial && newProps.info !== this.props.info) return true;
// JSON or Array objects
if (newProps.vboxSelected !== this.props.vboxSelected) return true;
if (newProps.player !== this.props.player) return true;
return false;
}
render(args) {
const { const {
// Changing state variables
combiner, combiner,
navInstance, itemUnequip,
itemInfo,
player, player,
reclaiming, reclaiming,
tutorial,
navInstance,
info,
vboxSelected,
// Static
itemInfo,
// Function Calls
sendItemUnequip,
sendVboxAccept, sendVboxAccept,
sendVboxCombine, sendVboxCombine,
sendVboxDiscard, sendVboxDiscard,
sendVboxReclaim, sendVboxReclaim,
setCombiner,
setInfo,
vboxSelected,
setVboxSelected, setVboxSelected,
setItemEquip, setItemEquip,
tutorial, setInfo,
itemUnequip, setCombiner,
sendItemUnequip,
setReclaiming, setReclaiming,
info,
} = args; } = args;
if (!player) return false; if (!player) return false;
@ -423,5 +440,6 @@ function Vbox(args) {
</div> </div>
); );
} }
}
module.exports = addState(Vbox); module.exports = addState(Vbox);