flash on 2015-2-1

by mutantleg
♥0 | Line 105 | Modified 2015-02-01 07:14:24 | 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/eDKm
 */

package {
    import flash.events.MouseEvent;
    import flash.display.StageQuality;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

            stage.quality = StageQuality.LOW;

            myUnit = new xUnit();
            myUnit.cx = 230; myUnit.cy = 230;            
            
            
             stage.addEventListener(MouseEvent.MOUSE_DOWN, onMdown);
             stage.addEventListener(MouseEvent.MOUSE_UP, onMup);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);            
        }//ctor
        
        public var mdown:int = 0;
        public function onMdown(e:MouseEvent):void { mdown = 1; }
        public function onMup(e:MouseEvent):void { mdown = 0; }

        public var mx:Number = 0;
        public var my:Number = 0;
        public var wmx:Number = 0;
        public var wmy:Number = 0;
        
        public var myUnit:xUnit;
        public var curSel:xUnit;

        public var gt:int = 0;
        
        public function isOver(id:int, ax:Number,ay:Number,aw:Number,ah:Number):Boolean
        {
          var over:Boolean;
          over = (mx < ax || my < ay || mx > ax + aw || my > ay + ah) == false;
          return over;
        }//isover
        
        public function onEnter(e:Event):void
        {
            var a:xUnit;            
            mx = stage.mouseX;    my = stage.mouseY;
            wmx = mx; wmy = my;
  
            a = myUnit;
  
            if (a.state > 0)
            {
              a.ang = Math.atan2(a.gy-a.cy,a.gx-a.cx);
              var vx:Number; var vy:Number;
              vx = Math.cos(a.ang); vy = Math.sin(a.ang);
              a.cx += vx; a.cy += vy;  
              if (getMag2(a.cx-a.gx, a.cy-a.gy) < 32) { a.state = 0; }                
            }//endif
           
            
            graphics.clear();
  
            a = myUnit;
           
            graphics.lineStyle(2,0);
            graphics.beginFill(1, 0.5);
             graphics.drawCircle(a.cx, a.cy, a.rad);
            graphics.endFill();
            graphics.moveTo(a.cx,a.cy);
            graphics.lineTo(a.cx+Math.cos(a.ang)*8,a.cy+Math.sin(a.ang)*8);
            
            var over:xUnit;

            if (isOver(10, a.cx-a.rad,a.cy-a.rad,a.rad*2,a.rad*2)) { over = a; }

             a = over; if (a != null) {
               graphics.drawRect(a.cx-a.rad,a.cy-a.rad,a.rad*2,a.rad*2); 
               graphics.drawCircle(a.cx,a.cy,a.range);
               }    
            
            if (a != null && mdown > 0) { curSel = a; }           

            a = curSel; if (a != null) {
               graphics.drawRect(a.cx-a.rad,a.cy-a.rad,a.rad*2,a.rad*2); }    
                       
            if (over == null && curSel != null && mdown > 0)
            {
              a = curSel; curSel = null;
              a.gx = wmx; a.gy = wmy; a.state = 1;   
            }

            a = myUnit;
            if (a.state > 0)
            {
              graphics.moveTo(a.cx,a.cy);
              graphics.lineTo(a.gx,a.gy);  
                
              var i:int;  
              var ax:Number; var ay:Number;  
              var u:Number; var t:Number; var w:Number;
              var num:int;
             // t = (gt % 128) / 128;
              num = (getMag2(a.cx-a.gx,a.cy-a.gy) / 2048);
              t =  2048 / (getMag2(a.cx-a.gx,a.cy-a.gy))
              //for (u = 0; u < 1; u+=0.1)
              w = 0;
              for (i = 0; i < num; i++)
              {
                 w+= t;
                //w = u + t; if (w > 1) { w -=1;}
                ax = a.cx +(a.gx-a.cx)*w;
                ay = a.cy +(a.gy - a.cy)*w;
                graphics.drawCircle(ax,ay, 4);
              }//nextu  
            }//endif            
                       
            
            graphics.drawRect(mx-8,my,16,1);
            graphics.drawRect(mx,my-8,1,16);

            gt += 1;            
        }//onenter
        
        public function getMag2(ax:Number,ay:Number):Number
        { return ax*ax+ ay*ay;}
        
    }//classend
}

internal class xUnit
{
 public var cx:Number = 0;
 public var cy:Number = 0;
 public var rad:Number = 16;
 public var ang:Number = 0;
 public var range:Number = 128;
 
 public var gx:Number = 0;
 public var gy:Number = 0;
 public var state:int = 0;    
    
}//xunit