/**
* @constructor
*/
-FlappSWFMatrix = function(ibit) {
- ;
+FlappSWFMatrix = function() {
+ ; // no data property, only Float32Array procedure
};
FlappSWFMatrix.identity = function() {
- return { scaleX:1, scaleY:1, skew0:0, skew1:0, transX:0, transY:0 };
+ var m = new Float32Array(6)
+ m[0] = m[3] = 1;
+ m[1] = m[2] = 0;
+ m[4] = m[5] = 0;
+ return m;
};
-FlappSWFMatrix.multiplyScalar = function(m, a) {
- return { scaleX:m.scaleX*a, scaleY:m.scaleY*a,
- skew0:m.skew0*a, skew1:m.skew1*a,
- transX:m.transX*a, transY:m.transY*a };
+FlappSWFMatrix.multiplyScalar = function(m1, a) {
+ var m = new Float32Array(6)
+ m[0] = a* m1[0];
+ m[1] = a* m1[1];
+ m[2] = a* m1[2];
+ m[3] = a* m1[3];
+ m[4] = a* m1[4];
+ m[5] = a* m1[5];
+ return m;
+};
+
+
+FlappSWFMatrix.multiply = function(m1, m2) {
+ var m = new Float32Array(6);
+ /*
+ * / a1 c1 e1 \ / a2 c2 e2 \ / a1*a2+b1*c2 a1*b2+b1*d2 a1*e2+b1*f2+e1 \
+ * \ b1 d1 f1 / * \ b1 d2 f2 / = \ c1*a2+d1*c2 c1*b2+d1*d2 c1*e2+d1*f2+f1 /
+ */
+ m[0] = m1[0]*m2[0] + m1[1]*m2[2]; // a1*a2 + b1*c2;
+ m[1] = m1[2]*m2[0] + m1[3]*m2[2]; // c1*a2 + d1*c2;
+ m[2] = m1[0]*m2[1] + m1[1]*m2[3]; // a1*b2 + b1*d2
+ m[3] = m1[2]*m2[1] + m1[3]*m2[3]; // c1*b2 + d1*d2
+ m[4] = m1[0]*m2[4] + m1[1]*m2[5] + m1[4]; // a1*e2 + b1*f2 + e1
+ m[5] = m1[2]*m2[4] + m1[3]*m2[5] + m1[5]; // c1*e2 + d1*f2 + f1
+ return m;
};
FlappSWFMatrix.load = function(ibit) {
ibit.a();
+ var m = new Float32Array(6);
if (ibit.b()) { // HasScale
var nScaleBits = ibit.ub(5);
- var scaleX = ibit.sb(nScaleBits) / 0x10000;
- var scaleY = ibit.sb(nScaleBits) / 0x10000;
+ m[0] = ibit.sb(nScaleBits) / 0x10000; // ScaleX
+ m[3] = ibit.sb(nScaleBits) / 0x10000; // ScaleY
} else {
- var scaleX = 1;
- var scaleY = 1;
+ m[0] = m[3] = 1; // scaleX, scaleY
}
if (ibit.b()) { // HasSkew
var nSkewBits = ibit.ub(5);
- var skew0 = ibit.sb(nSkewBits) / 0x10000;
- var skew1 = ibit.sb(nSkewBits) / 0x10000;
+ m[1] = ibit.sb(nSkewBits) / 0x10000; // RotateSkew0
+ m[2] = ibit.sb(nSkewBits) / 0x10000; // RotateSkew1
} else {
- var skew0 = 0;
- var skew1 = 0;
+ m[1] = m[2] = 0; // RotateSkew0, RotateSkew1
}
var nTransBits = ibit.ub(5);
- var transX = ibit.sb(nTransBits);
- var transY = ibit.sb(nTransBits);
-
- return { scaleX:scaleX, scaleY:scaleY, skew0:skew0, skew1:skew1,
- transX:transX, transY:transY
- };
+ m[4] = ibit.sb(nTransBits); // TranslateX
+ m[5] = ibit.sb(nTransBits); // TranslateY
+ return m;
};
});