flash on 2016-9-3

by mutantleg
♥0 | Line 178 | Modified 2016-09-03 22:37:33 | 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/EGw7
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
         stage.addEventListener(Event.ENTER_FRAME, onEnter);    
        }//ctor

        public var myObj:xObj = new xObj();

        public function getMag(ax:Number,ay:Number,az:Number):Number
        { return Math.sqrt(ax*ax+ay*ay+az*az); }
        
        public function onEnter(e:Event):void
        {
           graphics.clear();
           graphics.lineStyle(2, 0);
           
           drawBox2(0,0,0, 384,-16,384);

           graphics.lineStyle(2, 0xFF0000);
           goPos(myObj.vecVert[4], 232,232,232);
  //         goPos(myObj.vecVert[5], 232,182,232);
    //       goPos(myObj.vecVert[6], 232,182,232);
     //      goPos(myObj.vecVert[7], 232,182,232);
           


           graphics.lineStyle(2, 0);
           
           upVert(myObj.vecVert);
           upSpring(myObj.vecSpring);

       //     myObj.vecVert[0].vx += 1;
      //      myObj.vecVert[7].vx -= 1;
  
/*
            //try to brake the box
            if (Math.random()<0.05)
            {
                var i:int;
                i = myObj.vecVert.length * Math.random();
              myObj.vecVert[i].vx += Math.random()*16-8;
              myObj.vecVert[i].vy += Math.random()*16-8;
              myObj.vecVert[i].vz += Math.random()*16-8;
                 
            }//endif         
 */           
            
            
        }//onenter
       
        public function upVert(vec:Vector.<xVert>):void
        { 
          var a:xVert; var i:int; var num:int;
          num = vec.length;
          for(i=0;i<num;i+=1)
          {
            a = vec[i];
            a.vy-=0.2;
            a.vx*=0.99; a.vy*=0.99; a.vz*=0.99;

            if (a.cy+a.vy<a.rad && a.vy<0){ a.vy -= a.vy; }
            if (a.cx+a.vx<a.rad && a.vx<0){ a.vx -= a.vx; }
            if (a.cz+a.vz<a.rad && a.vz<0){ a.vz -= a.vz; }
            if (a.cx+a.vx>384 && a.vx>0){ a.vx -= a.vx; }
            if (a.cz+a.vz>384 && a.vz>0){ a.vz -= a.vz; }

            a.cx+=a.vx; a.cy+=a.vy; a.cz+=a.vz;
            drawBox3(a.cx,0,a.cz, a.rad,1,a.rad);
            drawBox3(a.cx,a.cy,a.cz, a.rad,a.rad,a.rad);
          }//nexti  
        }//upvert
 
        public function upSpring(vec:Vector.<xSpring>):void
        { var a:xSpring; var i:int; var num:int;
          num = vec.length;
          for(i=0;i<num;i+=1)
          { 
            a = vec[i]; 
            drawLine(a.va.cx, 0, a.va.cz,  a.vb.cx, 0, a.vb.cz);
            drawLine(a.va.cx, a.va.cy, a.va.cz,  a.vb.cx, a.vb.cy, a.vb.cz);
            spring(a.va, a.vb, a.rest, a.t);
          }//nexti
        }//uppsring       
        
        
        
        public var camx:Number = 0;   public var camy:Number = 0;  public var camz:Number = 0; 
        public var rendw:Number = 465 * 0.5;        public var rendh:Number = 465 * 0.5; 
        public function drawLine(ax:Number, ay:Number, az:Number,
        bx:Number, by:Number, bz:Number):void
        {
           var sx:Number; var sy:Number;     
           ax -= camx; ay -= camy; az -= camz;
           bx -= camx; by -= camy; bz -= camz;
            sx = ax - az + rendw;     sy = (ax * 0.5) + (az * 0.5) - ay;
            graphics.moveTo(sx,sy);
            sx = bx - bz + rendw;     sy = (bx * 0.5) + (bz * 0.5) - by;
            graphics.lineTo(sx, sy);
        }//drawline 

        public function drawBox3(ax:Number,ay:Number,az:Number,
        rx:Number,ry:Number,rz:Number):void
        { drawBox(ax-rx,ay-ry,az-rz,ax+rx,ay+ry,az+rz); }

        public function drawBox2(ax:Number,ay:Number,az:Number,
        aw:Number,ah:Number,ad:Number):void
        { drawBox(ax,ay,az, ax+aw,ay+ah,az+ad); }
        
           
        public function drawBox(ax:Number, ay:Number, az:Number,
          bx:Number, by:Number, bz:Number):void
        {
          drawLine(ax, ay, az,   bx, ay, az);
          drawLine(ax, by, az,   bx, by, az);
          drawLine(ax, ay, bz,   bx, ay, bz);
          drawLine(ax, by, bz,   bx, by, bz);
          
          drawLine(ax, ay, az,   ax, by, az);
          drawLine(bx, ay, az,   bx, by, az);
          drawLine(ax, ay, bz,   ax, by, bz);
          drawLine(bx, ay, bz,   bx, by, bz);
          
          drawLine(ax, ay, az,   ax, ay, bz);
          drawLine(bx, ay, az,   bx, ay, bz);
          drawLine(ax, by, az,   ax, by, bz);
          drawLine(bx, by, az,   bx, by, bz);
        }//drawbox

       public function goPos(a:xVert, ax:Number, ay:Number, az:Number, r:Number=32,t:Number=0.1):void
        {
          drawLine(ax,ay,az, a.cx, a.cy, a.cz);  
          var mag:Number; var dx:Number; var dy:Number; var dz:Number;
          var kx:Number; var ky:Number; var kz:Number;
          dx = ax-(a.cx+a.vx); dy= ay-(a.cy+a.vy); dz = az-(a.cz+a.vz);
          mag = Math.sqrt(dx*dx+ dy*dy + dz*dz);
          if (mag == 0) { mag =0.0001; }
          dx/=mag;   dy/=mag; dz/=mag;
          r = mag-r;
          kx = dx*r;  ky = dy*r;    kz = dz*r;
          a.vx += (kx-a.vx)*t;
          a.vy += (ky-a.vy)*t;
          a.vz += (kz-a.vz)*t;
        }//gopos
        
        
        public function spring(a:xVert, b:xVert, rest:Number, t:Number=0.5):void
        {
          var ax:Number;     var ay:Number;     var az:Number;
          var dx:Number;     var dy:Number;     var dz:Number;
          var nx:Number;     var ny:Number;     var nz: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));
           dz = ((a.cz+a.vz) - (b.cz+b.vz));
            
            mag = Math.sqrt(dx * dx + dy * dy + dz*dz);
            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;     nz = dz/mag;
            ax = a.vx - b.vx;     ay = a.vy - b.vy;   az  = a.vz-b.vz;
    
            relvel = (ax*nx) +(ay*ny) + (az*nz);
            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));
            a.vz += (rem * (nz * -t));
            b.vx += (rem * (nx * t));     
            b.vy += (rem * (ny * t)); 
            b.vz += (rem * (nz * t)); 

        }//spring  
        
              
    }//classend
}

