diff --git a/examples/js/loaders/MMDLoader.js b/examples/js/loaders/MMDLoader.js index c8e646666f6dd6d3bc99ebf9767cc65651361bbf..8763e7ffb87a7f2a84e3aa086fe2fd60506fd264 100644 --- a/examples/js/loaders/MMDLoader.js +++ b/examples/js/loaders/MMDLoader.js @@ -2694,15 +2694,15 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) { } - if ( mesh.geometry.animations === undefined ) { + var clip = THREE.AnimationClip.parseAnimation( animation, mesh.geometry.bones ); - mesh.geometry.animations = []; + if ( clip !== null ) { - } + if ( mesh.geometry.animations === undefined ) { - var clip = THREE.AnimationClip.parseAnimation( animation, mesh.geometry.bones ); + mesh.geometry.animations = []; - if ( clip !== null ) { + } mesh.geometry.animations.push( clip ); @@ -2747,6 +2747,8 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) { } + // TODO: should we use THREE.AnimationClip.CreateFromMorphTargetSequence() instead? + var tracks = []; for ( var i = 0; i < orderedMorphs.length; i++ ) { @@ -2767,13 +2769,13 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) { if ( clip !== null ) { - if ( mesh.geometry.morphAnimations === undefined ) { + if ( mesh.geometry.animations === undefined ) { - mesh.geometry.morphAnimations = []; + mesh.geometry.animations = []; } - mesh.geometry.morphAnimations.push( clip ); + mesh.geometry.animations.push( clip ); } @@ -4139,45 +4141,48 @@ THREE.MMDHelper.prototype = { setAnimation: function ( mesh ) { - if ( mesh.geometry.animations !== undefined || mesh.geometry.morphAnimations !== undefined ) { + if ( mesh.geometry.animations !== undefined ) { mesh.mixer = new THREE.AnimationMixer( mesh ); - } - - if ( mesh.geometry.animations !== undefined ) { + var foundAnimation = false; + var foundMorphAnimation = false; for ( var i = 0; i < mesh.geometry.animations.length; i++ ) { - var action = mesh.mixer.clipAction( mesh.geometry.animations[ i ] ); + var clip = mesh.geometry.animations[ i ]; - if ( i === 0 ) { + var action = mesh.mixer.clipAction( clip ); - action.play(); + if ( clip.tracks[ 0 ].name.indexOf( '.morphTargetInfluences' ) === 0 ) { - } + if ( ! foundMorphAnimation ) { - } + action.play(); + foundMorphAnimation = true; - mesh.ikSolver = new THREE.CCDIKSolver( mesh ); + } - if ( mesh.geometry.grants !== undefined ) { + } else { - mesh.grantSolver = new THREE.MMDGrantSolver( mesh ); + if ( ! foundAnimation ) { - } + action.play(); + foundAnimation = true; - } + } - if ( mesh.geometry.morphAnimations !== undefined ) { + } + + } - for ( var i = 0; i < mesh.geometry.morphAnimations.length; i++ ) { + if ( foundAnimation ) { - var action = mesh.mixer.clipAction( mesh.geometry.morphAnimations[ i ] ); + mesh.ikSolver = new THREE.CCDIKSolver( mesh ); - if ( i === 0 ) { + if ( mesh.geometry.grants !== undefined ) { - action.play(); + mesh.grantSolver = new THREE.MMDGrantSolver( mesh ); }