forked from: flash on 2013-1-26

by mutantleg forked from flash on 2013-1-26 (diff: 24)
just added some pseudo tricky shadow thing (using projecting a point to a plane)
♥0 | Line 165 | Modified 2013-04-30 19:49:55 | 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/wlt2
 */

// forked from mutantleg's flash on 2013-1-26
package {
    import flash.events.Event;
    import flash.geom.Vector3D;
    import flash.geom.Matrix3D;
    import flash.geom.Point;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
       
       public var vecVert:Vector.<wVert>;
       public var vecFace:Vector.<int>;
       
        public function FlashTest() {
            
            vecVert = new Vector.<wVert>(0,false);
            vecFace = new Vector.<int>(0,false);
            
            var i:int;
            var num:int;
            var ang:Number;
            var u:Number;
            var p:wVert;
            var off:int;
            var wid:Number;
            
            wid = -32;
            
            num = 8;
            u = 6.28 / num;
            ang = 0;
            
            graphics.clear();
            graphics.lineStyle(1,0);
            
            p = new wVert(0,0,wid);
            vecVert.push(p);
                //graphics.drawCircle(p.x, p.y, 4);
            
            
            off = vecVert.length;
            
            var k:int;
            var st:int;
            var sw:Number;
            
            sw = 64;
            
            st = 4;
            
            for (k = 0; k < st; k +=1)
            {
                ang = 0;
                for (i = 0; i < num; i++)
                {
                    p = new wVert();
                    p.x = Math.cos(ang) * sw;
                    p.y = Math.sin(ang) * sw;
                    p.z = wid;
                    
                 //   graphics.drawCircle(p.x, p.y, 4);
                    
                    ang += u;
                    
                    vecVert.push(p);
                }//nexti
                sw += 16;
                wid += 16;
            }//nextst
            
           /*
            ang = 0;
            for (i = 0; i < num; i++)
            {
                p = new Point();
                p.x = 200+Math.cos(ang) * 96;
                p.y = 200+Math.sin(ang) * 96;
                
                graphics.drawCircle(p.x, p.y, 4);
                
                ang += u;
                
                vecVert.push(p);
            }//nexti
            */
         
            
         
         for (i = 0; i < (num-1) ; i++)
         {
           
            vecFace.push(0);
            vecFace.push(1+i);
            vecFace.push(2+i);
         }//nexti
              vecFace.push(0);
              vecFace.push(1);
              vecFace.push(num);
          
          
          var vv:int;
           var off2:int;
            off2 = vecVert.length;
            
            p =new wVert(0,0, wid);
            vecVert.push(p);
             //graphics.drawCircle(p.x, p.y, 4);
             
             
           for (i= 0; i < (num-1);i++)
           {
            vecFace.push(off2);
            vecFace.push(off2-1-i);
            vecFace.push(off2-2-i); 
           } //nexti
           
           
           vecFace.push(off2); 
            vecFace.push(off2-1);
            vecFace.push(off2-num); 
            
            
            k = 1;
            var sk:int;
            
            
            for (k = 0; k < (st-1); k++)
            {
                sk = k* num;
            for (i = 0; i < (num-1); i++)
            {
                
                vecFace.push(0+i+off+sk);
                vecFace.push(1+i+off+sk);
                vecFace.push(num+i+off+sk);
                
            
                vecFace.push(1+i+off+sk);
                vecFace.push(num+1+i+off+sk);
                vecFace.push(num+i+off+sk);
             
            }//nexti
            
            
            vecFace.push(num-1+off+sk);
            vecFace.push(num+num-1+off+sk);
            vecFace.push(num+off+sk);
            
            
            vecFace.push(num-1+off+sk);
            vecFace.push(0+off+sk);
            vecFace.push(num+off+sk);
            }//nextk
            
            
        
            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var tang:Number = 0;
        public var tmat:Matrix3D = new Matrix3D();
        public function onEnter(e:Event):void
        {
            
            var nx:Number; var ny:Number; var nz:Number;
            var px:Number; var py:Number; var pz:Number;
            var dot:Number;
            
            nx = 0; ny = -1; nz = -0.2;
            px = 0; py = 128; pz = 0; 
            
            
            graphics.clear();
            graphics.lineStyle(1,0);
            
            tmat.identity();
            
                
            var i:int;
            var num:int;
            var mat:Matrix3D;
            var raw:Vector.<Number>;
            var w:wVert;
            
            mat = new Matrix3D();
            mat.identity();
            mat.appendRotation(tang, Vector3D.Y_AXIS);
            
            tang += 5;
            
            raw = mat.rawData;
            
            num = vecVert.length;
            for (i = 0; i < num; i++)
            {
               w = vecVert[i];
               
               w.sx = w.x * raw[0] + w.y * raw[4] + w.z * raw[8] + raw[12] + 200;
               w.sy = w.x * raw[1] + w.y * raw[5] + w.z * raw[9] + raw[13] + 200;
               
               dot = (w.sx * nx) + (w.sy * ny) + (w.z * nz);
               
               w.gx =  w.sx - (dot * nx);
               w.gy =  w.sy - (dot * ny) + 400; 
                
            }//nexti
            
            
            var p1:wVert;
            var p2:wVert;
            var p3:wVert;
            
            num = vecFace.length;
            for (i = 0; i < num;i+=3)
            {
                p1 = vecVert[ vecFace[i] ];
                p2 = vecVert[ vecFace[i+1] ];
                p3 = vecVert[ vecFace[i+2] ];
                
                
               // graphics.beginFill(Math.random()*0xffFFff,0.75);
                
                 graphics.moveTo(p1.sx, p1.sy);
                 graphics.lineTo(p2.sx, p2.sy);
                 graphics.lineTo(p3.sx, p3.sy);
                 graphics.lineTo(p1.sx, p1.sy);
                  
              // graphics.endFill();
              
                 graphics.beginFill(0, 0.5);
                 graphics.moveTo(p1.gx, p1.gy);
                 graphics.lineTo(p2.gx, p2.gy);
                 graphics.lineTo(p3.gx, p3.gy);
                 graphics.lineTo(p1.gx, p1.gy);
                 graphics.endFill();
                
            }//nexti
            
        }//onenter
        
        
    }//classend
    
}

internal class wVert
{
    public var x:Number = 0;
    public var y:Number = 0;
    public var z:Number = 0;
    
    public var sx:Number = 0;
    public var sy:Number = 0;
    
    public var gx:Number = 0;
    public var gy:Number = 0;
    
    public function wVert(x_:Number=0,y_:Number=0,z_:Number=0):void
    {
        x = x_;
        y = y_;
        z = z_;
    }//wvert
    
}//wvert