#pragma strict

var target: Transform;

var block: Transform;

var onniParticles: Transform;

var randomMinSize = 1;
var randomMaxSize = 4;
var randomPos = 2;

var gameOn = true;

var dropSpeed = 5;

var gameTime = 20;

var heightLimit = 35;

private var blockArray:Array = [];

private var gameHeight = 10;

var timer:GUIText;

var startButtonTexture : Texture2D;

var startPos:Vector3 = new Vector3(0,35,0);

private var score = 0;

private var gameState = "notStarted";

private var ballsItUp = false;

var startSound:AudioClip;
var endSound:AudioClip;
var music:AudioClip;

function Start () {
		
	
}

function changeGameState (state) {

	gameState = state;
	
	switch (gameState) {
		case "notStarted":
		
			break;	
		case "dropping":
			audio.PlayOneShot(startSound);			
			audio.PlayOneShot(music, 0.8);	
			//GameObject.Find("intro").transform.renderer.enabled = false;
			Destroy(GameObject.Find("intro"));
			createBlock(0);	
			InvokeRepeating("updateGUI",0,1);	
			//Invoke("startGravity",gameTime);
			break;
		case "checkBalance":
			audio.Stop();
			audio.Play();			
			break;
		case "showScore":

			CancelInvoke();
			countScore();
			break;
	}

}

function Update() {

	var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
	var hit : RaycastHit;
	if (Physics.Raycast (ray, hit, 100)) {
		target.transform.position = hit.point;

	}
}

function OnGUI() {
	
	if (gameState == "notStarted") {		
		if (GUI.Button (Rect (400,550,150,120), startButtonTexture)) {
			changeGameState("dropping");
		}
	}
	if (gameState == "showScore") {		
		if (GUI.Button (Rect (370,600,100,60), "New game?")) {
			audio.PlayOneShot(endSound);	
			Application.LoadLevel (Application.loadedLevelName);
		}
	}
			
}

function updateGUI() {
	
	gameTime--;
	
	//tsekkaamman palanssia
	if (gameTime < 1 && gameState == "dropping") {
		//Debug.Log(gameTime);
		changeGameState("checkBalance");		
	}
	
	if (gameTime > 10) {
		timer.text = "Pile boxes on the platform!";		
	} else {
		
		if (gameTime > 0) {
			timer.text = "Only " + (gameTime + 1) + " seconds left! Keep piling";
		} else {
		
			if (ballsItUp) {
	
				timer.text = "Too high! Boxes must stay in platform for 10 seconds!\n (" +
				-gameTime + " s)";		
			
			} else {
			
		
				timer.text = "Time up! Boxes must stay in platform for 10 seconds!\n (" +
				-gameTime + " s)";
			}
		}	
	}
	

				
	if (gameTime < -10) {		
		changeGameState("showScore");
	}
	
}

function countScore() {
		
	var array = GameObject.FindGameObjectsWithTag("block");
	for(var n= 0; n < array.length; n++) {	
		var b = array[n];
		if (b != null) {
			
			if (b.transform.position.y > 0) {
				score++;
				b.renderer.material.color = Color.green;
				b.transform.Find("Plane").transform.renderer.material.color = Color.green;
				var p = Instantiate(onniParticles, b.transform.position, Quaternion.identity);
				Destroy(p.gameObject,4);	
			} else {
				b.renderer.material.color = Color.red;
				b.transform.Find("Plane").transform.renderer.material.color = Color.red;
			}

		}
	}
	
	var t = "Final score is " + score + "!\n\n";
	/*
	if (score == 0) t= "uh, you just doomed a species, nooo";
	
	if (score > 0 && score < 6) t+= "Try again, you can do better";
	
	if (score > 5 && score < 10) t+= "Life finds way";
	*/
	audio.PlayOneShot(endSound);
	timer.text = t;
		
}

/*
function startGravity() {

	audio.Play();
	gameOn = false;
	changeGameState("checkBalance");

}*/

function createBlock(height:int) {
/*
	if (height > gameHeight) {
		gameHeight = height;
		updateCameraAndSpawn();
	}*/
	
	if (height > heightLimit) {
		//Debug.Log("should not happen");
		gameTime = 0;
		ballsItUp = true;
		changeGameState("checkBalance");		
	}
	
	if (gameState == "dropping") {
		var pos = startPos + Vector3(
			Random.Range(-randomPos,randomPos),
			0,
			Random.Range(-randomPos,randomPos));
	
		var b:Transform = Instantiate(block, pos, Quaternion.identity);
		b.localScale = new Vector3(
			Random.Range(randomMinSize, randomMaxSize),
			Random.Range(randomMinSize, randomMaxSize),
			Random.Range(randomMinSize, randomMaxSize));
			
		b.rigidbody.mass = b.localScale.x * b.localScale.y * b.localScale.z * 10;
		b.rigidbody.velocity = Vector3(0,-dropSpeed,0);
		
	//	blockArray.push(b);
	}
}
/*
function updateCameraAndSpawn() {
	Camera.main.transform.position.y = gameHeight + 26;
	startPos.y = gameHeight + 25;
}*/



