/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/OsTR
*/
package {
import flash.display.TriangleCulling;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.display.BitmapData;
import flash.display.Graphics;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecGrid = new Vector.<int>(mw*mh,false);
var num:int; var i:int;
num=vecGrid.length;
for(i=0;i<512;i+=1) { vecGrid[int(Math.random()*num)] = 1; }
wallSkin = new BitmapData(16,16,false,0);
wallSkin.perlinNoise(3,6,4,18, true,true,7,true);
wallSkin2 = wallSkin.clone();
wallSkin2.colorTransform(wallSkin2.rect, new ColorTransform(0.5,0.5,0.5));
wallSkin3 = wallSkin.clone();
wallSkin3.colorTransform(wallSkin3.rect, new ColorTransform(0.75,0.75,0.75));
floorSkin = wallSkin.clone();
floorSkin.colorTransform(floorSkin.rect, new ColorTransform(0.2,0.2,0.9));
skin = wallSkin;
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var floorSkin:BitmapData;
public var wallSkin:BitmapData;
public var wallSkin2:BitmapData;
public var wallSkin3:BitmapData;
public var skin:BitmapData;
public var mw:int =64;
public var mh:int =64;
public var vecGrid:Vector.<int>;
public var cw:Number=32;
public var ch:Number= 32;
public var camx:Number = 0;
public var camy:Number = 0;
public var mat:Matrix = new Matrix();
public function onEnter(e:Event):void
{
var mx:Number; var my:Number;
var ax:int; var ay:int; var t:int;
var wx:Number; var wy:Number;
var i:int; var k:int; var yt:int;
mx = stage.mouseX;
my = stage.mouseY;
camx = mx; camy=my;
ax = camx / cw; ay = camy / ch;
graphics.clear();
//graphics.lineStyle(2, 0);
mat.tx =-camx; mat.ty =-camy;
graphics.beginBitmapFill(floorSkin, mat, true, false);
graphics.drawRect(0,0,465,465);
graphics.endFill();
var h:Number;
var ni:int;
var nk:int;
ni=16;nk=16;
h=32; h=8;
for (i=-2;i<ni;i++)
{
if (i + ay >= mh) { break; }
if (i + ay < 0) { continue; }
yt = (i+ay) * mw;
for (k=-2;k<nk;k++)
{
if (k + ax >= mw) { continue; }
if (k + ax < 0) { continue; }
t = vecGrid[k+ax+yt];
if (t > 0)
{
wx = (k + ax) * cw - camx;
wy = (i + ay) * ch - camy;
graphics.drawRect(wx,wy,cw,ch);
drawRect(wx,wy,cw,ch,h);
continue;
}//endif
}//nextk
}//nexti
for (i=-2;i<ni;i++)
{
if (i + ay >= mh) { break; }
if (i + ay < 0) { continue; }
yt = (i+ay) * mw;
for (k=-2;k<nk;k++)
{
if (k + ax >= mw) { continue; }
if (k + ax < 0) { continue; }
t = vecGrid[k+ax+yt];
if (t > 0)
{
wx = (k + ax) * cw - camx;
wy = (i + ay) * ch - camy;
drawTop(wx,wy,cw,ch,h);
continue;
}//endif
}//nextk
}//nexti
//graphics.drawCircle(16,16,16);
}//onenter
public function drawTop(ax:Number,ay:Number, aw:Number,ah:Number, h:Number=16):void
{
skin=wallSkin;
drawQuad(ax,ay, h, ax+aw,ay,h, ax,ay+ah,h, ax+aw,ay+ah,h);
// drawQuad(ax,ay, h, ax+aw,ay,0, ax,ay+ah,h, ax+aw,ay+ah,0);
}//top
public function drawRect(ax:Number,ay:Number, aw:Number,ah:Number, h:Number=16):void
{
skin=wallSkin3;
if (ax>235) { drawWall(ax,ay,ax,ay+ah,h); }
if (ax<235) { drawWall(ax+aw,ay,ax+aw,ay+ah,h); }
skin=wallSkin2;
if (ay >235) { drawWall(ax,ay,ax+aw,ay,h); }
if (ay<235) { drawWall(ax,ay+ah,ax+aw,ay+ah,h); }
}//drawrect
public function drawWall(x0:Number,y0:Number, x1:Number,y1:Number, h:Number=16):void
{
drawQuad(x0,y0,0, x1,y1,0, x0,y0, h, x1,y1, h);
}//drawwall
public var vecFace:Vector.<int> = Vector.<int>([0,1,2, 2,1,3]);
public var vecVert:Vector.<Number> = Vector.<Number>([0,0, 1,0, 0,1, 1,1]);
public var vecUv:Vector.<Number> = Vector.<Number>([0,0, 1,0, 0,1, 1,1]);
public function drawQuad(x0:Number, y0:Number, z0:Number,
x1:Number,y1:Number,z1:Number, x2:Number,y2:Number,z2:Number,
x3:Number,y3:Number,z3:Number):void
{
var ax:Number; var ay:Number;
z0*=-0.01; z1*=-0.01; z2*=-0.01; z3*=-0.01;
ax = 235-x0; ay = 235-y0;
x0 = x0 + ax*z0;
y0 = y0 + ay*z0;
ax = 235-x1; ay = 235-y1;
x1 = x1 + ax*z1;
y1 = y1 + ay*z1;
ax = 235-x2; ay = 235-y2;
x2 = x2 + ax*z2;
y2 = y2 + ay*z2;
ax = 235-x3; ay = 235-y3;
x3 = x3 + ax*z3;
y3 = y3 + ay*z3;
vecVert[0] = x0; vecVert[1] = y0;
vecVert[2] = x1; vecVert[3] = y1;
vecVert[4] = x2; vecVert[5] = y2;
vecVert[6] = x3; vecVert[7] = y3;
graphics.beginBitmapFill(skin, null,false,false);
// graphics.beginFill(0xFF000000, 1);
graphics.drawTriangles(vecVert, vecFace ,vecUv);
graphics.endFill();
}//drawquad
}//classend
}