flash on 2016-11-8

by mutantleg
♥0 | Line 142 | Modified 2016-11-09 06:10:31 | 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/AcYy
 */

package {
    import flash.geom.Rectangle;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
          
          stage.quality = "LOW";
          
          map = new BitmapData(465,465, false, 0);
          var r:Rectangle;
          var i:int;
          r = new Rectangle();
 
          r.width=465;r.height=465;
          map.fillRect(r,0xFF);
          r.width=450; r.height=450;
          r.x=8; r.y =8;
          map.fillRect(r, 0);
          
          for (i=0;i<32;i+=1)
          {
            r.x=Math.random()*465;
            r.y=Math.random()*465;
            r.width=32;
            r.height=32;  
             map.fillRect(r, Math.random()*0xFFffFF); 
          }//nexti
            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var map:BitmapData;
        
        
        public var cx:Number = 230;
        public var cy:Number = 230;
        public var ang:Number =  3.1415*1.5;

        public function isWall(ax:Number, ay:Number):Boolean
        { return map.getPixel(ax,ay) > 0; }

        public var colh:Number = 90; //135;

        public function drawColumn(x0:Number, d:Number):void
        {
            var dx:Number; var dy:Number;
            
            dy = 235;
            
            if (d < 0){d=0;}
            
            //d*=1.5;
            
            var ay:Number;
            var by:Number;
            
            ay = dy + d * colh;
            by = dy - d * colh;
            graphics.moveTo(x0, ay);
            graphics.lineTo(x0, by);
            
        }//drawcolumn                
 
        public function getCol(c:uint, t:Number):uint
        {
            var rc:Number;
            var gc:Number; 
            var bc:Number;
            
            bc = (c&0xFF) * t;
            gc = ((c>>8)&0xFF) * t ;
            rc = ((c>>16)&0xFF) * t;
            
            return  (bc&0xFF)| ((gc&0xFF)<<8) | ((rc&0xFF)<<16) ;
        }//getcol
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            graphics.beginFill(0x88, 1);
            graphics.drawRect(0,235-colh,465,colh);            
            graphics.endFill();
            graphics.beginFill(0x880000, 1);
            graphics.drawRect(0,235,465,colh);            
            graphics.endFill();
            graphics.beginFill(0, 1);
            graphics.drawRect(0,235-16,465,32);            
            graphics.endFill();
            
            graphics.drawCircle(cx,cy, 8);

            cx = stage.mouseX;
            cy = stage.mouseY;
                
           // var ang:Number;
            //ang = 3.1415*1.5;
            /*
            if (cx<32){ ang+=0.1; }
            if (cx>430){ ang-=0.1; }
         */
            // if (isWall(cx,cy)) { ang += 0.1; }
         
            var ta:Number;
            var ta2:Number;
            ta = ang;
            
            var ax:Number; var ay:Number;
            ax = cx + Math.cos(ta) * 160;
            ay = cy + Math.sin(ta) * 160;
            
            graphics.drawCircle(ax,ay, 4);
            graphics.moveTo(cx,cy);
            graphics.lineTo(ax,ay);

            ta = ang - 0.785375;
            ta2 = ang + 0.785375;

            var x0:Number; var y0:Number;
            var x1:Number; var y1:Number;
            var x2:Number; var y2:Number;
            var x3:Number; var y3:Number;

            var nr:Number;
            var fr:Number;
            nr = 16;
            fr = 320+160;

            x0 = cx + Math.cos(ta) * nr;
            y0 = cy + Math.sin(ta) * nr;                       
            x1 = cx + Math.cos(ta2) * nr;
            y1 = cy + Math.sin(ta2) * nr;
            graphics.moveTo(x0,y0);
            graphics.lineTo(x1,y1);
            
            ta = ang - 0.685375;
            ta2 = ang + 0.685375;
            x2 = cx + Math.cos(ta) * fr;
            y2 = cy + Math.sin(ta) * fr;                       
            x3 = cx + Math.cos(ta2) * fr;
            y3 = cy + Math.sin(ta2) * fr;
            graphics.moveTo(x2,y2);
            graphics.lineTo(x3,y3);
 
             var c:uint;

            var tw:Number;            
            var t:Number; var u:Number;
            var bx:Number; var by:Number;
            var kx:Number; var ky:Number;
            
            var d:Number;
            var nx:Number; var ny:Number;
            nx = Math.cos(ang);
            ny = Math.sin(ang);
            
            for (t=0;t<1;t+=0.005)
            {
                
             
            //  tw = t;   
            //  tw = Math.sin(t*0.785);
                
              ax = x0 + (x1-x0)*t;
              ay = y0 + (y1-y0)*t;
              bx = x2 + (x3-x2)*t;
              by = y2 + (y3-y2)*t;
              
              ax=cx;
              ay=cy;
              
              tw = ta+(ta2-ta)*t;
           //  bx = cx + Math.cos(tw) * 320;
            // by = cy + Math.sin(tw) * 320;
           //   ax = cx + Math.cos(tw) * 16;
            //  ay = cy + Math.sin(tw) * 16;
                
              //graphics.moveTo(ax,ay);
              //graphics.lineTo(bx,by);  
                
                c = 0;
                
              for (u=0;u<0.85;u+=0.01)
              {
                kx = ax +(bx-ax)*u;
                ky = ay +(by-ay)*u;
               
                //graphics.drawCircle(kx,ky, 4);   
         //       if (isWall(kx,ky)) { break; }
                if (isWall(kx,ky)) { c = map.getPixel(kx,ky); break; }
                  
              }//nextu  
 
             
              /*
              graphics.lineStyle(2, 0);
              graphics.moveTo(ax,ay);
              graphics.lineTo(kx,ky);  
              */
              
              if (c!= 0)
              {
                d = (kx-cx)*nx + (ky-cy)*ny;
                d /= fr;
                u = d * 2;  
                  
               //graphics.lineStyle(6, c);
               graphics.lineStyle(3, getCol(c, 1-u));
               drawColumn(t*465, 1-u);
              }
                
            }//nextt
            
            
        }//onenter
        
    }//classend
}