79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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)
 | |
|   }
 | |
| }
 |