flash on 2015-7-30

by mutantleg
♥0 | Line 113 | Modified 2015-07-30 06:56:15 | 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/iAvL
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            vecRect = new Vector.<xActor>(0, false);
              var a:xActor; var i:int;
              for (i = 0; i < 16; i += 1)
              {
                a = new xActor();
                var t:Number;
                t = i * 0.4;
                a.cx = i*24;   a.cy = 100;
                a.cx = Math.random()*465;
                a.cy = Math.random()*465;
                

                    a.cx=240;a.cy=240;
                
                a.col = Math.random() * 0xffFFff;                
                
                a.xrad = 8 + i ;                a.xrad = 16;
                vecRect.push(a);
                
              }//nexti

            mw=16; mh=16;
            gridAct = new Vector.<xActor>(mw*mh, false);

            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var vecRect:Vector.<xActor>;
          

        public function isInside(ax:Number, ay:Number, a:xActor):Boolean
        { 
          if (ax < a.cx - (a.xrad)) { return false; }        if (ax > a.cx + (a.xrad)) { return false; }
          if (ay < a.cy - (a.xrad)) { return false; }        if (ay > a.cy + (a.xrad)) { return false; }
          return true;    
        }//isinside
          
          
        public var mw:int = 0;         public var mh:int = 0;
        public var cw:Number = 32;     public var ch:Number = 32;
        public var gridAct:Vector.<xActor>; 
        public function getAct(ax:int, ay:int):xActor
        { if (ax<0||ax>=mw||ay<0||ay>=mh){return null;}  return gridAct[ay*mw+ax];  }

        public function setAct(ax:int, ay:int, a:xActor):void
        { if (ax < 0 || ax >= mw || ay < 0 || ay >= mh) { return; } gridAct[ay * mw + ax] = a ;  } 
        

  
        public function getMag(ax:Number, ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }

        public var gt:int = 0;
        
        public function onEnter(e:Event):void
        {
            var mx:Number; var my:Number;
            mx = stage.mouseX;
            my = stage.mouseY;
            
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            
              var ang:Number;
              var vx:Number; var vy:Number;
              var a:xActor; var b:xActor;
              var num:int; var i:int; var k:int;
              var tx:int; var ty:int;
              var ax:Number; var ay:Number;
              var ms:Number;
              ms = 4;
              
              
              num = vecRect.length;
              for (i = 0; i < num; i += 1)
              {
                a = vecRect[i];
               
                 tx = a.tx; ty = a.ty;
                 if (getAct(tx,ty) == a) { setAct(tx,ty, null); }  
               
               if ((gt+i)%20 ==0 )
               {
                 a.ang = Math.atan2(my-a.cy, mx-a.cx);                
               }
               
                ang = a.ang;
                vx = Math.cos(ang) * ms;
                vy = Math.sin(ang) * ms;
            
            /*
                for (k = 0; k < num; k += 1)
                {
                  if (i == k) { continue; }
                  b = vecRect[k];
              
                  if (vx > 0 && isInside(a.cx+a.xrad, a.cy, b)) { vx = 0; }
                  else if (vx < 0 && isInside(a.cx-a.xrad, a.cy, b)) { vx = 0; }
                  if (vy > 0 && isInside(a.cx, a.cy+a.xrad, b)) { vy = 0; }
                  else if (vy < 0 && isInside(a.cx, a.cy-a.xrad, b)) { vy = 0; }
                }//nextk        
             */  
                ax = a.cx+vx;    ay = a.cy+vy;
                tx = Math.floor(ax/cw); ty = Math.floor(ay/ch);
               
                if (getAct(tx,ty) == null)
                {  a.cx = ax; a.cy = ay; 
                   a.tx = tx; a.ty = ty;
                } 
                else  if (getAct(tx, a.ty) == null)   { a.cx = ax; a.tx = tx; vy =-vy; }
                else  if (getAct(a.tx, ty) == null)   { a.cy = ay; a.ty = ty; vx =-vx;}
                
                a.ang = Math.atan2(vy,vx);
                
                setAct(a.tx, a.ty, a);
   
                graphics.drawRect(a.tx *cw, a.ty *ch, cw,ch);
                //graphics.drawRect(a.cx - a.xrad, a.cy - a.xrad, a.xrad * 2, a.xrad * 2);
                graphics.drawCircle(a.cx, a.cy, a.xrad);
              }//nexti


            var yt:int; 
          for (i=0;i<mh;i++)
          {
           yt = i * mw;
           for (k=0;k<mw;k++)
           {
             a = gridAct[k+yt];
             if (a != null)
             {
               graphics.beginFill(a.col, 0.5);
                 graphics.drawRect(k*cw,i*ch,cw,ch);               
                graphics.endFill();  
                continue;
             }//endif
             
             //graphics.drawRect(k*cw,i*ch,cw,ch);
              
           }//nextk
          }//nexti  

            
            graphics.drawCircle(mx,my, 8);

            gt += 1;            
            
        }//onenter
        
    }//classend
}



internal class xActor
{
  public var cx:Number = 0;
  public var cy:Number = 0;
  public var xrad:Number = 16;
  public var ang:Number = 0;

  public var tx:int = 0;
  public var ty:int = 0;
  
  public var col:uint =0;
  
}//xActor