/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/chvO
*/
package {
import flash.ui.Keyboard;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.display.Sprite;
[SWF(width="400", height="400",frameRate="60", backgroundColor="#FFFFFF")]
public class FlashTest extends Sprite {
public var vecMap:Vector.<int>;
public var mwidth:int = 0;
public var mheight:int = 0;
public var vecTile:Vector.<Rectangle>;
public var numTile:int = 0;
public var bmTile:BitmapData;
public var pic:Bitmap;
public var canvas:BitmapData;
public var deb:TextField;
public function FlashTest() {
deb = new TextField();
//addChild(deb);
deb.textColor = 0xFFffFFff;
initTile();
canvas = new BitmapData(200,200, false,0);
pic = new Bitmap(canvas);
addChild(pic);
pic.scaleX = 2;
pic.scaleY = 2;
addChild(deb);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mdown);
stage.addEventListener(MouseEvent.MOUSE_UP, mup);
stage.addEventListener(KeyboardEvent.KEY_DOWN, kdown);
stage.addEventListener(KeyboardEvent.KEY_UP, kup);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512,false);
public function kdown(e:KeyboardEvent):void { vecKey[e.keyCode]=true; }
public function kup(e:KeyboardEvent):void { vecKey[e.keyCode] =false;}
public function mdown(e:MouseEvent):void { bMdown = true;}
public function mup(e:MouseEvent):void { bMdown = false;}
public var bMdown:Boolean = false;
public var px:Number = 0;
public var py:Number = 0;
public var camx:Number = 0;
public var camy:Number = 0;
public var pmx:Number = 0;
public var pmy:Number = 0;
public var mx:Number = 0;
public var my:Number = 0;
public function onEnter(e:Event):void
{
pmx = mx;
pmy = my;
mx = pic.mouseX;
my = pic.mouseY;
if (vecKey[Keyboard.A]) { camx -= 16; }
if (vecKey[Keyboard.D]) { camx += 16; }
if (vecKey[Keyboard.W]) { camy -= 16; }
if (vecKey[Keyboard.S]) { camy += 16; }
var worldw:Number;
var worldh:Number;
worldw = mwidth*8;
worldh = mheight*8;
if (camx < 0) { camx = 0;}
if (camx > worldw-200) { camx = worldw-200;}
if (camy < 0) { camy = 0;}
if (camy > worldh-200) { camy = worldh - 200;}
// camx = 64; //mouseX/8;
// camy = 64; //mouseY/8;
canvas.lock();
canvas.fillRect(canvas.rect,(0) );
drawMapBmap2(camx, camy,canvas);
canvas.setPixel(mx,my,0xFFffFFff);
canvas.setPixel(px-camx,py-camy, 0xFF0000);
canvas.setPixel(px+1-camx,py-camy, 0xFF0000);
canvas.setPixel(px-camx,py+1-camy, 0xFF0000);
canvas.setPixel(px+1-camx,py+1-camy, 0xFF0000);
canvas.unlock();
// setTileLine(0,0,400,400,1);
if (bMdown)
{
// setTile(mx+camx, my+camy, 1);
setTileLine(pmx+camx,pmy+camy,mx+camx,my+camy, 1);
}//endif
}//onenter
public function setTileLine(sx:Number, sy:Number,
ex:Number, ey:Number, t:int):void
{
var kx:Number;
var ky:Number;
var vx:Number;
var vy:Number;
var mag:Number;
var u:Number;
var it:Number;
vx = ex - sx;
vy = ey - sy;
mag = Math.sqrt(vx*vx+vy*vy);
if (mag == 0)
{
setTile(sx,sy,t);
return;
}//endif
u = 8/mag;
// deb.text = " " +u;
for (it = 0.0; it < 1.0; it+=u)
{
kx = sx + (ex-sx) *it;
ky = sy + (ey-sy) *it;
setTile(kx, ky, t);
// canvas.setPixel(kx-camx, ky-camy, 0xFFffFFff);
// canvas.setPixel(kx+1-camx, ky+1-camy, 0xFFffFFff);
}//nexti
setTile(sx,sy,t);
setTile(ex,ey,t);
}//settileline
public function setTile(wx:Number, wy:Number, t:int):void
{
var tx:int;
var ty:int;
tx = wx / 8;
ty = wy / 8;
if (tx < 0) { return; }
if (tx >= mwidth) { return; }
if (ty < 0) { return; }
if (ty >= mheight) { return; }
vecMap[tx + (ty*mwidth)] = t;
}//settile
public function initTile():void
{
var i:int;
var num:int;
mwidth = 64;
mheight = 64;
num = mwidth*mheight;
vecMap = new Vector.<int>(num, false);
for (i = 0; i < num; i++)
{
//vecMap[i] = Math.random() * 4;
vecMap[i] = 0;
}//nexti
loadMap(testMap, testw, testh);
vecTile = new Vector.<Rectangle>(256, false);
vecTile[0] = new Rectangle(0,0,8,8);
vecTile[1] = new Rectangle(8,0,8,8);
vecTile[2] = new Rectangle(16,0,8,8);
vecTile[3] = new Rectangle(24,0,8,8);
numTile = 4;
bmTile = new BitmapData(32,32, false ,0);
bmTile.fillRect(vecTile[0], 0xFF000000);
bmTile.fillRect(vecTile[1], 0xFFff00);
bmTile.fillRect(vecTile[2], 0x00ff00);
bmTile.fillRect(vecTile[3], 0x0000ff);
var tempt:BitmapData;
tempt = new BitmapData(8,8, false, 0);
tempt.noise(12);
bmTile.copyPixels(tempt, tempt.rect, new Point(8,0) );
}//inittile
public var crect:Rectangle = new Rectangle(0,0,8,8);
public function drawMapBmap2(cx:Number, cy:Number, bm:BitmapData):void
{
var sx:int;
var sy:int;
var ex:int;
var ey:int;
var w:Number;
var h:Number;
w = bm.width;
h = bm.height;
sx = Math.floor(cx/8);
sy = Math.floor(cy/8);
ex = sx + Math.ceil(w/8)+1;
ey = sy + Math.ceil(h/8)+1;
drawMapBmap(cx,cy,sx,sy,ex,ey, bm);
}//drawbmap2
public var dp:Point = new Point(0,0);
public function drawMapBmap(cx:Number, cy:Number,
sx:int, sy:int, ex:int, ey:int, bm:BitmapData):void
{
var i:int;
var k:int;
var yt:int;
var t:int;
var wt:Rectangle;
if (sy < 0) { sy = 0;}
if (sy > mheight) { return; }
if (sx < 0) { sx = 0;}
if (sx > mwidth) { return;}
if (ex < 0) { return; }
if (ex > mwidth) { ex = mwidth;}
if (ey < 0) { return; }
if (ey > mheight) { ey = mheight; }
for ( i = sy; i < ey; i++)
{
yt = i * mwidth;
for (k = sx; k < ex; k++)
{
t = vecMap[yt+k];
if (t <= 0) { continue; }
if ( t >= numTile) { continue;}
dp.x = (k*8)-cx;
dp.y = (i*8)-cy;
wt = vecTile[t];
bm.copyPixels(bmTile, wt, dp);
}//nextk
}//nexti
}//drawbmap
public function loadMap(m:Array, mw:int, mh:int):void
{
var i:int;
var num:int;
if (m.length != mw*mh) { return; }
mwidth =mw;
mheight = mh;
num = mwidth*mheight;
vecMap = new Vector.<int>(num,false);
for (i=0; i<num; i++)
{
vecMap[i] = m[i];
if (vecMap[i] == 128)
{
px = (i % mwidth) * 8;
py = (i / mwidth) * 8;
vecMap[i] = 0;
}//endif
}//nexti
}//loadmap
public var testw:int = 14;
public var testh:int = 10;
public var testMap:Array =
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,0,0,128,0,0,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1
];
}//classend
}