/**
* 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
}