flash on 2016-7-5

by mutantleg
♥0 | Line 117 | Modified 2016-07-05 08:07:14 | 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/oTft
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
          vecRect = new Vector.<xRect>(0,false);
          vecRect2 = new Vector.<xRect>(0,false);
          
          var a:xRect;
          var i:int;
          for (i=0;i<32;i+=1)
          {
            a = new xRect();
             a.cx = Math.random()*405;  
             a.cy = Math.random()*405;
             a.cw = Math.random()*64+8;
             a.ch = Math.random()*64+8;
           vecRect.push(a);   
          }//nexti
          
          a = vecRect[0];
          rx=a.cx;
          ry=a.cy;
          rw=a.cw;
          rh=a.ch;
            
          stage.addEventListener(Event.ENTER_FRAME, onEnter);  
        }//ctor
        
        public var vecRect:Vector.<xRect>;
        public var vecRect2:Vector.<xRect>;
        public var rx:Number  =0;
        public var ry:Number  =0;
        public var rw:Number  =0;
        public var rh:Number  =0;
        public var gt:int = 0;
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2,0);

            var i:int; var num:int; var a:xRect;
            num = vecRect.length;
            for (i=0;i<num;i+=1)
            {
             a = vecRect[i];
             graphics.drawRect(a.cx,a.cy,a.cw,a.ch);   
            }//nexti
  
            graphics.lineStyle(2,0xFF);
             num=vecRect2.length;
            for (i=0;i<num;i+=1)
            {
              a = vecRect2[i];
              graphics.drawRect(a.cx,a.cy,a.cw,a.ch);  
              graphics.moveTo(a.cx,a.cy);
              graphics.lineTo(a.cx+a.cw,a.cy+a.ch); 
            }//nexti
  
            
            graphics.lineStyle(2, 0xFF0000);
            graphics.drawRect(rx,ry,rw,rh);
  
              gt+=1;
              
              if (gt%8 != 0) { return; }
            
            a = getClose(rx,ry,rw,rh);
            if (a == null){return;}
       
             var ix:Number; var iy:Number;
             var kx:Number; var ky:Number;
             ix = Math.max(rx+rw, a.cx+a.cw);
             iy = Math.max(ry+rh, a.cy+a.ch);
             kx = Math.min(a.cx, rx);
             ky = Math.min(a.cy, ry);   
             
             rx= kx;
             ry =ky;
             rw = ix-kx;
             rh = iy-ky;
                  
            
            i = vecRect.indexOf(a);
            if (i<0){return;}
            num = vecRect.length - 1;
            for (i;i<num;i+=1)
            { vecRect[i] = vecRect[i+1]; }
            vecRect.pop();
            vecRect2.push(a);
            
        }//onenter
        
        public function getClose(ax:Number,ay:Number,aw:Number,ah:Number):xRect
        {
          var dx:Number; var dy:Number;    var d:Number; 
          var i:int; var num:int; var a:xRect;
          var ret:xRect; var rd:Number;
            ret = vecRect[0]; rd =9999;
            num = vecRect.length;

          for (i=0;i<num;i+=1)
          {
            a = vecRect[i];
            if (ax+aw < a.cx){continue;} 
            if (ay+ah < a.cy){continue;} 
            if (a.cx+a.cw < ax){continue;} 
            if (a.cy+a.ch < ay){continue;}
            
            
            return a; 
          }//nexti

            
          for (i=0;i<num;i+=1)
          {
            a = vecRect[i];
            
        
            dx = 0; dy =0; 
         
             if (ay > (a.cy+a.ch)) { dy = ay-(a.cy+a.ch);  }
             if (ay+ah < (a.cy)) { dy = a.cy-(ay+ah);  }
             if (ax > (a.cx+a.cw)) { dx = ax-(a.cx+a.cw);  }
             if (ax+aw < (a.cx)) { dx = a.cx-(ax+aw);  } 
             
            if (dx > 0 && dy > 0) { d = Math.sqrt(dx*dx+dy*dy); }
            else { d = dx+dy; } 
            if (d>=rd){continue;}
            rd=d;
            ret=a;
             
          }//nexti     
          return ret;       
        }//getclose
        
        
        
    }//classend
}

internal class xRect
{
  public var cx:Number = 0;  
  public var cy:Number = 0;  
  public var cw:Number = 0;  
  public var ch:Number = 0;  
    
}//xrect