| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- using System;
- using System.Collections;
- using System.Linq;
- using TMPro;
- using UnityEditor;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- using UnityEngine.SocialPlatforms.Impl;
- public class GameManager : MonoBehaviour
- {
- public int GameOverHour;
- public int GameOverMinutes;
- private GameData data;
- private SaveManager saveManager;
- private TimeManager timeManager;
- private MapGenerator mapGenerator;
- private OrbManager orbManager;
- public TMP_Text UI;
- private GameObject player;
- private int score;
- // Start is called once before the first execution of Update after the MonoBehaviour is created
- void Start()
- {
- //Get the player
- player = GameObject.Find("Player");
- if (player == null) return;
- //Get components
- saveManager = GetComponent<SaveManager>();
- timeManager = GetComponent<TimeManager>();
- mapGenerator = GameObject.Find("Map Generator").GetComponent<MapGenerator>();
- orbManager = GetComponent<OrbManager>();
- data = saveManager.LoadGame();
- if (data.Orbs.Length == 0)
- {
- StartCoroutine(orbManager.StartSpawn());
- }
- //reset light settings
- RenderSettings.skybox.SetTexture("_Texture1", timeManager.skyboxNight);
- RenderSettings.skybox.SetTexture("_Texture2", timeManager.skyboxSunrise);
- RenderSettings.skybox.SetFloat("_Blend", 0);
- timeManager.globalLight.color = timeManager.gradientNightToSunrise.Evaluate(0);
- RenderSettings.fogColor = timeManager.globalLight.color;
- if (data != null)
- {
- SetData();
- }
- else
- {
- data = new GameData();
- }
- }
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.F5))
- {
- Save();
- }
- if (Input.GetKeyDown(KeyCode.F9))
- {
- //SceneManager.LoadScene("Game");
- }
- if(timeManager.Hours >= GameOverHour && timeManager.Minutes >= GameOverMinutes)
- {
- OnGameOver();
- }
- }
- void GetData()
- {
- #region PlayerAndOrbs
- data.playerPosition = player.transform.position;
- data.playerScore = score;
- data.Orbs = GetAllOrbs();
- #endregion
- #region DaylightCycle
- data.minutes = timeManager.Minutes;
- data.hours = timeManager.Hours;
- data.skybox = RenderSettings.skybox;
- data.globalLightColor = timeManager.globalLight.color;
- data.globalLightRotation = timeManager.globalLight.transform.rotation;
- #endregion
- #region Stamina
- data.currentStamina = player.GetComponent<Stamina>().GetCurrentStamina();
- data.canSprint = player.GetComponent<Stamina>().GetCanSprint();
- #endregion
- #region MapGeneration
- data.seed = mapGenerator.noiseData.seed;
- #endregion
- }
- void SetData()
- {
- #region PlayerAndOrbs
- if (data.playerPosition != Vector3.zero)
- {
- player.transform.position = data.playerPosition;
- }
- else
- {
- StartCoroutine(SpawnPlayer());
- }
- score = data.playerScore;
- UpdateUI();
- SpawnOrbs();
- #endregion
- #region DaylightCycle
- timeManager.Minutes = data.minutes;
- timeManager.Hours = data.hours;
- if (data.skybox != null)
- RenderSettings.skybox = data.skybox;
- if (data.globalLightColor != null)
- {
- timeManager.globalLight.color = data.globalLightColor;
- RenderSettings.fogColor = data.globalLightColor;
- }
- if (data.globalLightRotation != null)
- timeManager.globalLight.transform.rotation = data.globalLightRotation;
- #endregion
- #region Stamina
- if (data.skybox != null) //because !
- player.GetComponent<Stamina>().Reinit(data.currentStamina, data.canSprint);
- #endregion
- #region MapGeneration
- mapGenerator.noiseData.seed = data.seed;
- #endregion
- }
- IEnumerator SpawnPlayer()
- {
- yield return new WaitForSeconds(3);
- Vector3 rayStart = Vector3.zero + Vector3.up * 300;
- if (Physics.Raycast(rayStart, Vector3.down, out RaycastHit hit, 600f))
- {
- player.transform.position = hit.point + new Vector3(0f, 1f, 0f);
- }
- }
- private void SpawnOrbs()
- {
- for (int i = 0; i < data.Orbs.Length; i++) {
- Instantiate(orbManager.prefab, data.Orbs[i], Quaternion.identity);
- }
- }
- private Vector3[] GetAllOrbs()
- {
- string targetName = "Orb(Clone)";
- var actors = FindObjectsByType<GameObject>(FindObjectsSortMode.None)
- .Where(obj => obj.name == targetName)
- .ToArray();
- Vector3[] orbs = new Vector3[actors.Length];
- for (int i = 0; i < actors.Length; i++)
- {
- orbs[i] = actors[i].transform.position;
- }
- return orbs;
- }
- public void Save()
- {
- GetData();
- saveManager.SaveGame(data);
- }
- public void IncreaseScore()
- {
- score++;
- UpdateUI();
- }
- private void UpdateUI()
- {
- UI.text = score.ToString();
- }
- private void OnGameOver()
- {
- Save();
- Debug.Log("you died");
- }
- }
|