flash on 2015-9-30

by mutantleg
♥0 | Line 88 | Modified 2015-09-30 02:20:43 | MIT License
play

ActionScript3 source code

/**
 * Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/8v7R
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            myNode = new xNode();
            myNode.genRect(64,64, 128, 128);
            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var myNode:xNode;
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);

                myNode.checkDist(graphics, stage.mouseX, stage.mouseY, 128);
            
        }//onenter
        
    }//classend
}

import flash.display.Graphics;

internal class xRect
{
  public var cx:Number = 0; public var cy:Number = 0;
  public var cw:Number = 0; public var ch:Number = 0;
  
  public function getMagRect(ax:Number, ay:Number):Number
  {
     var ix:Number; var iy:Number;
     if (ax < cx) { ix = cx;}  else if (ax > cx+cw) { ix = cx+cw; } else { ix = ax; } 
     if (ay < cy) { iy = cy;}  else if (ay > cy+ch) { iy = cy+ch; } else { iy = ay; }           
     return getMag(ix-ax, iy-ay);         
  }//getmagrect
    
  public function getMag(ax:Number, ay:Number):Number
  { return Math.sqrt(ax * ax + ay * ay); }
    
}//xrect


internal class xNode
{
  public var top:xRect;// = new xRect();
  public var vecMid:Vector.<xRect>; //= new Vector.<xRect>(4, false);
  public var vecLow:Vector.<xRect>;// = new Vector.<xRect>(16, false);
  
  public function genRect(ax:Number, ay:Number, aw:Number, ah:Number):void
  {
    var a:xRect; var i:int; var k:int;
    vecMid = new Vector.<xRect>(4, false);
    vecLow = new Vector.<xRect>(16, false);
    top = new xRect();  top.cx = ax; top.cy = ay; top.cw = aw; top.ch = ah;
    aw *=0.5; ah *=0.5
    for(i=0;i<2;i+=1)
    { for (k=0;k<2;k+=1)
      { a = new xRect(); vecMid[(i*2)+k] = a;
        a.cw = aw; a.ch = ah; a.cx = ax+k*aw; a.cy = ay+i*ah;   
      }//nextk    
    }//nexti
    aw*=0.5; ah*=0.5;
    for(i=0;i<4;i+=1)
    { for (k=0;k<4;k+=1)
      { a = new xRect(); vecLow[(i*4)+k] = a;
        a.cw = aw; a.ch = ah; a.cx = ax+k*aw; a.cy = ay+i*ah;   
      }//nextk    
    }//nexti
  }//genrect

  public function checkDist(g:Graphics, ax:Number, ay:Number, rad:Number):void
  {
    var a:xRect;  var i:int; var k:int; 
    var b:xRect;
    a = top;
      if (a.getMagRect(ax, ay) > rad) 
      { 
        g.drawRect(top.cx, top.cy, top.cw, top.ch);
       return; 
     }//endif
    for (i = 0; i < 4; i += 1)
    {
      a = vecMid[i];
      if (a.getMagRect(ax, ay) > rad) 
      { 
        g.drawRect(a.cx, a.cy, a.cw, a.ch);      
        continue; 
      }//endif
      k = 0;
      if (i == 1) { k = 2; }
      if (i == 2) { k = 8; }
      if (i == 3) { k = 10; }
      
      //k = i * 4;
      b = vecLow[k]; g.drawRect(b.cx, b.cy, b.cw,b.ch); 
      b = vecLow[k+1]; g.drawRect(b.cx, b.cy, b.cw,b.ch); 
      b = vecLow[k+4]; g.drawRect(b.cx, b.cy, b.cw,b.ch); 
      b = vecLow[k+1+4]; g.drawRect(b.cx, b.cy, b.cw,b.ch); 
      
    }//nexti
        
  }//checkdist
  
}//xrect