diff --git a/client/src/components/animations.jsx b/client/src/components/animations.jsx index 47e7a667..4ecfc4a4 100644 --- a/client/src/components/animations.jsx +++ b/client/src/components/animations.jsx @@ -23,11 +23,12 @@ const Strike = require('./anims/strike'); const Parry = require('./anims/parry'); const Purify = require('./anims/purify'); const Recharge = require('./anims/recharge'); -const Reflect = require('./anims/reflect'); +const Refl = require('./anims/reflect'); const Chaos = require('./anims/chaos'); const Invert = require('./anims/invert'); const Slay = require('./anims/slay'); const Intercept = require('./anims/intercept'); +const Sleep = require('./anims/sleep'); const Triage = require('./anims/triage'); const TriageTick = require('./anims/triage.tick'); const Siphon = require('./anims/siphon'); @@ -138,7 +139,7 @@ function animations(props) { case 'Banish': return ; case 'Bash': return ; case 'Hex': return ; - case 'Sleep': return false; + case 'Sleep': return ; case 'Throw': return false; case 'Ruin': return false; @@ -151,7 +152,7 @@ function animations(props) { case 'Parry': return ; case 'Purify': return ; case 'Recharge': return ; - case 'Reflect': return ; + case 'Reflect': return ; default: return false; } diff --git a/client/src/components/anims/sleep.jsx b/client/src/components/anims/sleep.jsx new file mode 100644 index 00000000..d25c7268 --- /dev/null +++ b/client/src/components/anims/sleep.jsx @@ -0,0 +1,142 @@ +const preact = require('preact'); +const { Component } = require('preact'); +const anime = require('animejs').default; + +const { TIMES, COLOURS } = require('../../constants'); +const { randomPoints } = require('../../utils'); + +// logarithmic spiral lifted from +// https://upload.wikimedia.org/wikipedia/commons/5/5b/Logarithmic_spiral_(1).svg + +function projectile(x, y, radius, colour) { + return ( + + ); +} + +class Sleep extends Component { + constructor() { + super(); + this.animations = []; + const points = randomPoints(30, 30, { x: -250, y: -150, width: 600, height: 600 }); + this.charges = points.map(coord => projectile(coord[0], coord[1], 15, COLOURS.GREEN)); + } + + render() { + const path = 'M0,100 C100,100 100,100 200,100'; + + return ( + + + + + + + + + + + + + + + {this.charges} + + + ); + } + + componentDidMount() { + anime.set('#sleep', { + translateY: 75, + }); + + this.animations.push(anime({ + targets: ['#sleep'], + opacity: [ + { value: 1, delay: TIMES.TARGET_DELAY_MS, duration: TIMES.TARGET_DURATION_MS * 0.2 }, + ], + easing: 'easeInOutSine', + })); + + this.animations.push(anime({ + targets: ['#sleep'], + rotate: 180, + easing: 'linear', + loop: true, + delay: TIMES.TARGET_DELAY_MS, + duration: TIMES.TARGET_DURATION_MS + TIMES.POST_SKILL_DURATION_MS, + })); + + this.animations.push(anime({ + targets: ['#stun'], + opacity: [ + { value: 0, delay: TIMES.TARGET_DELAY_MS + TIMES.TARGET_DURATION_MS * 0.8, duration: TIMES.TARGET_DURATION_MS * 0.2 }, + ], + easing: 'easeInOutSine', + })); + +/* this.animations.push(anime({ + targets: ['#heal'], + opacity: [ + { value: 1, delay: TIMES.TARGET_DELAY_MS + TIMES.TARGET_DURATION_MS * 0.7, duration: TIMES.TARGET_DURATION_MS * 0.3 }, + { value: 0, delay: TIMES.POST_SKILL_DURATION_MS * 0.6, duration: TIMES.POST_SKILL_DURATION_MS * 0.4 }, + ], + easing: 'easeInOutSine', + })); +*/ + + this.animations.push(anime({ + targets: ['#charges'], + opacity: 1, + delay: anime.stagger(TIMES.TARGET_DURATION_MS * 0.015, { start: TIMES.TARGET_DELAY_MS }), + easing: 'easeInOutSine', + })); + + + this.animations.push(anime({ + targets: ['#charges'], + cx: 0, + cy: 0, + delay: TIMES.TARGET_DELAY_MS + TIMES.TARGET_DURATION_MS + TIMES.POST_SKILL_DURATION_MS * 0.75, + duration: TIMES.POST_SKILL_DURATION_MS * 0.25, + easing: 'easeInOutSine', + })); + + } + + // this is necessary because + // skipping / timing / unmounting race conditions + // can cause the animations to cut short, this will ensure the values are reset + // because preact will recycle all these components + componentWillUnmount() { + for (let i = this.animations.length - 1; i >= 0; i--) { + this.animations[i].reset(); + } + } +} + +module.exports = Sleep; diff --git a/client/src/utils.jsx b/client/src/utils.jsx index 698ad096..0e3b4d2d 100644 --- a/client/src/utils.jsx +++ b/client/src/utils.jsx @@ -334,6 +334,8 @@ const removeTier = skill => { if (skill.includes('SiphonTick')) return 'SiphonTick'; if (skill.includes('TriageTick')) return 'TriageTick'; + if (skill.includes('DecayTick')) return 'DecayTick'; + if (skill.includes('ElectrocuteTick')) return 'ElectrocuteTick'; if (skill.includes('Strike')) return 'Strike'; if (skill.includes('Heal')) return 'Heal'; @@ -359,6 +361,7 @@ const removeTier = skill => { if (skill.includes('Parry')) return 'Parry'; if (skill.includes('Purify')) return 'Purify'; if (skill.includes('Electrify')) return 'Electrify'; + if (skill.includes('Electrocute')) return 'Electrocute'; if (skill.includes('Clutch')) return 'Clutch'; if (skill.includes('Reflect')) return 'Reflect'; if (skill.includes('Recharge')) return 'Recharge';