//-------------------------------------------------------------------------------------------
// General
//-------------------------------------------------------------------------------------------
Mouse.threshold = 2;
//-------------------------------------------------------------------------------------------
// Sprites
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
// Player Sprite
//-------------------------------------------------------------------------------------------
s = Game.addSprite();
s.addAnimation('sprite.gif','sprite2.gif');
s.animationDelay = 50;
s.zIndex = 2;
//s.setImpactSound('chord.wav');
s.maxSpeed = 5;
s.mass = 1;
s.damage = 10;
s.disableCollisionResponse = true;
s.damageClass = 'playerDamage';
s.onDamage = function (sender, ammount) {
	face.src = 'facehurt.gif';
	setTimeout("face.src='face.gif'",500);
}
bgtoogle = s.addAction ('66_DOWN');
pause = s.addAction ('13_DOWN');
stop = s.addAction ('17_DOWN');
up = s.addAction ('UP_DOWN','MOVE_UP');
down = s.addAction ('DOWN_DOWN','MOVE_DOWN');
left = s.addAction ('LEFT_DOWN','MOVE_LEFT');
right = s.addAction ('RIGHT_DOWN','MOVE_RIGHT');
fire = s.addAction ('32_DOWN','LEFT_DOWN');
change = s.addAction ('16_DOWN','RIGHT_DOWN');
fx = new Array();
for (var i = 0; i < 9; i++) {
	fx.push(s.addAction((49+i)+'_DOWN'));	//Keycodes from 49 to 57 (keys from 1 to 9)
	fx[i].i = i;
	fx[i].onActivate = function (sender,sprite) {
		Weapons.setCurrent(sender.i);
		fire.onActivate(sender,sprite);
	}
}
bgtoogle.onActivate = function (sender,sprite) {
}
pause.onActivate = function (sender,sprite) {
	fire.enabled = !fire.enabled;
	Game.pause();
}
fire.onActivate = function (sender,sprite) {
	Weapons.getCurrent().shoot(sprite.position.x+sprite.dimensions.x+1,sprite.position.y,sprite.zIndex);
}
change.onActivate = function (sender,sprite) {
	Weapons.next();
}

stop.onActivate = function (sender,sprite) {
	sprite.force.reset();
	sprite.acceleration.reset();
	sprite.velocity.div(2);
}
up.onActivate = function (sender,sprite) {
	sprite.force.set(0,-1);
}
down.onActivate = function (sender,sprite) {
	sprite.force.set(0,1);
}
left.onActivate = function (sender,sprite) {
	sprite.force.set(-1,0);
}
right.onActivate = function (sender,sprite) {
	sprite.force.set(1,0);
}
//-------------------------------------------------------------------------------------------
// Enemy 1 Sprite
//-------------------------------------------------------------------------------------------
sEnemy1 = new Sprite();
sEnemy1.addAnimation('saucer.gif');
sEnemy1.position.set(Game.width,Game.height/2);
sEnemy1.mass = 1;
sEnemy1.force.set(-1,0);
sEnemy1.zIndex = 2;
sEnemy1.maxSpeed = 4;
sEnemy1.disableCollisionResponse = true;
sEnemy1.life = 1;
sEnemy1.damage = 8;
sEnemy1.destroyAfterDeathAnimation = true;
sEnemy1.setDeathAnimation('hit1.gif','hit2.gif','hit3.gif','hit4.gif');
sEnemy1.onUpdate = function(sender) {
	if ((!sender.leader || sender.leader.life < 1) && Math.random() > 0.9) {
		sender.force.set(-1,0);
		sender.seek(Game.playerSprite);
	}
}
sEnemy1.hide();
//-------------------------------------------------------------------------------------------
// Normal Weapon Sprite
//-------------------------------------------------------------------------------------------
sNormal = new Sprite();
sNormal.addAnimation('shot.gif');
sNormal.velocity.set(10,0);
sNormal.mass = 0;
sNormal.disableCollisionResponse = true;
sNormal.hide();
sNormal.onUpdate = s.onUpdate;
sNormal.damage = 1;
sNormal.life = 1;
sNormal.setDeathAnimation('hit1.gif','hit2.gif','hit3.gif','hit4.gif');
//-------------------------------------------------------------------------------------------
// Bomb Sprite
//-------------------------------------------------------------------------------------------
sBomb = new Sprite();
sBomb.addAnimation('mine.gif');
sBomb.velocity.set(-1,0);
sBomb.force.set(0,1);
sBomb.mass = 1;
sBomb.damage = 5;
sBomb.disableCollisionResponse = true;
sBomb.hide();
sBomb.life = 1;
sBomb.setDeathAnimation('hit1.gif','hit2.gif','hit3.gif','hit4.gif');
//-------------------------------------------------------------------------------------------
// Turbo Weapon Sprite
//-------------------------------------------------------------------------------------------
sTurbo = new Sprite();
sTurbo.addAnimation('turbo.gif');
sTurbo.velocity.set(20,0);
sTurbo.mass = 0;
sTurbo.disableCollisionResponse = true;
sTurbo.hide();
sTurbo.onUpdate = s.onUpdate;
sTurbo.damage = 1;
sTurbo.life = 1;
sTurbo.setDeathAnimation('hit1.gif','hit2.gif','hit3.gif','hit4.gif');
//-------------------------------------------------------------------------------------------
// Power Weapon Sprite
//-------------------------------------------------------------------------------------------
sPower = new Sprite();
sPower.addAnimation('power.gif');
sPower.velocity.set(8,0);
sPower.mass = 0;
sPower.disableCollisionResponse = true;
sPower.hide();
sPower.onUpdate = s.onUpdate;
sPower.damage = 1;
sPower.setDeathAnimation('hit1.gif','hit2.gif','hit3.gif','hit4.gif');
sPower.life = 50;
//-------------------------------------------------------------------------------------------
// Weapons
//-------------------------------------------------------------------------------------------
normal = new Weapon(sNormal,'shot.gif');
normal.delay = 500;
normal.offset.set(8,10);
bomb = new Weapon(sBomb,'mine.gif');
bomb.delay = 1000;
bomb.offset.set(-20,30);
turbo = new Weapon(sTurbo,'turbo.gif');
turbo.offset.set(8,10);
turbo.delay = 33;
power = new Weapon(sPower,'power.gif');
power.offset.set(8,10);
power.heat *= 2;
power.delay = 750;
//-------------------------------------------------------------------------------------------
// Actions
//-------------------------------------------------------------------------------------------
Game.enemies1 = Game.addTimeAction(20);
Game.enemies2 = Game.addTimeAction(600);
//-------------------------------------------------------------------------------------------
// Game
//-------------------------------------------------------------------------------------------
Game.playerSprite = s;
Game.backgroundColor = '#004FC7';
Game.bgSound = 'undo.mid';
Game.width = 320;
Game.height = 240;
sEnemy1.boundaries = [0,null,Game.height,-32];
Game.playerSprite.boundaries = [52,Game.width-40,Game.height-80,2];
Game.playerSprite.position.set(10,26+(Game.height-80)/2);

