flash on 2013-1-16

by mutantleg
♥0 | Line 149 | Modified 2013-01-17 00:05:27 | 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/szg4
 */

package {
    import flash.text.TextField;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
       
           public var gridw:Number = 16;
           public var gridh:Number = 16;
       
        public function FlashTest() {
            
            var mwidth:int;
            var mheight:int;
            var num:int;
            var i:int;
            var k:int;
            var yt:int;
            var t:int;
       
            mwidth = 64;
            mheight = 64;
       
            num = mwidth * mheight;
            
            var vec:Vector.<int> = new Vector.<int>(num, false);
       
            for (i =0; i < num; i++)
            {
                vec[i] = Math.random() * 2;
                
            }//nexti
            
            graphics.clear();
            //graphics.lineStyle(1,0);
            //graphics.drawCircle(0,0,100);
            
            for ( i= 0; i < mheight; i++)
            {
                yt = i * mwidth;
                for (k = 0; k < mwidth; k++)
                {
                     t= vec[k+yt];
                     if (t > 0)
                     {
                         graphics.beginFill(0xFF0000FF,0.5);
                           graphics.drawRect(k*gridw,i*gridh,gridw,gridh);
                         graphics.endFill();
                     }   
                
                }
            }//nexti
       
           deb = new Sprite();
           addChild(deb);
           
           dt = new TextField();
           addChild(dt);
           dt.width = 400;
           dt.height = 200;
           
           stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var deb:Sprite;
        public var dt:TextField;
        public var ang:Number = 0;
        
        public function onEnter(e:Event):void
        {
            var minx:Number;
            var minz:Number;
            var maxx:Number;
            var maxz:Number;
            var kx:Number;
            var kz:Number;
            var hx:Number;
            var hz:Number;
            var g:Graphics;
            var dist:Number;
            var fov:Number;
            var a2:Number;
            
            var nx1:Number;
            var ny1:Number;
            var nx2:Number;
            var ny2:Number;
            var nx3:Number;
            var ny3:Number;
            var k:int;
            var i:int;
            
            //dt.text = 0;
            
              dist = 256;
            fov = 60;
            
            a2 = (fov/2) * (3.1415/180);
            
            nx1 = Math.sin(ang+a2);
            ny1 = -Math.cos(ang+a2);
            nx2 = -Math.sin(ang-a2);
            ny2 = Math.cos(ang-a2);
            nx3 = Math.cos(ang);
            ny3 = Math.sin(ang);
            
            dt.text = "  nx1  " +nx1 + "  ny1 " + ny1 + " \n"; 
            
            ang += 0.005;
            
          
            
            g = deb.graphics;
            g.clear();
            g.lineStyle(2,0);
            
            minx = maxx = mouseX;
            minz = maxz = mouseY;
            
            g.drawCircle(mouseX, mouseY, 4);
            
            kx = mouseX + Math.cos(ang+a2) * dist;
            kz = mouseY + Math.sin(ang+a2) * dist;
            hx = kx;
            hz = kz;
            
            if (minx > kx) { minx = kx;}
            if (maxx < kx) { maxx = kx;}
            if (minz > kz) { minz = kz;}
            if (maxz < kz) { maxz = kz;}
            
            g.moveTo(mouseX, mouseY);
            g.lineTo(kx,kz);
            
            kx = mouseX + Math.cos(ang-a2) * dist;
            kz = mouseY + Math.sin(ang-a2) * dist;
            
            g.moveTo(mouseX, mouseY);
            g.lineTo(kx,kz);
 
            if (minx > kx) { minx = kx;}
            if (maxx < kx) { maxx = kx;}
            if (minz > kz) { minz = kz;}
            if (maxz < kz) { maxz = kz;}
            
            g.moveTo(hx,hz);
            g.lineTo(kx,kz);
            
            g.drawRect(minx,minz,maxx-minx,maxz-minz);            
            
            var sx:int;
            var sz:int;
            var wx:int;
            var wz:int;
            
            sx = Math.floor(minx/gridw);
            sz = Math.floor(minz/gridh);
            wx = 1+Math.ceil((maxx - minx)/gridw);
            wz = 1+ Math.ceil((maxz - minz)/gridh);
            
            g.lineStyle(2,0xFF0000);
            g.drawRect(sx*gridw, sz*gridh, wx*gridw, wz*gridh);
            
            dt.appendText( " Total: " + (wx*wz) );
            
            var ex:int;
            var ez:int;
            var yt:int;
            var cx:Number;
            var cz:Number;
      
            
            ex = sx+wx;
            ez = sz+wz;
            
            g.lineStyle(2,0);
            
            var c:int;
            
            c = 0;
            for (i = sz; i < ez; i++)
            {
                //yt = i * mwidth;
                for (k = sx; k < ex; k++)
                {
                    cx = (k*gridw + (gridw*0.5)) - mouseX;
                    cz = (i*gridh + (gridh*0.5)) - mouseY;
                    
                    if ( (cx*nx1 + cz*ny1) < -16) { continue;} 
                    if ( (cx*nx2 + cz*ny2) < -16) { continue;} 
                    if ( (cx*nx3 + cz*ny3) > dist-16) { continue;} 
                    
                 c += 1;   
                  g.drawCircle(cx+mouseX,cz+mouseY,5);  
                 // g.drawRect(k*gridw,i*gridh,gridw,gridh);  
                }//nextk 
            }//nexti
            
            dt.appendText("\n Draw: " + c +  " Save " + ((wx*wz)-c));
            dt.appendText("\n Approx:  " + (c*4*2) + "  tris ");
            
        }//onenter
        
        
    }//classend
}