const preact = require('preact'); const { Component } = require('preact'); const anime = require('animejs').default; const { TIMES } = require('../../constants'); class Debuff extends Component { constructor() { super(); this.animations = []; } render() { return ( ); } componentDidMount() { this.animations.push(anime({ targets: ['#debuff'], opacity: 1, easing: 'easeOutExpo', delay: TIMES.TARGET_DELAY_MS, duration: TIMES.TARGET_DELAY_MS, })); this.animations.push(anime({ targets: ['#debuff .debuff-one'], points: '0,190 100,10 190,190', easing: 'easeOutExpo', duration: TIMES.START_SKILL, })); this.animations.push(anime({ targets: ['#debuff .debuff-two'], points: '40,170 100,50 160,170', easing: 'easeOutExpo', duration: TIMES.START_SKILL, })); this.animations.push(anime({ targets: ['#debuff .debuff-three'], points: '70,150 100,90 130,150', easing: 'easeOutExpo', duration: TIMES.START_SKILL, })); this.animations.push(anime({ targets: ['#debuffFilter feTurbulence', ' #debuffFilter feDisplacementMap'], baseFrequency: 0, scale: 1, easing: 'easeOutSine', delay: TIMES.TARGET_DELAY_MS, duration: TIMES.TARGET_DURATION_MS, })); } // 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 = Debuff;