| 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++; |
| } |
| } |