flash on 2013-6-19

by mutantleg
♥0 | Line 73 | Modified 2013-06-19 22:20:48 | 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/oYSS
 */

package {
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            canvas = new BitmapData(32,32,false,0x808080);
           
           pic = new Bitmap(canvas);
           pic.scaleX = 8;
           pic.scaleY = 8;
           addChild(pic);
           
           //drawLine(canvas, 4,4, 24,8, 0);
           
           //drawLine(canvas, 4,13, 18,28,0);
           
           //drawLine(canvas, 4,7, 31, 14,0);
           
           drawLine(canvas, 31,31, 1,1, 0xff0000);
        
  //                    drawLine(canvas, 1, 1, 12, 25, 0);
          drawLine(canvas, 12, 25, 1, 1, 0x00FF00);

             drawLine(canvas, 1, 25,  12, 1, 0);
              
              
              
           drawLine(canvas, 1,30, 31, 1, 0);
              
           drawLine(canvas, 31,31, 1,1, 0);
              
              
              drawLine(canvas, 15, 20, 12, 5, 0);         
              
        }//ctor
        
        public var pic:Bitmap;
        public var canvas:BitmapData;
        
        
        //based on
        //http://thekannon-server.appspot.com/herpity-derpity.appspot.com/pastebin.com/eQVafydU
        
        public function drawLine(bm:BitmapData, x0:int, y0:int, x1:int, y1:int, c:uint):void
        {
            var w:int;
            var h:int;
            var kx:int;
            var ky:int;
            var dx0:int;
            var dy0:int;
            var dx1:int;
            var dy1:int;
            var i:int;
            var longest:int 
            var shortest:int
            var numerator:int 
             
            w = x1 - x0;
            h = y1 - y0;
            
            dx1 = 0; dy1 = 0;
             dx0 = 0; dy0 = 0;
            
             if (w<0) dx0 = -1 ; 
             else if (w>0) dx0 = 1 ;
            
             if (h<0) dy0 = -1 ; 
             else if (h>0) dy0 = 1 ;
            
             if (w<0) dx1 = -1 ; 
             else if (w>0) dx1 = 1 ;
            
             longest = w < 0 ? -w : w; // Math.abs(w) ;
             shortest = h < 0 ? -h : h; // Math.abs(h) ;
            
                 if (!(longest>shortest)) {
            
                     longest = h < 0 ? -h: h; // Math.abs(h) ;
                     shortest = w < 0 ? - w : w; // Math.abs(w) ;
            
                     if (h<0) dy1 = -1 ; 
                     else if (h>0) dy1 = 1 ;
            
                     dx1 = 0 ;
            
                 }//endif
            
                 numerator= longest >> 1 ;
                 
                 kx = x0;
                 ky = y0;
            
                 for (i=0;i<=longest;i++) {
            
                        //bm.setPixel(kx, ky, c);
                       // bm.setPixel(kx, ky-1, c);
                
                     numerator += shortest ;
            
                     if (!(numerator<longest)) {          
                         numerator -= longest ;
                         kx += dx0 ;
                         ky += dy0 ;
                  
                          bm.setPixel(kx-dx0, ky, c); //make line thicker
                          bm.setPixel(kx, ky, c);
                                  
                     } else {  
                         kx += dx1 ;
                         ky += dy1 ;
                          bm.setPixel(kx, ky, c);   
                     }//endif
                     
                 }//nexti
        
        }//drawline
        
        
        //nevermind, i only seem to find bresenhams working in one direction
        
        /*
        //based on http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
        
        //modified because i need some raycast thing for string pulling
        //that doesnt go through corners
        
        
        public function drawLineOld(bm:BitmapData, x0:int, y0:int, x1:int, y1:int, c:uint):void
        {
            
            var dx:int;
            var dy:int;
            var d:int;
            
            var kx:int;
            var ky:int;
           
            var s:int;
 
            var tempx:int;
           
         

            
            dx = Math.abs(x1 - x0);
            dy = Math.abs(y1 - y0);
            
            if (dy > dx)
            {
              // var tempx:int;
               tempx = x0; y0 = x0; y0 = tempx;
               tempx = y1; y1 = x1; x1 = tempx;
               tempx = dx; dy= dx; dx = tempx;   
            }
  
            if (x0 > x1) //swap
            {
              
               tempx = x0; x0 = x1; x1 = tempx;
               tempx = y0; y0 = y1; y1 = tempx;
            }
           
           
               s = 1;
            if (y0 > y1) { s = -1; }
           
            
            bm.setPixel(x0,y0, c);
            
         
           d = (dy-dx) * 0.5;
           if (d < 0) { d = -d; }  //abs
           
           
            
           //  d = (dy+dy)-dx;  //2 * dy -  dx;
             
            //reuse dx and dy
           // dx = ((dx+dy) - (dx+dx));
           // dy = (dy+dy);
            
          
           // ky = y0;
            ky = y1;
            for (kx = x0; kx < x1; kx++)
            {
               
               bm.setPixel(ky,kx,c);
                 
                 if ( d >= 0 )
                 {
                  bm.setPixel(kx,ky,c) //make it extra thick   
                  ky += s;
                 // bm.setPixel(kx,ky,c);
                  d +=  (dy-dx)*0.5; //(2*dy-2*dx)
                 }
                else
                {
                  bm.setPixel(kx,ky,c);
                  d += dy*0.5; // (2*dy)
                }//endif
                
            }//nextkx
             
              bm.setPixel(x1,y1,c);
              
              
          
              
              
        }//drawline
        */
        
        
        
    }//classend
}