/**
 * Rosie The Band Logo Game(v.1.0)
 * by Sam Frederick Collier
 * Copyright (c) 2011 
 * All rights reserved.
 * Resdistrubtion is allowed providing this Banner is kept. 
 */

/*** Game Context ***/
var canvas;
var ctx;
/*** Key Input ***/
var keys =[0,0,0];

/*** Map Logo ***/
var logo=[];
logo[0] =[1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,4,4,4,4,0,1,1,1,1,1,1,1,1,1,1]
logo[1] =[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,3,3,3,3,3,3,0,0,0,4,4,4,4,0,1,1,1,1,1,1,1,1,1,0]
logo[2] =[1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,3,3,3,3,3,3,3,3,3,0,4,4,4,4,0,1,1,1,1,1,1,1,0,0,0]
logo[3] =[1,1,1,1,1,1,1,1,1,1,1,1,0,0,2,2,2,2,2,2,2,2,2,2,0,0,3,3,3,3,3,3,3,3,0,0,0,4,4,4,4,0,1,1,1,1,1,1,0,0,0,0]
logo[4] =[1,1,1,1,1,1,1,1,1,1,1,1,0,2,2,2,2,2,2,2,2,2,2,2,2,0,3,3,3,3,3,3,3,3,3,3,0,4,4,4,4,0,1,1,1,1,1,1,1,0,0,0]
logo[5] =[1,1,1,1,1,1,1,1,1,1,1,1,0,2,2,2,2,2,2,2,2,2,2,2,2,0,3,3,3,3,3,3,3,3,3,3,0,4,4,4,4,0,1,1,1,1,1,1,1,1,0,0]
logo[6] =[1,1,1,1,1,1,1,1,1,1,1,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,3,3,3,3,3,3,3,3,3,3,0,4,4,4,4,0,1,1,1,1,1,1,1,1,0,0]
logo[7] =[1,1,1,1,1,1,1,1,1,1,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,3,3,3,3,3,3,3,3,0,4,4,4,4,0,1,1,1,1,1,1,1,0,0,0]
logo[8] =[1,1,1,1,1,1,1,1,1,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,3,3,3,3,3,3,3,3,3,3,0,4,4,4,4,0,1,1,1,1,1,1,0,0,0,0]
logo[9] =[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,3,3,3,3,3,3,3,3,0,0,4,4,4,4,0,1,1,1,1,1,1,1,0,0,0]
logo[10]=[1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,3,3,3,3,3,3,0,0,0,4,4,4,4,0,1,1,1,1,1,1,1,1,1,0]
logo[11]=[1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,4,4,4,4,0,1,1,1,1,1,1,1,1,1,1]

/*** Character Coordinates ***/
var x = 0;
var y = 0;
var prevX = 0;
var prevY = 0;
var prevX2 = 0;
var prevY2 = 0;

var eBool = 0;

/*** Bullets ***/
var fired = 0;
var shootAni = 0;
var bulletX = 0;
var bulletY = 0;

function engineUpdate()
{
	prevX2 = prevX;
	prevY2 = prevY;
	prevX = x;
	prevY = y;
	checkKeys();
	painter();

}


function checkKeys()
{
	if(keys[0]){ 
	if(x > -10) x = x - 1;
	}
	if(keys[1]){
	if(x < 500)x = x+1;
	}
	if(keys[2]){
	 if(fired == 0){
	 shootAni = 200;
	 bulletX = Math.round((x+10)/10)*10;
	 bulletY = y + 20; 
	 fired = 1;
	}
	}

}

function changeKey(key, flag){

	switch (key){
		case 65: case 37: keys[0]=flag; break; // left
		case 68: case 39: keys[1]=flag; break; // right
			 case 32: keys[2]=flag; break; // space
		case 66: eBool = flag; break;
		case 80: if(eBool)alert("This is an Easter Egg, to Give Me Sam Collier some credit!"); break;
	}
}
document.onkeydown=function(e){changeKey((e||window.event).keyCode, 1);}
document.onkeyup=function(e){changeKey((e||window.event).keyCode, 0);}

