]> git.mjollnir.org Git - moodle.git/blob
a27c75674407d57d9d1fb78908df9d0fe45b8c56
[moodle.git] /
1 package flare.animate.interpolate
2 {
3         import flash.geom.Matrix;
4         
5         /**
6          * Interpolator for <code>flash.geom.Matrix</code> values.
7          */
8         public class MatrixInterpolator extends Interpolator
9         {
10                 private var _startA:Number, _startB:Number, _startC:Number;
11                 private var _startD:Number, _startX:Number, _startY:Number;
12                 private var _rangeA:Number, _rangeB:Number, _rangeC:Number;
13                 private var _rangeD:Number, _rangeX:Number, _rangeY:Number;
14                 private var _cur:Matrix;
15                 
16                 /**
17                  * Creates a new MatrixInterpolator.
18                  * @param target the object whose property is being interpolated
19                  * @param property the property to interpolate
20                  * @param start the starting matrix value to interpolate from
21                  * @param end the target matrix value to interpolate to
22                  */
23                 public function MatrixInterpolator(target:Object, property:String,
24                                                    start:Object, end:Object)
25                 {
26                         super(target, property, start, end);
27                 }
28                 
29                 /**
30                  * Initializes this interpolator.
31                  * @param start the starting value of the interpolation
32                  * @param end the target value of the interpolation
33                  */
34                 protected override function init(start:Object, end:Object) : void
35                 {
36                         var e:Matrix = Matrix(end), s:Matrix = Matrix(start);
37                         if (_cur == null || _cur == s || _cur == e)
38                                 _cur = e.clone();
39                         
40                         _startA = s.a;
41                         _startB = s.b;
42                         _startC = s.c;
43                         _startD = s.d;
44                         _startX = s.tx;
45                         _startY = s.ty;
46                         _rangeA = e.a  - _startA;
47                         _rangeB = e.b  - _startB;
48                         _rangeC = e.c  - _startC;
49                         _rangeD = e.d  - _startD;
50                         _rangeX = e.tx - _startX;
51                         _rangeY = e.ty - _startY;
52                 }
53                 
54                 /**
55                  * Calculate and set an interpolated property value.
56                  * @param f the interpolation fraction (typically between 0 and 1)
57                  */
58                 public override function interpolate(f:Number) : void
59                 {
60                         _cur.a  = _startA + f * _rangeA;
61                         _cur.b  = _startB + f * _rangeB;
62                         _cur.c  = _startC + f * _rangeC;
63                         _cur.d  = _startD + f * _rangeD;
64                         _cur.tx = _startX + f * _rangeX;
65                         _cur.ty = _startY + f * _rangeY;
66                         _prop.setValue(_target, _cur);
67                 }
68                 
69         } // end of class MatrixInterpolator
70 }