| /** | |
|  * @author mrdoob / http://mrdoob.com | |
|  * @author willy-vvu / http://willy-vvu.github.io | |
|  */ | |
| 
 | |
| THREE.MorphAnimation = function ( mesh ) { | |
| 
 | |
| 	this.mesh = mesh; | |
| 	this.frames = mesh.morphTargetInfluences.length; | |
| 	this.currentTime = 0; | |
| 	this.duration = 1000; | |
| 	this.loop = true; | |
| 	this.lastFrame = 0; | |
| 	this.currentFrame = 0; | |
| 
 | |
| 	this.isPlaying = false; | |
| 
 | |
| }; | |
| 
 | |
| THREE.MorphAnimation.prototype = { | |
| 
 | |
| 	constructor: THREE.MorphAnimation, | |
| 
 | |
| 	play: function () { | |
| 
 | |
| 		this.isPlaying = true; | |
| 
 | |
| 	}, | |
| 
 | |
| 	pause: function () { | |
| 
 | |
| 		this.isPlaying = false; | |
| 
 | |
| 	}, | |
| 
 | |
| 	update: function ( delta ) { | |
| 
 | |
| 		if ( this.isPlaying === false ) return; | |
| 
 | |
| 		this.currentTime += delta; | |
| 
 | |
| 		if ( this.loop === true && this.currentTime > this.duration ) { | |
| 
 | |
| 			this.currentTime %= this.duration; | |
| 
 | |
| 		} | |
| 
 | |
| 		this.currentTime = Math.min( this.currentTime, this.duration ); | |
| 
 | |
| 		var frameTime = this.duration / this.frames; | |
| 		var frame = Math.floor( this.currentTime / frameTime ); | |
| 
 | |
| 		var influences = this.mesh.morphTargetInfluences; | |
| 
 | |
| 		if ( frame !== this.currentFrame ) { | |
| 
 | |
| 			influences[ this.lastFrame ] = 0; | |
| 			influences[ this.currentFrame ] = 1; | |
| 			influences[ frame ] = 0; | |
| 
 | |
| 			this.lastFrame = this.currentFrame; | |
| 			this.currentFrame = frame; | |
| 
 | |
| 		} | |
| 
 | |
| 		var mix = ( this.currentTime % frameTime ) / frameTime; | |
| 
 | |
| 		influences[ frame ] = mix; | |
| 		influences[ this.lastFrame ] = 1 - mix; | |
| 
 | |
| 	} | |
| 
 | |
| };
 |