diff options
Diffstat (limited to 'bPod/com/oop/ScrollingMenuFrame.as')
| -rw-r--r-- | bPod/com/oop/ScrollingMenuFrame.as | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/bPod/com/oop/ScrollingMenuFrame.as b/bPod/com/oop/ScrollingMenuFrame.as new file mode 100644 index 0000000..5c91751 --- /dev/null +++ b/bPod/com/oop/ScrollingMenuFrame.as @@ -0,0 +1,148 @@ +
+class com.oop.ScrollingMenuFrame extends MovieClip
+{
+ private var hotSpot_mc:MovieClip; // used to detect mouse events
+ private var holder_mc:MovieClip; // holder for the flat-list SelectionSystem
+ private var hotSpotMask:MovieClip; // bluh .. also used i guess
+
+ private var initY:Number;
+ private var initX:Number;
+
+ private var initHolderX:Number;
+ private var initHolderY:Number;
+
+ var intRate:Number = 10; // scroller speed
+
+
+ public function ScrollingMenuFrame() {
+ doInit();
+ }
+
+
+/* public function doLoad(_dataArray:Array):Void {
+ holder_mc.attachMovie("KeywordSelectionSystem", "keywordTiles", 1000);
+ holder_mc["keywordTiles"].doInit(_dataArray, "KeywordButton");
+ }
+*/
+ public function enableMenu():Void {
+ initMenuScroll();
+ initMouseWatch();
+ setHotSpot(true);
+ }
+
+
+ public function disableMenu():Void {
+ killMouseWatch();
+ killMenuScroll();
+ setHotSpot(false);
+ }
+
+
+ private function doInit():Void {
+
+ initY = _x;
+ initX = _y;
+
+ initHolderX = holder_mc._x;
+ initHolderY = holder_mc._y;
+
+ initMenuScroll();
+
+ holder_mc.onMouseDown = function() {
+ if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
+// _parent.disableMenu();
+ }
+ }
+ }
+
+
+ private function setHotSpot(_isMenuEnabled:Boolean):Void {
+ if (_isMenuEnabled) {
+ hotSpot_mc.onRollOver = undefined;
+ } else {
+ hotSpot_mc.onRollOver = function() {
+ this._parent.enableMenu();
+ }
+ }
+ }
+
+
+
+ private function initMouseWatch():Void {
+ this.onMouseMove = function() {
+ if (!this.hitTest(_root._xmouse, _root._ymouse, true)) {
+ disableMenu();
+ }
+ }
+ }
+
+
+ private function killMouseWatch():Void {
+ this.onMouseMove = undefined;
+ }
+
+
+ private function initMenuScroll():Void {
+ this.onEnterFrame = function() {
+ if ((holder_mc._height >= hotSpotMask._height) || (holder_mc._width >= hotSpotMask._width)) {
+ doMenuScroll();
+ }
+ }
+ }
+
+
+ private function killMenuScroll():Void {
+ this.onEnterFrame = undefined;
+ }
+
+
+ private function doMenuScroll():Void {
+ var intTop:Number = initHolderY;
+ var intLeft:Number = initHolderX;
+ var intBottom:Number = intTop + hotSpotMask._height;
+ var intRight:Number = intLeft + hotSpotMask._width;
+
+
+ var intZero:Number = (intBottom + intTop) / 2;
+ var intZeroW:Number = (intRight + intLeft) / 2;
+
+ var intMousePos:Number = _ymouse - intZero;
+ var intMousePosW:Number = _xmouse - intZeroW;
+
+ var intMaxUp:Number = intTop - intZero;
+ var intMaxLeft:Number = intLeft - intZeroW;
+ var intMaxDown:Number = intBottom - intZero;
+ var intMaxRight:Number = intRight - intZeroW;
+
+ var _isHit:Boolean = this.hitTest(_root._xmouse, _root._ymouse, true);
+
+ if (_isHit) {
+
+ if (holder_mc._height > hotSpotMask._height ) {
+
+ // top & bottom bounds check
+
+ if (intMousePos > 0) { // below intZero? scroll up
+ holder_mc._y = Math.max(holder_mc._y - intRate * Math.pow((intMousePos/intMaxDown),2), intBottom - holder_mc._height) ;
+ }
+ else if (intMousePos < 0) { // above intZero? scroll down
+ holder_mc._y = Math.min(holder_mc._y + intRate * Math.pow((intMousePos/intMaxUp),2), intTop );
+ }
+
+
+ // left & right bounds check
+
+/* if (intMousePosW > 0) { // right of intZero? scroll left
+ holder_mc._x = Math.max(holder_mc._x - intRate * Math.pow((intMousePosW/intMaxRight),2), intRight - holder_mc._width);
+ }
+ else if (intMousePosW < 0) { // left of intZero? scroll right
+ holder_mc._x = Math.min(holder_mc._x + intRate * Math.pow((intMousePosW/intMaxLeft),2), intLeft);
+ }
+*/
+
+ }
+
+ }
+
+ }
+}
|
