| function ShapeTransformManager() { |
| this.sequences = {}; |
| this.sequenceList = []; |
| this.transform_key_count = 0; |
| } |
| |
| ShapeTransformManager.prototype = { |
| addTransformSequence: function(transforms) { |
| var i, len = transforms.length; |
| var key = '_'; |
| for(i = 0; i < len; i += 1) { |
| key += transforms[i].transform.key + '_'; |
| } |
| var sequence = this.sequences[key]; |
| if(!sequence) { |
| sequence = { |
| transforms: [].concat(transforms), |
| finalTransform: new Matrix(), |
| _mdf: false |
| }; |
| this.sequences[key] = sequence; |
| this.sequenceList.push(sequence); |
| } |
| return sequence; |
| }, |
| processSequence: function(sequence, isFirstFrame) { |
| var i = 0, len = sequence.transforms.length, _mdf = isFirstFrame; |
| while (i < len && !isFirstFrame) { |
| if (sequence.transforms[i].transform.mProps._mdf) { |
| _mdf = true; |
| break; |
| } |
| i += 1 |
| } |
| if (_mdf) { |
| var props; |
| sequence.finalTransform.reset(); |
| for (i = len - 1; i >= 0; i -= 1) { |
| props = sequence.transforms[i].transform.mProps.v.props; |
| sequence.finalTransform.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]); |
| } |
| } |
| sequence._mdf = _mdf; |
| |
| }, |
| processSequences: function(isFirstFrame) { |
| var i, len = this.sequenceList.length; |
| for (i = 0; i < len; i += 1) { |
| this.processSequence(this.sequenceList[i], isFirstFrame); |
| } |
| |
| }, |
| getNewKey: function() { |
| return '_' + this.transform_key_count++; |
| } |
| } |