1
8
9 import com.sekati.core.CoreObject;
10 import com.sekati.display.StageDisplay;
11 import com.sekati.events.Dispatcher;
12 import com.sekati.events.FramePulse;
13 import com.sekati.except.FatalArgumentException;
14 import com.sekati.utils.Delegate;
15
16
19 class com.sekati.transitions.MousePan extends CoreObject {
20
21 private var _this:MousePan;
22 private var _target:MovieClip;
23 private var _mListener:Object;
24 private var _destX:Number;
25 private var SPEED:Number;
26
27
33 public function MousePan(target:MovieClip, speed:Number) {
34 super( );
35 if (!target) {
36 throw new FatalArgumentException( _this, "Constructor requires 'target' argument", arguments );
37 }
38 SPEED = (!speed) ? 4 : speed;
39 _target = target;
40 _this = this;
41 _mListener = new Object();
42 FramePulse.$.addFrameListener( _this );
43 _mListener.onMouseMove = Delegate.create(_this, _onMouseMove);
44 Mouse.addListener( _mListener );
45
46 Dispatcher.$.addEventListener(StageDisplay.onStageResizeEVENT, Delegate.create (_this, _onResize));
47 Dispatcher.$.addEventListener(StageDisplay.onStageResizeCompleteEVENT, Delegate.create (_this, _onResizeComplete));
48 Dispatcher.$.addEventListener(StageDisplay.onStageFullScreenEVENT, Delegate.create (_this, _onResize));
49
50 }
51
52
56 private function _onEnterFrame():Void {
57 if (_destX < -_target._width || _destX > _target._width || _target._x == _destX || _destX < -_target._width || _destX > _target._width) {
58 return;
59 } else if (_target._x > _destX) {
60 _target._x -= Math.ceil((_target._x-_destX)*(SPEED/100));
61 } else if (_target._x< _destX) {
62 _target._x += Math.ceil((_destX-_target._x)*(SPEED/100));
63 }
64 }
65
66 private function _onMouseMove():Void {
67 constrainMove(0);
68 }
69
70 private function constrainMove(dir:Number):Void {
71 if (_xmouse < 0 || _xmouse > Stage.width || isNaN(_xmouse)) {
72 return;
73 }
74 var mousePercent:Number = _xmouse/Stage.width;
75 var mSpeed:Number = (dir == 1) ? 1-mousePercent : mousePercent;
76 _destX = Math.round(-((_target._width-Stage.width)*mSpeed));
77
78 }
79
80 private function _onResize():Void {
81 FramePulse.$.removeFrameListener(_this);
82 }
83
84 private function _onResizeComplete():Void {
85 _destX = _target._x;
86 FramePulse.$.addFrameListener(_this);
87 }
88
89 public function destroy():Void {
90 FramePulse.$.removeFrameListener( _this );
91 Mouse.removeListener( _mListener );
92 Dispatcher.$.removeEventListener(StageDisplay.onStageResizeEVENT, _this);
93 Dispatcher.$.removeEventListener(StageDisplay.onStageResizeCompleteEVENT, _this);
94 Dispatcher.$.removeEventListener(StageDisplay.onStageFullScreenEVENT, _this);
95 super.destroy();
96 }
97 }
98