SetupWindow(800, 600, "Hello!");

width = 8;
heigth = 8;

level = 
[
	[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
	[1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
	[1, 0, 1, 1, 1, 0, 0, 1, 1, 1],
	[1, 0, 1, 2, 2, 0, 1, 1, 0, 1],	
	[1, 2, 1, 0, 0, 0, 2, 2, 0, 1],	
	[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],	
];

world = new World();

penger = [];
pengeObjekter = [];

for (var y = 0; y < level.length; y++)
{
	pengeObjekter[y] = [];
	for (var x = 0; x < level[y].length; x++)
	{
		if (level[y][x] == 1)
		{
			cube = new WorldObject(world, "data/primitives/cube.dae");
			cube.SetPosition(x*10, 0, y*10);
			
			params = {};
			params.DiffuseMap = "data/textures/metal_crate.png";
			cube.SetParameters(params);
		}
		
		if (level[y][x] == 2)
		{
			penge = new WorldObject(world, "data/primitives/smooth_cube.dae");
			penge.SetPosition(x*10, 0, y*10);
			penge.SetRotation(90, 1, 0, 0);
			penge.SetScale(0.3, 0.3, 0.3);
			penge.SetProgram("data/shaders/envmapping.cg");
			
			params = {};
			params.DiffuseMap = "data/textures/shiny.png";
			penge.SetParameters(params);
			
			penger.push(penge);
			pengeObjekter[y][x] = penge;
		}
	}	
}

kule = new WorldObject(world, "data/primitives/sphere.dae");
params = {};
params.DiffuseMap = "data/textures/smil.jpg";
kule.SetParameters(params);
kule.SetRotation(90, 0, 0, 1);
kule.SetScale(0.3, 0.3, 0.3);

kulefartX = 0;
kulefartY = 0;
kuleposX = 1;
kuleposY = 4;

simTime = 0;

onground = false;

font = new Font("data/fonts/arial.ttf:28");
layer = new Layer();
text = new Text(layer, font, "Poeng: 0", 0, 0, 800, 600);

poeng = 0;

lyd = new AudioStream("data/lul.ogg");
lyd.Play();

while (Update())
{
	text.SetText("Poeng: " + poeng);
	
	oldX = kuleposX;
	oldY = kuleposY;
	
	// Styre med joystick
/*
	kulefartX += JoystickAxis(0, 0) * 20 * GetFrameTime();
	if (JoystickButtonTrigger(0, 0) && onground) kulefartY += 20;
*/
	
	// Styre med piltaster + space
	if (KeyDown(KeyLeftArrow)) kulefartX -= 20*GetFrameTime();
	if (KeyDown(KeyRightArrow)) kulefartX += 20*GetFrameTime();
	if (KeyTrigger(KeySpace) && onground) kulefartY += 20;

	kulefartY -= 12.0 * GetFrameTime();
	
	while (simTime < GetTime())
	{
		kulefartX *= 0.99;
		kulefartY *= 0.99;
		simTime += 0.01;
	}
	
	
	kule.SetPosition(kuleposX*10, 0, kuleposY*10+3);
	

	function test_collision(x, y, celltype)
	{
		x = Math.round(x);
		y = Math.round(y);
		if (x < 0) x = 0;
		if (x > level[0].length-1) x = level[0].length-1;
		if (y < 0) y = 0;
		if (y > level.length-1) y = level.length-1;
		return (level[y][x] == celltype);
	}
		
	onground = true;
	if (test_collision(kuleposX, kuleposY-0.1, 1))
	{
		if (kulefartY < 0) kulefartY *= -0.7;
		onground = true;
	}
	if (test_collision(kuleposX, kuleposY+0.1, 1))
	{
		if (kulefartY > 0) kulefartY *= -0.7;
	}
	if (test_collision(kuleposX+0.10, kuleposY+0.2, 1) 
		|| test_collision(kuleposX-0.10, kuleposY+0.2))
	{
		kulefartX *= -0.7;
	}
	
	kuleposX += kulefartX * GetFrameTime();
	kuleposY += kulefartY * GetFrameTime();
	
	if (test_collision(kuleposX, kuleposY, 2))
	{
		cellX = Math.round(kuleposX);
		cellY = Math.round(kuleposY);
		if (cellX < 0) x = 0;
		if (cellX > level[0].length-1) cellX = level[0].length-1;
		if (cellY < 0) y = 0;
		if (cellY > level.length-1) cellY = level.length-1;
		level[cellY][cellX] = 0;
		for (var i = 0; i < penger.length; i++)
		{
			if (penger[i] == pengeObjekter[cellY][cellX]) penger[i] = undefined;
		}
		pengeObjekter[cellY][cellX].Delete();
		
		poeng += 100;
	}
	
	for (var i = 0; i < penger.length; i++)
	{
		if (penger[i] != undefined) penger[i].SetRotation(GetTime()*40, 1, 0, 1);
	}
	

	Clear(0.4, 0.5, 0.8);
	world.SetCameraPosition(kuleposX*10, -75, 10*kuleposY);
	world.SetCameraTarget(kuleposX*10, 0, kuleposY*10);
	world.Render();
	
	layer.Render();
}