internal class xObj
{
 public var vecVert:Vector.<xVert> = new Vector.<xVert>(0, false);
 public var vecSpring:Vector.<xSpring> = new Vector.<xSpring>(0, false);    
 
 public function xObj()
 {
    vecVert.push(new xVert(230, 32, 230) );   
    vecVert.push(new xVert(230+32, 32, 230) );   
    vecVert.push(new xVert(230, 32, 230+32) );   
    vecVert.push(new xVert(230+32, 32, 230+32) );   

    vecVert.push(new xVert(230, 32+32, 230) );   
    vecVert.push(new xVert(230+32, 32+32, 230) );   
    vecVert.push(new xVert(230, 32+32, 230+32) );   
    vecVert.push(new xVert(230+32, 32+32, 230+32) );   

/*
    vecVert[0].rad = 18;
    vecVert[1].rad = 18;
    vecVert[2].rad = 18;
    vecVert[3].rad = 18;
*/

       var i:int; var k:int;
       for (i=0;i<8;i+=1)
       {           
         for (k=i+1;k<8;k+=1)
         {   
           addSpring(vecVert[i], vecVert[k]);
         }//nextk  
       }//nexti

/*
    addSpring(vecVert[0], vecVert[1]);
    addSpring(vecVert[0], vecVert[2]);
    addSpring(vecVert[1], vecVert[3]);
    addSpring(vecVert[2], vecVert[3]);

    addSpring(vecVert[0], vecVert[3]);
    addSpring(vecVert[1], vecVert[2]);



    addSpring(vecVert[0], vecVert[4]);
    addSpring(vecVert[1], vecVert[5]);
    addSpring(vecVert[2], vecVert[6]);
    addSpring(vecVert[3], vecVert[7]);



    addSpring(vecVert[4], vecVert[5]);
    addSpring(vecVert[4], vecVert[6]);
    addSpring(vecVert[5], vecVert[7]);
    addSpring(vecVert[6], vecVert[7]);

    addSpring(vecVert[4], vecVert[7]);
    addSpring(vecVert[5], vecVert[6]);



    addSpring(vecVert[0], vecVert[7]);
    addSpring(vecVert[4], vecVert[3]);

    addSpring(vecVert[2], vecVert[5]);
    addSpring(vecVert[3], vecVert[6]);
*/

 }//ctor

 public function getMag(ax:Number,ay:Number,az:Number):Number
  { return Math.sqrt(ax*ax+ay*ay+az*az); }
  
 public function addSpring(a:xVert, b:xVert):void
 {
   var sp:xSpring;
   sp = new xSpring();
   sp.va = a; sp.vb = b;
   sp.rest = getMag(a.cx-b.cx, a.cy-b.cy, a.cz-b.cz);  
   vecSpring.push(sp);
 }//addspring
 
 
}//xobj

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

internal class xSpring
{
  public var va:xVert = null;
  public var vb:xVert = null;
  public var rest:Number = 32;
  public var t:Number = 0.5;
}//xspring