using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class GameManager : MonoBehaviour { private Database database; public Texture healthTex; public Texture healthTexBack; public GameObject playerIcon; public GameObject player; public ScreenFade fade; public GameObject databaseTemplate; public int statCost; private bool isPlayerDead; private float playerHealth; private int UpgradePoints; private int CashPoints; private bool menuOpen; private string currentToolName; private bool canStatChagne; private float playerSpeed; private float playerDamage; private float playerAttackSpeed; private float playerJump; private float playerMaxHealth; private float playerDefence; void Awake () { if (!GameObject.FindGameObjectWithTag ("Database")) { GameObject data = Instantiate (databaseTemplate); database = data.GetComponent (); } } // Use this for initialization void Start () { canStatChagne = true; fade = GameObject.FindGameObjectWithTag ("FadeEffect").GetComponent(); database = GameObject.FindGameObjectWithTag ("Database").GetComponent (); CashPoints = database.GetCash (); UpgradePoints = database.GetUpgradePoints (); if (fade) { fade.FadeFromBlack (); } isPlayerDead = false; if (SceneManager.GetActiveScene ().name == "LevelSelect") { foreach (GameObject go in GameObject.FindGameObjectsWithTag("LevelIcon")) { if (go.GetComponent ().GetLevelNum () == 1) { Instantiate (playerIcon, go.transform.position, go.transform.rotation); } } } else { FirstSpawn (); } } // Update is called once per frame void Update () { if (!database) { database = GameObject.FindGameObjectWithTag ("Database").GetComponent (); } database.GetPlayerStats (ref playerSpeed, ref playerDamage, ref playerAttackSpeed, ref playerJump, ref playerMaxHealth, ref playerDefence); if (Input.GetKeyDown (KeyCode.I)) { menuOpen = !menuOpen; PlayerController player = GameObject.FindGameObjectWithTag ("Player").GetComponent (); if (player) { player.SetEnableControl (!menuOpen); } } } void OnGUI() { if (menuOpen) { float nameScreenInterval = (Screen.height / 7.0f) - 10.0f; float valueScreenInterval = nameScreenInterval / 2; GUI.Box (new Rect (10, 50, 20, 20), CashPoints.ToString ()); GUI.Box (new Rect (10, 80, 20, 20), UpgradePoints.ToString ()); GUI.Box (new Rect (100, nameScreenInterval * 1, 100, 20), "Speed"); GUI.Box (new Rect (100, nameScreenInterval * 2, 100, 20), "Damage"); GUI.Box (new Rect (100, nameScreenInterval * 3, 100, 20), "Attack Speed"); GUI.Box (new Rect (100, nameScreenInterval * 4, 100, 20), "Jump"); GUI.Box (new Rect (100, nameScreenInterval * 5, 100, 20), "Health"); GUI.Box (new Rect (100, nameScreenInterval * 6, 100, 20), "Defence"); GUI.Box (new Rect (130, nameScreenInterval * 1 + valueScreenInterval, 100, 20), playerSpeed.ToString("F2")); GUI.Box (new Rect (130, nameScreenInterval * 2 + valueScreenInterval, 100, 20), playerDamage.ToString("F2")); GUI.Box (new Rect (130, nameScreenInterval * 3 + valueScreenInterval, 100, 20), playerAttackSpeed.ToString("F2")); GUI.Box (new Rect (130, nameScreenInterval * 4 + valueScreenInterval, 100, 20), playerJump.ToString("F2")); GUI.Box (new Rect (130, nameScreenInterval * 5 + valueScreenInterval, 100, 20), playerMaxHealth.ToString("F2")); GUI.Box (new Rect (130, nameScreenInterval * 6 + valueScreenInterval, 100, 20), playerDefence.ToString("F2")); for (int i = 1; i < 7; i++) { Rect rect = new Rect (80, nameScreenInterval * i + valueScreenInterval, 20, 20); Rect rect2 = new Rect (260, nameScreenInterval * i + valueScreenInterval, 20, 20); if (canStatChagne && rect.Contains (new Vector2 (Input.mousePosition.x, Screen.height - Input.mousePosition.y)) && Input.GetMouseButton (0)) { AppendStat (i, -0.01f); canStatChagne = false; StartCoroutine (StatChangeTimer ()); } GUI.DrawTexture (rect, healthTex); if (canStatChagne && rect2.Contains (new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y)) && Input.GetMouseButton (0)) { AppendStat (i, 0.01f); canStatChagne = false; StartCoroutine (StatChangeTimer ()); } GUI.DrawTexture (rect2, healthTex); } } else { if (playerHealth > 0) { float healthWidth = 3.0f * ((playerHealth / 1000.0f) * 100.0f); float healthMaxWidth = 3.0f * ((800.0f / 1000.0f) * 100.0f); /////////////// get max health GUI.DrawTexture (new Rect (Screen.width / 2.0f - healthMaxWidth / 2.0f, 10, healthMaxWidth, 10), healthTexBack); GUI.DrawTexture (new Rect (Screen.width / 2.0f - healthWidth / 2.0f, 10, healthWidth, 10), healthTex); } GUI.Box (new Rect (10, 120, 80, 20), currentToolName); if (SceneManager.GetActiveScene ().name == "LevelSelect") { GUI.Box (new Rect (10, 50, 20, 20), database.GetCash().ToString ()); GUI.Box (new Rect (10, 80, 20, 20), database.GetUpgradePoints().ToString ()); } else { GUI.Box (new Rect (10, 50, 20, 20), CashPoints.ToString ()); GUI.Box (new Rect (10, 80, 20, 20), UpgradePoints.ToString ()); } } } public void SetDatabase(Database newDatabase) { if (GameObject.FindGameObjectWithTag ("Database")) { //Destroy(GameObject.FindGameObjectWithTag("Database").gameObject); Debug.Log(newDatabase.GetCash()); } } void AppendStat(int num, float amountToAdd) { if (amountToAdd < 0.0f || (amountToAdd > 0.0f && CashPoints > 0) && CashPoints - statCost >= 0.0f) { bool appended = false; if (num == 1) { appended = database.AppendSpeed (amountToAdd); } else if (num == 2) { appended = database.AppendDamage (amountToAdd); } else if (num == 3) { appended = database.AppendAttackSpeed (amountToAdd); } else if (num == 4) { appended = database.AppendJump (amountToAdd); } else if (num == 5) { appended = database.AppendMaxHealth (amountToAdd); } else if (num == 6) { appended = database.AppendDefence (amountToAdd); } if (appended) { if (amountToAdd > 0.0f) { AddCash (-statCost); } else { AddCash (statCost); } } } } public void SaveDatabaseData() { database.SaveDatabase(); } public void LoadDatabaseData() { database.LoadDatabase(SaveLoad.Load()); SceneManager.LoadScene ("LevelSelect"); } void SavePointsToDatabase() { //database.AddCash (levelCashPoints); //database.AddUpgradePoint (levelUpgradePoints); } public void PlayerDead() { isPlayerDead = true; fade.FadeToBlack (); StartCoroutine (PlayerSpawnTimer()); } public void SetToolName(string newToolName) { currentToolName = newToolName; } public void SetPlayerHealth(float newHealth) { playerHealth = newHealth; } public void AddCash(int cashToAdd) { CashPoints += cashToAdd; database.AddCash (cashToAdd); } public void AddUpgradePoints(int upgradePointsToAdd) { UpgradePoints += upgradePointsToAdd; database.AddUpgradePoint (upgradePointsToAdd); } public void FinishLevel() { fade.FadeToBlack (); GameObject.FindGameObjectWithTag ("Player").GetComponent ().SetEnableControl (false); SavePointsToDatabase (); StartCoroutine (TransitionTimer ()); } void FirstSpawn() { foreach (GameObject go in GameObject.FindGameObjectsWithTag("Checkpoint")) { SpawnPoint spawn = go.GetComponent (); if (spawn) { if (spawn.GetIsTeleporter() && spawn.GetTeleporterNumber() == database.GetCurrentLevel()) { go.GetComponent ().SpawnPlayer (); break; } } } } void SpawnPlayer() { foreach (GameObject go in GameObject.FindGameObjectsWithTag("Checkpoint")) { SpawnPoint spawn = go.GetComponent (); if (spawn) { if (spawn.GetIsActive()) { go.GetComponent ().SpawnPlayer (); break; } } } } IEnumerator StatChangeTimer() { yield return new WaitForSeconds (0.1f); canStatChagne = true; } IEnumerator PlayerSpawnTimer() { yield return new WaitForSeconds (2.0f); fade.FadeFromBlack (); SpawnPlayer (); } IEnumerator TransitionTimer() { yield return new WaitForSeconds (2.5f); SceneManager.LoadScene ("LevelSelect"); } }