/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ur46
*/
package {
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest()
{
var a:xBtn;
a = new xBtn(); a.x = 16; a.y = 16; a.mode = 1; addChild(a);
a = new xBtn(); a.x = 16; a.y = 16+40; a.mode = 2; addChild(a);
a = new xBtn(); a.x = 16; a.y = 16+80; a.mode = 3; addChild(a);
a = new xBtn(); a.x = 16; a.y = 16+120; a.mode = 4; addChild(a);
vecRect = new Vector.<xRect>;
vecCirc = new Vector.<xCirc>;
deb = new TextField();
deb.mouseEnabled = false; deb.width =320; deb.height = 240;
addChild(deb);
stage.addEventListener(MouseEvent.CLICK, mclick);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public static var cmode:int = 0;
public function mclick(e:MouseEvent):void
{
if (stage.mouseX < 64) { return; }
if (tb == 0) {return;}
cmode = 0;
var a:xRect;
a = new xRect();
a.cx = tx; a.cy = ty;
vecRect.push(a);
gold -= 15;
}//mclick
public var vecCirc:Vector.<xCirc>;
public var vecRect:Vector.<xRect>;
public var tx:Number = 0;
public var ty:Number = 0;
public var tb:int = 0;
public var px:Number = 0;
public var py:Number = 0;
public var gt:int = 0;
public function isOver(ax:Number, ay:Number, aw:Number=0,ah:Number=0):Boolean
{
var i:int; var num:int; var a:xRect;
num = vecRect.length;
for (i = 0; i < num; i++)
{
a = vecRect[i];
if (ax + aw < a.cx) { continue; }
if (ay + ah < a.cy) { continue; }
if (a.cx + a.cw < ax) { continue; }
if (a.cy + a.ch < ay) { continue; }
return true;
}//nexti
return false;
}//isover
public function getDist(ax:Number, ay:Number):Number
{
return Math.sqrt(ax*ax + ay*ay);
}//getdist
public function getTarg(ax:Number, ay:Number, dist:Number):xCirc
{
var i:int; var num:int; var a:xCirc;
var mag:Number; var d:Number;
var ret:xCirc;
ret = null;
mag = 999999999;
num = vecCirc.length;
for (i = 0; i < num; i++)
{
a = vecCirc[i];
if (ax + dist < a.cx) { continue; }
if (ay + dist < a.cy) { continue; }
if (ax - dist > a.cx) { continue; }
if (ay - dist > a.cy) { continue; }
d = getDist(ax-a.cx, ay-a.cy);
if (d > mag) { continue;}
mag = d; ret = a;
}//nexti
return ret;
}//gettarg
public var baseHp:Number = 8;
public var baseSpeed:Number = 0.3;
public var curHp:Number = 1;
public var curSpeed:Number =1;
public var wave:int = 0;
public var baseFrag:Number = 8;
public var curFrag:Number = 8;
public var gold:Number = 75;
public var frag:Number = 0;
public var deb:TextField;
public function onEnter(e:Event):void
{
if (cmode > 0 && gold < 15) { cmode = 0; }
curHp = baseHp + (wave);
curSpeed = baseSpeed + (wave*0.02);
curFrag = baseFrag + (wave*4);
// deb.text = wave+":"+baseHp+":"+baseSpeed;
deb.text = wave+":"+curHp.toFixed(0)+":"+curSpeed.toFixed(0)+":"+frag.toFixed(0)+":"+gold.toFixed(0);
if (frag > curFrag) { wave += 1; }
graphics.clear();
graphics.lineStyle(2,0);
graphics.drawRect(64,0,300,450);
var mx:Number; var my:Number;
mx = stage.mouseX;
my = stage.mouseY;
graphics.lineStyle(2,0);
var i:int; var num:int; var a:xRect; var b:xCirc;
num = vecRect.length;
for (i = 0; i < num; i++)
{
a = vecRect[i];
a.ang += 0.1;
if (a.reload < gt)
{
b = getTarg(a.cx+16, a.cy+16,64);
a.reload = gt + 5;
if (b != null)
{
graphics.moveTo(a.cx+16,a.cy+16);
graphics.lineTo(b.cx,b.cy);
b.hp -= 1;
if (b.hp <= 0) { frag += 1; gold += 1 + (wave*0.5); }
}//endif2
}//endif
graphics.beginFill(0, 0.5);
graphics.drawRect(a.cx,a.cy,a.cw,a.ch);
graphics.endFill();
graphics.drawCircle(a.cx+16,a.cy+16,12);
graphics.moveTo(a.cx+16,a.cy+16);
graphics.lineTo(a.cx+16+Math.cos(a.ang)*14, a.cy+16+Math.sin(a.ang)*14);
}//nexti
num = vecCirc.length;
for (i = 0; i < num; i++)
{
b = vecCirc[i];
b.cx += b.vx;
b.cy += b.vy;
if (b.cy >= 440) { b.hp = -1; }
if (b.hp <= 0)
{
vecCirc[i] = vecCirc[num-1];
vecCirc.pop();
i -=1;
num-=1
continue;
}//nexti
graphics.beginFill(0,0.5);
graphics.drawCircle(b.cx,b.cy,b.rad);
graphics.endFill();
}//nexti
px = 80 + Math.abs(Math.sin(gt*0.1)) *250;
if (gt > 60)
if (num < 16)
if (gt % 10 == 0)
{
b = new xCirc();
b.cx = px; b.cy = py;
b.hp = curHp; b.vy = curSpeed;
vecCirc.push(b);
}//endif
tx = ((mx/32)|0) * 32;
ty = ((my/32)|0)*32;
tb = 0;
graphics.lineStyle(4,0,0.5);
if (cmode > 0)
{
if (isOver(tx+8,ty+8,16,16) == false) { tb = 1;}
else { tb =0; }
if (tb ==0)
{ graphics.lineStyle(2, 0xFF0000); }
graphics.drawRect(tx,ty,32,32);
graphics.drawCircle(tx+16,ty+16,64);
}//endif
gt += 1;
}//onenter
}//classend
}
import flash.events.MouseEvent;
import flash.display.Sprite;
internal class xRect
{
public var cx:Number = 0;
public var cy:Number = 0;
public var cw:Number = 32;
public var ch:Number = 32;
public var ang:Number = 0;
public var reload:int = 0;
}//xrect
internal class xCirc
{
public var cx:Number = 0;
public var cy:Number = 0;
public var rad:Number = 8;
public var ang:Number = 0;
public var vx:Number = 0;
public var vy:Number = 2;
public var hp:Number = 12;
}//xcirc
internal class xBtn extends Sprite
{
public function xBtn()
{
graphics.clear();
graphics.beginFill(0, 1);
graphics.drawRect(0,0,32,32);
graphics.endFill();
alpha = 0.5;
this.buttonMode = true;
this.useHandCursor = true;
this.mouseChildren = false;
this.addEventListener(MouseEvent.ROLL_OVER, mover);
this.addEventListener(MouseEvent.ROLL_OUT, mout);
this.addEventListener(MouseEvent.CLICK, mclick);
}//xbtn
public var mode:int = 0;
public function mclick(e:MouseEvent):void
{
if (FlashTest.cmode == mode) { FlashTest.cmode = 0; return;}
FlashTest.cmode = mode;
}//mclick
public function mover(e:MouseEvent):void
{
alpha = 1;
}//mover
public function mout(e:MouseEvent):void
{
alpha = 0.5;
}//mout
}//xbtn