blob: 7625071d23cda995098a55e64dbf02b573bb30cd [file] [log] [blame]
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++;
},
};