提交 ef422803 编写于 作者: B Ben Houston

simplify AnimationMixer to prevent bugs.

上级 8a0053f4
......@@ -13,8 +13,7 @@ THREE.AnimationMixer = function( root ) {
this.time = 0;
this.timeScale = 1.0;
this.actions = [];
this.propertyBindings = [];
this.propertyBindingNamesToIndex = {};
this.propertyBindingMap = {};
};
......@@ -38,20 +37,15 @@ THREE.AnimationMixer.prototype = {
var track = tracks[ i ];
var j = this.getPropertyBindingIndex( root, track.name )
var propertyBindingKey = root.uuid + '-' + track.name;
var propertyBinding = this.propertyBindingMap[ propertyBindingKey ];
var propertyBinding;
if( j < 0 ) {
if( propertyBinding === undefined ) {
propertyBinding = new THREE.PropertyBinding( root, track.name );
this.propertyBindings.push( propertyBinding );
this.propertyBindingNamesToIndex[ root.uuid + '-' + track.name ] = this.propertyBindings.length - 1;
this.propertyBindingMap[ propertyBindingKey ] = propertyBinding;
}
else {
propertyBinding = this.propertyBindings[ j ];
}
// push in the same order as the tracks.
action.propertyBindings.push( propertyBinding );
......@@ -63,13 +57,6 @@ THREE.AnimationMixer.prototype = {
},
getPropertyBindingIndex: function( rootNode, trackName ) {
var index = this.propertyBindingNamesToIndex[ rootNode.uuid + '-' + trackName ];
return ( index !== undefined ) ? index : -1;
},
removeAllActions: function() {
for( var i = 0; i < this.actions.length; i ++ ) {
......@@ -79,15 +66,14 @@ THREE.AnimationMixer.prototype = {
}
// unbind all property bindings
for( var i = 0; i < this.propertyBindings.length; i ++ ) {
for( var properyBindingKey in this.propertyBindingMap ) {
this.propertyBindings[i].unbind();
this.propertyBindingMap[ properyBindingKey ].unbind();
}
this.actions = [];
this.propertyBindings = [];
this.propertyBindingNamesToIndex = {};
this.propertyBindingMap = {};
return this;
......@@ -112,16 +98,17 @@ THREE.AnimationMixer.prototype = {
for( var i = 0; i < tracks.length; i ++ ) {
var track = tracks[ i ];
var propertyBindingIndex = this.getPropertyBindingIndex( root, track.name );
var propertyBinding = this.propertyBindings[ propertyBindingIndex ];
var propertyBindingKey = root.uuid + '-' + track.name;
var propertyBinding = this.propertyBindingMap[ propertyBindingKey ];
propertyBinding.referenceCount -= 1;
if( propertyBinding.referenceCount <= 0 ) {
propertyBinding.unbind();
this.propertyBindings.splice( this.propertyBindings.indexOf( propertyBinding ), 1 );
delete this.propertyBindingMap[ propertyBindingKey ];
}
}
......@@ -239,9 +226,9 @@ THREE.AnimationMixer.prototype = {
}
// apply to nodes
for ( var i = 0; i < this.propertyBindings.length; i ++ ) {
for( var propertyBindingKey in this.propertyBindingMap ) {
this.propertyBindings[ i ].apply();
this.propertyBindingMap[ propertyBindingKey ].apply();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册