/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/AtCs
*/
package {
import flash.events.MouseEvent;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.display.BitmapData;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
map = new BitmapData(465,465, false, 0xFFffFFff);
var i:int; var r:Rectangle;
var ta:Number;
ta = 0;
r = new Rectangle(0,330,1,465);
for (i=0;i<465;i+=1)
{
if (r.y<0) {r.y = 0; }
if (r.y>400) {r.y=400;}
map.fillRect(r, 0x0);
//r.y += Math.random()*16 -8;
r.y += Math.sin(ta)*2;
ta +=Math.random()*0.8-0.4;
r.x += 1;
}//nexti
graphics.beginBitmapFill(map, null,false,false);
graphics.drawRect(0,0,465,465);
graphics.endFill();
vecTank = new Vector.<xTank>(0,false);
var a:xTank;
for (i=0;i<8;i+=1)
{
a = new xTank();
a.cx=Math.random()*430; a.cy=330;
var k:int;
for (k=0;k<430;k+=1) { if (isWall(a.cx,a.cy+1)==false) { a.cy+=1;} else { break; } }
for (k=0;k<430;k+=1) { if (isWall(a.cx,a.cy)) { a.cy-=1;} else { break; } }
vecTank.push(a);
}//nexti
stage.addEventListener(MouseEvent.CLICK, onClick);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function onClick(e:MouseEvent):void
{
mclick = 1;
}//onclick
public var round:int = 0;
public var mclick:int = 0;
public var map:BitmapData;
public var vecTank:Vector.<xTank>;
public function isWall(ax:Number,ay:Number):Boolean
{ return map.getPixel(ax,ay)<256; }
public var curTank:int = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
graphics.beginBitmapFill(map, null,false,false);
graphics.drawRect(0,0,465,465);
graphics.endFill();
graphics.lineStyle(2,0xff);
var i:int; var num:int; var a:xTank;
num=vecTank.length;
for(i=0;i<num;i+=1)
{
a = vecTank[i];
var k:int;
for (k=0;k<8;k+=1) { if (isWall(a.cx,a.cy+1)==false) { a.cy+=1;} else { break; } }
graphics.beginFill(i==curTank?0x808080:0xffFFffFF,1);
graphics.drawCircle(a.cx,a.cy, 4);
graphics.endFill();
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.cx+Math.cos(a.ang)*8,a.cy+Math.sin(a.ang)*8);
}//nexti
a = vecTank[curTank];
a.ang = Math.atan2(stage.mouseY-a.cy, stage.mouseX-a.cx);
graphics.lineStyle(1,0);
// graphics.moveTo(stage.mouseX,stage.mouseY);
// graphics.lineTo(a.cx,a.cy);
var d:Number;
d = getMag(a.cx-stage.mouseX,a.cy-stage.mouseY);
if (d<32){d=32;}
d /= 256;
d*=2;
if (d <0) {d=0;} else if (d >1) {d =1;}
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.cx+Math.cos(a.ang)*d*128,a.cy+Math.sin(a.ang)*d*128);
var ax:Number; var ay:Number;
var vx:Number; var vy:Number;
ax = a.cx; ay= a.cy;
vx = Math.cos(a.ang)*8*d; vy=Math.sin(a.ang)*8*d;
for(i=0;i<256;i+=1)
{
if (isWall(ax,ay)) {break;}
ax+=vx;ay+=vy;
vy+=0.2;
graphics.drawCircle(ax,ay,2);
}//nexti
if (mclick > 0)
{ mclick = 0;
curTank +=1; if (curTank >= vecTank.length) { curTank = 0; round += 1; }
var r:Rectangle;
r = new Rectangle(ax-16,ay-16,32,32);
map.fillRect(r, 0xFFffFFff);
}//endif
}//onenter
public function getMag(ax:Number,ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
}//classend
}
internal class xTank
{
public var cx:Number = 0;
public var cy:Number = 0;
public var ang:Number = 0;
}//xtank