using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

/* TO DO LIST 
* Respawn								- 100% - DONE!
* Checkpoint 							- 100% - DONE!
* "ześlizg" gracza po ścianie			- 100% - DONE!
* Particle System (Spawn / Checkpoint)	- 100% - DONE!
* Particle System (Finish)				- 100% - DONE!
* Praca kamery 							- 25%
* Licznik czasu rundy 					- 100% - DONE!
* Finish screen							- 0% 
* Next level 							- 100% - DONE!
* "Fancy" grafika
*/

public class LevelControler : MonoBehaviour {

	public float respawnDelay; 						// Zmienna do opóźnienia odrodzenia

	public GameObject deathParticle;				// Zmienna zawierająca prefabrykat efektów cząsteczkowych śmierci
	public GameObject checkpointParticle;			// Zmienna zawierająca prefabrykat efektów cząsteczkowych przy dojściu do checkpointu
	public GameObject finishParticle;				// Zmienna zawierająca prefabrykat efektów cząsteczkowych finiszu 

	public GameObject currentCheckpoint;			// Zmienna zawierająca aktualny aktywny checkpoint
	public bool isRunning = false;
	public bool isFinished = false;
	public int lvl;									// Zmienna przechowująca index aktualnego lvl

	private new CameraControler camera;
	private PlayerControler player;

	// Use this for initialization
	void Start () {
		isRunning = true;
		isFinished = false;

		player = FindObjectOfType<PlayerControler> ();
		camera = FindObjectOfType<CameraControler> ();
	}
	
	// Update is called once per frame
	void Update () {
	}

	public IEnumerator RespawnPlayerCo(){													// Funkcja odpowiedzialna za Respawn
		Instantiate (deathParticle,player.transform.position, player.transform.rotation);	// Skopiowanie prefabrykatu na scenę w miejsce gdzie jest gracz
		player.enabled = false;																// Wyłączenie możliwości ruchu graczem po śmierci
		player.GetComponent<Renderer> ().enabled = false;									// Wyłączenie 'Renderera' gracza

		camera.isFollowing = false;															// Wyłączenie podążania kamery

		yield return new WaitForSeconds(respawnDelay);										// Odczekanie na dalsze działanie 
		player.transform.position = currentCheckpoint.transform.position;					// Cofnięcie gracza do aktywnego checkpoint'u
		player.enabled = true;																// Włączenie gracza
		player.GetComponent<Renderer> ().enabled = true;									// Włączenie 'Renderera' gracza
		camera.isFollowing = true;															// Włączenie podążania kamery
	}

	public IEnumerator FinishedLvl(){														// Funkcja odpowiedzialna za koniec poziomu
		isRunning = false;																	// Ustawienie stanu gry na skończoną
		isFinished = true;
		lvl = lvl + 1;																		// Podniesienie wartości lvl, żeby wczytana była kolejna scena

		yield return new WaitForSeconds(respawnDelay);										// Odczekanie na dalsze działanie 
		SceneManager.LoadScene (lvl);														// Wczytanie następnej sceny
	}

	public void RespawnPlayer (){															// Funkcja odpowiedzialna za Respawn z opóźnieniem
		StartCoroutine ("RespawnPlayerCo");													// Wywowałnie 
	}
		
	public void FinishedLevel(){															// Funkcja odpowiedzialna za KoniecLevel'u z opóźnieniem
		StartCoroutine ("FinishedLvl");														// Wywołanie
		isRunning = false;
		isFinished = true;
		}
}
