;
case 'Chaos': return ;
case 'Slay': return ;
case 'Heal': return ;
diff --git a/client/src/components/anims/strike.jsx b/client/src/components/anims/strike.jsx
index 188cc043..61623e76 100644
--- a/client/src/components/anims/strike.jsx
+++ b/client/src/components/anims/strike.jsx
@@ -63,15 +63,6 @@ class Strike extends Component {
}
componentDidMount() {
- this.animations.push(anime({
- targets: ['#strike'],
- opacity: [
- { value: 1, delay: TIMES.TARGET_DELAY_MS, duration: TIMES.TARGET_DURATION_MS * 0.2 },
- { value: 0, delay: TIMES.TARGET_DURATION_MS * 0.6, duration: TIMES.TARGET_DURATION_MS * 0.2 },
- ],
- easing: 'easeInOutSine',
- }));
-
if (!this.props.team) {
anime.set('#strike', {
rotate: Math.random() * 180 + 90,
@@ -81,15 +72,22 @@ class Strike extends Component {
rotate: Math.random() * 180 + 270,
});
}
+
anime.set('#strike', {
translateY: -200,
translateX: 0,
});
- anime.set('#strikeFilter feDisplacementMap', {
- scale: 1,
- });
- anime({
+ this.animations.push(anime({
+ targets: '#strike',
+ opacity: [
+ { value: 1, delay: TIMES.TARGET_DELAY_MS, duration: TIMES.TARGET_DURATION_MS * 0.2 },
+ { value: 0, delay: TIMES.TARGET_DURATION_MS * 0.6, duration: TIMES.TARGET_DURATION_MS * 0.2 },
+ ],
+ easing: 'easeInOutSine',
+ }));
+
+ this.animations.push(anime({
targets: '#strike',
translateY: 0,
translateX: 0,
@@ -97,14 +95,14 @@ class Strike extends Component {
delay: TIMES.TARGET_DELAY_MS,
duration: (TIMES.TARGET_DURATION_MS * 1 / 2),
easing: 'easeInQuad',
- });
- anime({
+ }));
+ this.animations.push(anime({
targets: '#strikeFilter feDisplacementMap',
scale: 200,
loop: false,
delay: (TIMES.TARGET_DELAY_MS + TIMES.TARGET_DURATION_MS * 1 / 4),
easing: 'easeInQuad',
- });
+ }));
}
componentWillUnmount() {
diff --git a/client/src/components/construct.jsx b/client/src/components/construct.jsx
index 410c04d2..2a16c0ae 100644
--- a/client/src/components/construct.jsx
+++ b/client/src/components/construct.jsx
@@ -1,5 +1,6 @@
const preact = require('preact');
const { Component } = require('preact');
+const { connect } = require('preact-redux');
const anime = require('animejs').default;
@@ -38,6 +39,13 @@ function clearAnimation(id) {
animations[id] = false;
}
+const addState = connect(
+ function receiveState(state) {
+ const { avatarAnimation } = state;
+ return { avatarAnimation };
+ }
+);
+
class ConstructAvatar extends Component {
render() {
return (
@@ -53,6 +61,11 @@ class ConstructAvatar extends Component {
animateConstruct(this.props.id);
}
+ componentWillReceiveProps(nextProps) {
+ // console.log(this.props);
+ // console.log(nextProps);
+ }
+
componentWillUnmount() {
clearAnimation(this.props.id);
}
@@ -81,6 +94,6 @@ class ConstructImg extends Component {
}
module.exports = {
- ConstructAvatar,
+ ConstructAvatar: addState(ConstructAvatar),
ConstructImg,
};
diff --git a/client/src/components/game.construct.jsx b/client/src/components/game.construct.jsx
index e89cc7d0..dfb91861 100644
--- a/client/src/components/game.construct.jsx
+++ b/client/src/components/game.construct.jsx
@@ -10,6 +10,9 @@ const shapes = require('./shapes');
const SkillBtn = require('./skill.btn');
+
+const actions = require('../actions');
+
const addState = connect(
function receiveState(state) {
const {
@@ -18,6 +21,7 @@ const addState = connect(
account,
resolution,
activeSkill,
+ avatarAnimation,
} = state;
function selectSkillTarget(targetConstructId) {
@@ -31,15 +35,26 @@ const addState = connect(
if (activeSkill && activeSkill.skill.self_targeting) {
ws.sendGameSkill(game.id, activeSkill.constructId, null, activeSkill.skill.skill);
}
-
return {
game,
account,
resolution,
activeSkill,
+ avatarAnimation,
selectSkillTarget,
};
+ },
+
+ function receiveDispatch(dispatch) {
+ function setAvatarAnimation(c) {
+ return dispatch(actions.setAvatarAnimation(c));
+ }
+
+ return {
+ setAvatarAnimation,
+ };
}
+
);
@@ -52,7 +67,8 @@ function GameConstruct(props) {
player,
resolution,
activeSkill,
- setActiveConstruct,
+ avatarAnimation,
+ setAvatarAnimation,
selectSkillTarget,
} = props;
@@ -77,8 +93,7 @@ function GameConstruct(props) {
const effects = construct.effects.length
? construct.effects.map(c => {c.effect} - {c.duration}T
)
:
;
-
- const combatAnim = animations({ game, account, resolution, player, construct });
+ const combatAnim = animations({ game, account, resolution, player, construct, avatarAnimation, setAvatarAnimation });
const combatText = getCombatText(resolution, construct);
return (
{
if (['Disable', 'TargetKo'].includes(r.event[0])) return cb();
// Create sub events for combat animations
const sequence = getCombatSequence(r);
+ id += 1;
return eachSeries(sequence, (stages, sCb) => {
const stagedR = Object.create(r);
stagedR.sequence = sequence;
stagedR.stages = stages;
+ stagedR.id = id;
let timeout = 0;
if (stages.includes('START_SKILL') && stages.includes('END_SKILL')) {
diff --git a/client/src/reducers.jsx b/client/src/reducers.jsx
index 2498963b..f2cc8cae 100644
--- a/client/src/reducers.jsx
+++ b/client/src/reducers.jsx
@@ -15,6 +15,7 @@ module.exports = {
activeConstruct: createReducer(null, 'SET_ACTIVE_CONSTRUCT'),
activeItem: createReducer(null, 'SET_ACTIVE_VAR'),
activeSkill: createReducer(null, 'SET_ACTIVE_SKILL'),
+ avatarAnimation: createReducer(null, 'SET_AVATAR_ANIMATION'),
combiner: createReducer([null, null, null], 'SET_COMBINER'),
constructs: createReducer([], 'SET_CONSTRUCTS'),
constructDeleteId: createReducer(null, 'SET_CONSTRUCT_DELETE_ID'),