Game.enemies1.onTrigger = function (sender) {
	Game.addCaterpillar(sEnemy1,3,new Vector2D(Game.width,Game.height/2),new Vector2D(32,32));
	sender.time += 50;
}
Game.enemies2.onTrigger = function (sender) {
	Game.addCaterpillar(sEnemy1,9,new Vector2D(Game.width,Game.height/2),new Vector2D(32,0));
	sender.time += 600;
}
Game.onPlay = function () {
	face = Util.drawImage('face.gif',2,2,99);

	bg = new Game.addLayer([['clouds.gif','clouds.gif','clouds.gif','clouds.gif'],['clouds.gif','clouds.gif','clouds.gif','clouds.gif']]);
	movbg = Game.addLayer([['clouds.gif','clouds.gif','clouds.gif','clouds.gif'],['clouds.gif','clouds.gif','clouds.gif','clouds.gif']],-40,-40,1);
	movbg.velocity.set(-0.5,0);
	movbg.setWrapLeft();
	fg = Game.addLayer([['clouds.gif','clouds.gif','clouds.gif','clouds.gif'],['clouds.gif','clouds.gif','clouds.gif','clouds.gif']],-80,-80,3);
	fg.velocity.set(-1,0);
	fg.setWrapLeft();
	
	Util.drawText('Life',52,3,99);
	life = new Gauge(90,6,99,Game.width-100,8,1000,'yellow','red',10);
	s.show();
	s.lifeGauge = life;
	Util.drawText('Heat',52,17,99);
	heat = new Gauge(90,20,99,Game.width-100,8,100,'red','black');
	heat.empty();
	Util.drawText('Weapon',52,36,99);
		
	Weapons.add(normal);
	Weapons.add(bomb);
	Weapons.add(turbo);
	Weapons.add(power);
	Weapons.setCurrent(0);
	
}


Game.onUpdate = function () {
	heat.decrement();
}

function selectBox(box) {
	with (box.style) {
		border = '1px solid white';
		backgroundColor = 'black';
	}
}
function unselectBox(box) {
	with (box.style) {
		border = '1px dashed white';
		backgroundColor = '';
	}
}

//-------------------------------------------------------------------------------------------
// Weapons Class
//-------------------------------------------------------------------------------------------
Weapons = {};
Weapons.list = new Array();
Weapons.current = 0;

Weapons.getCurrent = function () {
	return Weapons.list[Weapons.current];
};

Weapons.add = function (w) {
	box = Util.drawBox(120+Weapons.list.length*20,34,99,16,16);
	box.style.background = 'no-repeat center'
	box.style.backgroundImage = 'url('+w.icon+')';
	unselectBox(box);
	w.box = box;
	Weapons.list.push(w);
};

Weapons.setCurrent = function (i) {
	if (i != Weapons.current) {
		unselectBox(Weapons.getCurrent().box);
		if (i >= Weapons.list.length || i < 0) i = 0;
		Weapons.current = i;
		selectBox(Weapons.getCurrent().box);
	}
};

Weapons.next = function () {
	Weapons.setCurrent(Weapons.current+1);
};

//-------------------------------------------------------------------------------------------
// Weapon Class
//-------------------------------------------------------------------------------------------
function Weapon (sprite,icon) {

	var ref = this;
	
	this.box = null;
	this.sprite = sprite;
	this.heat = 10;
	this.delay = 0;
	this.icon = icon;
	this.locked = false;
	this.timer = null;
	this.offset = new Vector2D();
	
	this.shoot = function (x,y,z) {
		if (this.locked) return;
		if (this.delay > 0) {
			this.locked = true;
			this.timer = setTimeout(unlock,this.delay);
		}
		
		x += this.offset.x;
		y += this.offset.y;
		
		var shot = Game.addSprite(this.sprite);
		shot.position.set(x,y);
		shot.zIndex = z;
		shot.boundaries = [52,Game.width,Game.height,0];
		shot.dieOnBoundary = true;
		shot.showDamage = false;
		shot.destroyAfterDeathAnimation = true;
		heat.increment(this.heat);
		if (heat.getValue() >= heat.getMax()) Game.playerSprite.getDamage(1,Game.playerSprite);
	}

	function unlock () {
		ref.locked = false;
	}
}