function painter()
{
	ctx.clearRect (0,0,600,200);
	ctx.save();
	ctx.translate(40,0);
	 drawMap();
	 drawCharacter();
	ctx.restore();
	

}

function drawMap()
{
	/*** Draw Background ***/
	ctx.fillStyle = 'rgba(0,0,0,1)';
	ctx.fillRect(-40,0,600,200);
	/*** Draw Logo ***/
	ctx.save();	
	ctx.translate(0,50);
	for(var i=0, lenY = logo.length; i<lenY; ++i){
		for(var j=0, lenX = logo[i].length; j<lenX; ++j){
		switch(logo[i][j])
		{
			case -1: ctx.fillStyle = 'rgba(237,0,140,1)'; logo[i][j] += 1;break;
			case -2: ctx.fillStyle = 'rgba(255,255,0,1)'; logo[i][j] += 1;break;
			case -3: ctx.fillStyle = 'rgba(0,255,255,1)'; logo[i][j] += 1;break;
			case -4: ctx.fillStyle = 'rgba(0,255,0,1)';   logo[i][j] += 1;break;
			case 0: ctx.fillStyle = 'rgba(0,0,0,1)';break;
			case 1: ctx.fillStyle = 'rgba(237,0,140,1)';break;
			case 2: ctx.fillStyle = 'rgba(255,255,0,1)';break;
			case 3: ctx.fillStyle = 'rgba(0,255,255,1)';break;
			case 4: ctx.fillStyle = 'rgba(0,255,0,1)';break;
		}
		if(logo[i][j]){
			
			ctx.fillRect(j*10,i*10,10,10);
			}
	}
	}
	ctx.restore();
	
}
function drawCharacter()
{
	/*** Draw Character ***/
	ctx.save();	
		ctx.translate(x,y);
		ctx.fillStyle = 'rgba(255,0,255,1)';
		ctx.fillRect(0,0,20,20);
	ctx.restore();
	/*** Motion Blur ***/
	ctx.save();	
		ctx.translate(x-((x-prevX)*2.5),y-((y-prevY)*2.5));
		ctx.fillStyle = 'rgba(255,0,255,0.5)';
		ctx.fillRect(0,0,20,20);
	ctx.restore();
	ctx.save();	
		ctx.translate(x-((x-prevX2)*2.5),y-((y-prevY2)*2.5));	
		ctx.fillStyle = 'rgba(255,0,255,0.2)';
		ctx.fillRect(0,0,20,20);
	ctx.restore();
	/*** Draw Bullet ***/

	if(shootAni > 0)
	{
	
		
		ctx.save();	
			ctx.translate(0,200-shootAni);	
		switch(shootAni % 8)
		{
			case 0: ctx.fillStyle = 'rgba(255,255,255,1)';break;
			case 2: ctx.fillStyle = 'rgba(237,0,140,1)';break;
			case 4: ctx.fillStyle = 'rgba(255,255,0,1)';break;
			case 6: ctx.fillStyle = 'rgba(0,255,255,1)';break;
		}
			ctx.fillRect(bulletX,bulletY,5,5);
		ctx.restore();
		shootAni = shootAni - 2;
		if(shootAni == 0)fired = 0;
		if(shootAni%10 == 0 && bulletY + (200 - shootAni) >=50 && bulletY + (200 - shootAni) < 170)conflict();
	
	}
}

function conflict()
{
	var bulX = Math.round(bulletX/10);
	var bulY = Math.round((bulletY + (200 - shootAni)-50)/10);
		if(logo[bulY][bulX] != 0)
		{
			logo[bulY][bulX] = -4;
			fired = 0;
			shootAni = 0;
		}	
}

/*** Game Initialisation ***/
window.onload=function(){
	var fps = 60;
	canvas = document.getElementById('game');
	ctx = canvas.getContext('2d');
	setInterval(engineUpdate, 1000/fps);
}
