// pixiTMR.animate(pixiApp => pixiApp.ticker.add((delta) => { // if (!sprite.waveAnimation) { // sprite.waveAnimation = { // originx: sprite.x, // movex: 0, // step: 0.03 // } // } // else { // if (Math.abs(sprite.waveAnimation.movex) > 2) { // sprite.waveAnimation.step = -sprite.waveAnimation.step // } // sprite.waveAnimation.movex += sprite.waveAnimation.step; // } // sprite.x = sprite.waveAnimation.originx + sprite.waveAnimation.movex // })); // return pixiTMR.square(this.code(), // { // zIndex: tmrTokenZIndex.trounoir, // tint: tmrColors.trounoir, // alpha: 1, // taille: () => pixiTMR.sizes.full, // decallage: { // x: -pixiTMR.sizes.half, // y: -pixiTMR.sizes.half // } // }) export class TMRAnimations { static withAnimation(sprite, pixiTMR, ...animations) { if (animations.length > 0) { animations.forEach(animation => pixiTMR.animate(pixiApp => pixiApp.ticker.add(delta => animation(sprite, delta))) ) } return sprite } static rotation(options = { frequence: () => 1, angle: () => 1 }) { return (sprite, delta) => { if (!sprite.tmrConfig) { sprite.tmrConfig = { nextTick: 0 } } sprite.tmrConfig.nextTick -= delta if (sprite.tmrConfig.nextTick <= 0) { sprite.tmrConfig.nextTick = options.frequence(delta) sprite.angle += options.angle(delta) } } } static changeZoom(range = { min: 0.8, max: 1.2, step: 0.005 }) { return (sprite, delta) => { if (!sprite.tmrConfig) { sprite.tmrConfig = TMRAnimations.startRange(range) } sprite.tmrConfig.current += (sprite.tmrConfig.step * delta) if (sprite.tmrConfig.current < sprite.tmrConfig.min) { sprite.tmrConfig.step = Math.abs(sprite.tmrConfig.step) } else if (sprite.tmrConfig.current > sprite.tmrConfig.max) { sprite.tmrConfig.step = -Math.abs(sprite.tmrConfig.step) } const taille = sprite.tmrConfig.current * sprite.taille() sprite.width = taille sprite.height = taille } } static verticalAxis(options = { step: 1 }) { return (sprite, delta) => { if (!sprite.tmrConfig) { sprite.tmrConfig = this.startRange({ min: -Math.PI / 2, max: Math.PI / 2, step: options.step * Math.PI / 180, }) } sprite.tmrConfig.current += (sprite.tmrConfig.step * delta) sprite.width = Math.cos(sprite.tmrConfig.current) * sprite.taille() } } static startRange(range) { range.current = TMRAnimations.randomInSegment(range) const min = range.min if (min > range.max) { range.min = range.max range.max = min } return range } static outOfRange(range) { return range.current < range.min || range.current > range.max } static randomInSegment(range) { const min = range.min const max = range.max const step = range.step return min + (Math.floor(Math.random() / step) * step) * (max - min) } }