flash on 2016-9-3

by mutantleg
♥0 | Line 100 | Modified 2016-09-03 12:49:19 | 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/uuFF
 */

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


            deb = new TextField();
            deb.width=320; deb.height=240;
            deb.mouseEnabled=false;
            addChild(deb);

            vecVert = new Vector.<xVert>(0, false);            
            
            vecVert.push(new xVert(130, 130));
            vecVert.push(new xVert(230, 130));
            vecVert.push(new xVert(130, 230));
            vecVert.push(new xVert(230, 230));
            vecVert.push(new xVert(330, 230));
            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var vecVert:Vector.<xVert>;


        public var deb:TextField;        
        
        public function onEnter(e:Event):void
        {
          graphics.clear();
          graphics.lineStyle(2, 0);

/*
          goPos(vecVert[0], vecVert[1].cx, vecVert[1].cy);
          goPos(vecVert[1], vecVert[0].cx, vecVert[0].cy);
          goPos(vecVert[2], vecVert[3].cx, vecVert[3].cy);
          goPos(vecVert[3], vecVert[2].cx, vecVert[2].cy);
          goPos(vecVert[0], vecVert[2].cx, vecVert[2].cy);
          goPos(vecVert[2], vecVert[0].cx, vecVert[0].cy);
          goPos(vecVert[1], vecVert[3].cx, vecVert[3].cy);
          goPos(vecVert[3], vecVert[1].cx, vecVert[1].cy);
*/
            
           // vecVert[0].vy+=1;
          
          var i:int; var num:int; var a:xVert;
          num = vecVert.length;
          for (i=0;i<num;i+=1)
          {
            a = vecVert[i];
            a.vy+=0.2;
            
            a.vx*=0.99; a.vy*=0.99;
            a.cx+=a.vx; a.cy+=a.vy;
            
            graphics.drawCircle(a.cx,a.cy,4);
          }//nexti  
  
          graphics.lineStyle(2, 0xFF);
          spring(vecVert[0], vecVert[3], 46, 0.15);
          spring(vecVert[1], vecVert[2], 46, 0.15);
          spring(vecVert[0], vecVert[1], 32, 0.5);
          spring(vecVert[0], vecVert[2], 32, 0.5);
          spring(vecVert[1], vecVert[3], 32, 0.5);
          spring(vecVert[2], vecVert[3], 32, 0.5);

          
            graphics.lineStyle(2, 0xFF0000);
        //  goPos(vecVert[0], vecVert[1].cx, vecVert[1].cy);
         // goPos(vecVert[1], vecVert[0].cx, vecVert[0].cy);

          goPos(vecVert[0], 130, 130);
          
          if ((gt&128) > 0) { goPos(vecVert[1], 230, 130, 0, 0.1); }
         
         var t:Number;
         t = 64;
         t += Math.cos(gt*0.05)*32;
         
         /*
          goPos(vecVert[1], vecVert[2].cx, vecVert[2].cy,46,0.05);
          goPos(vecVert[2], vecVert[1].cx, vecVert[1].cy,46,0.05);
          goPos(vecVert[0], vecVert[3].cx, vecVert[3].cy,46,0.05);
          goPos(vecVert[3], vecVert[0].cx, vecVert[0].cy,46,0.05);
         */
         
         /*
         var b:xVert;
         a= vecVert[1]; b=vecVert[2];
         deb.text = " 1-2: " + getMag(a.cx-b.cx,a.cy-b.cy); 
         a= vecVert[0]; b=vecVert[3];         
         deb.appendText("\n0-3: " + getMag(a.cx-b.cx,a.cy-b.cy));         
         // goPos(vecVert[3], 230, 330, t);
         // goPos(vecVert[1], 230, 230, t);
         
         if (gt > 30)
         {
           goPos(vecVert[3], 130,30);   
         }
         */
         
            gt+=1;
        }//onenter
        
        public var gt:int =0;

        public function getMag(ax:Number,ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }
        
        public function goPos(a:xVert, ax:Number, ay:Number, r:Number=32,t:Number=0.1):void
        {
           graphics.moveTo(a.cx,a.cy);
           graphics.lineTo(ax,ay);
          var mag:Number; var dx:Number; var dy:Number;
          dx = ax-(a.cx+a.vx); dy= ay-(a.cy+a.vy);
          mag = Math.sqrt(dx*dx+ dy*dy);
          if (mag == 0) { mag =0.0001; }
          //if (mag < r) { return; }

          dx/=mag;   dy/=mag;
          var kx:Number; var ky:Number;
          r = mag-r;
          kx = dx*r;
          ky = dy*r;
          a.vx += (kx-a.vx)*t;
          a.vy += (ky-a.vy)*t;
        }//gopos
        
        public function spring(a:xVert, b:xVert, rest:Number, t:Number=0.5):void
        {
           graphics.moveTo(a.cx, a.cy);
           graphics.lineTo(b.cx, b.cy);
        
          var ax:Number;     var ay:Number;     var dx:Number;     var dy:Number;
          var nx:Number;     var ny:Number;     var dist:Number;   var mag:Number;
          var reld:Number;     var relvel:Number;      var rem:Number;      

           dx = ((a.cx + a.vx) - (b.cx + b.vx));     
           dy = ((a.cy+a.vy) - (b.cy+b.vy));
            
            mag = Math.sqrt(dx * dx + dy * dy);
            if (mag == 0) {mag = Math.random(); a.cx += Math.random()-0.5; b.cy+=Math.random()-0.5;}
            //if (mag == 0) { mag = 0.001; }
            
            nx = dx / mag;     ny = dy / mag;
            ax = a.vx - b.vx;     ay = a.vy - b.vy;
    
            relvel = (ax*nx) +(ay*ny);
            reld = mag - (rest+rest);
                 
            rem = relvel + reld;
            rem*=0.5;
                    
            if (rem > 130) { rem = 130; }
            else if (rem < -130) { rem = -130; }
      
            a.vx += (rem *(nx*-t  )) ;      a.vy += (rem *(ny*-t  )) ;
            b.vx += (rem* (nx*t  )) ;     b.vy += (rem * (ny * t ))  ; 

        }//spring        
    }//classend
}

internal class xVert
{
  public var cx:Number = 0;
  public var cy:Number = 0;
  public var vx:Number = 0;
  public var vy:Number = 0;   
    
  public function xVert(ax:Number,ay:Number) { cx=ax;cy=ay;}  
    
}//xvert