using Aura2API; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering.PostProcessing; using UnityStandardAssets.Characters.FirstPerson; using UnityStandardAssets.Effects; public class GameManager : MonoBehaviour { private GUIManager guiManager; private DayNightCycle cycle; private SpookManager spookMgr; private SoundManager soundMgr; private GameObject enemyObject; private GameObject playerObject; private GameObject[] spirits; private GameObject dialogueObject; private GameObject lightingObject; private GameObject truck; private GameObject truckFlames; public PostProcessProfile profile; private Vector3 playerStartPos; private Vector3 playerStartRot; private bool gameOver; private bool deatheningInitiated; private void Awake() { ReferenceManager.SetReferences(); guiManager = ReferenceManager.GetGUIManager(); cycle = ReferenceManager.GetCycle(); spookMgr = ReferenceManager.GetSpookManager(); soundMgr = ReferenceManager.GetSoundManager(); enemyObject = ReferenceManager.GetObject(10); enemyObject.SetActive(false); playerObject = ReferenceManager.GetObject(8); playerStartPos = playerObject.transform.position; playerStartRot = playerObject.transform.rotation.eulerAngles; spirits = ReferenceManager.GetSpiritsList(); dialogueObject = ReferenceManager.GetObject(15); lightingObject = ReferenceManager.GetObject(16); truck = ReferenceManager.GetObject(17); truckFlames = truck.GetComponentInChildren<ParticleSystemMultiplier>().gameObject; truckFlames.SetActive(false); for (int i = 0; i < spirits.Length; i++) { spirits[i].SetActive(false); } guiManager.SetReferences(); guiManager.SetupGUIStart(); Debug.Log("Game Manager Awake complete."); } private void Update() { if(!gameOver) { bool mainMenuState = guiManager.GetMainMenuState(); if(!mainMenuState) { if (Input.GetButtonDown("See Objective")) { guiManager.PlayObjectiveTextAnim(); } if (Input.GetButtonDown("See Thoughts")) { guiManager.PlayDialogueTextAnim(); } bool escapeMenuState = guiManager.GetEscapeMenuState(); bool vehicleMenuState = guiManager.GetVehicleMenuState(); if (Input.GetButtonDown("Open Escape Menu") && !escapeMenuState && !vehicleMenuState) { guiManager.OpenEscapeMenu(); SetEnemiesSoundState(false); } else if (Input.GetButtonDown("Open Escape Menu") && escapeMenuState) { guiManager.CloseEscapeMenu(); SetEnemiesSoundState(true); } } float lerpTime = cycle.GetLerpTime(); if (lerpTime >= 0.2f && !spookMgr.GetSoundSpooksState()) { spookMgr.EnableSoundSpooks(); Debug.Log("Sound spooks have been enabled"); } if (lerpTime >= 0.3f && !soundMgr.GetSecondSourcePlayingState()) { soundMgr.EnableSecondSource(); guiManager.SetObjectiveText("Continue to investigate the area or leave by approaching the truck."); guiManager.PlayObjectiveTextAnim(); guiManager.PlayDialogueTextAnim(); Debug.Log("Second sound source has been enabled"); } if (lerpTime >= 0.4f && !spookMgr.GetLightSpooksState()) { spookMgr.EnableLightSpooks(); dialogueObject.SetActive(false); for (int i = 0; i < spirits.Length; i++) { spirits[i].SetActive(true); spirits[i].GetComponent<AudioSource>().volume = 0.1f; } profile.GetSetting<Grain>().intensity.value = 0.2f; Debug.Log("Light and spirit spooks have been enabled. Exploration dialogue has been disabled."); } if (lerpTime >= 0.6f && !soundMgr.GetThirdSourcePlayingState()) { soundMgr.EnableThirdSource(); truck.GetComponentInChildren<AudioSource>().enabled = false; foreach(Flicker light in truck.GetComponentsInChildren<Flicker>()) { light.flicker = true; light.gameObject.GetComponent<AuraLight>().enabled = false; } foreach(Transform light in lightingObject.GetComponentsInChildren<Transform>()) { Flicker flicker = light.gameObject.GetComponent<Flicker>(); if(flicker != null) flicker.flicker = true; } for (int i = 0; i < spirits.Length; i++) { spirits[i].GetComponent<AudioSource>().volume = 0.5f; } profile.GetSetting<Grain>().intensity.value = 0.3f; guiManager.SetDialogueText("I'm not sure I want to stay here anymore..."); guiManager.PlayDialogueTextAnim(); Debug.Log("Third sound source has been enabled. Flickering lights have been enabled. Truck sound has been turned off."); } if(lerpTime >= 0.7f && !soundMgr.GetFourthSourcePlayingState()) { soundMgr.EnableFourthSource(); for (int i = 0; i < spirits.Length; i++) { spirits[i].GetComponent<AudioSource>().volume = 0.7f; } profile.GetSetting<Grain>().intensity.value = 0.4f; Debug.Log("Fourth sound source has been enabled."); } if(lerpTime >= 0.75f && !truckFlames.activeSelf) { truckFlames.SetActive(true); truck.GetComponent<OpenVehicleEscapeMenu>().SetTruckState(false); guiManager.SetDialogueText("Looks like I'm not going anywhere soon."); guiManager.PlayDialogueTextAnim(); guiManager.SetObjectiveText("Survive"); guiManager.PlayObjectiveTextAnim(); profile.GetSetting<Grain>().intensity.value = 0.5f; for (int i = 0; i < spirits.Length; i++) { spirits[i].GetComponent<AudioSource>().volume = 1f; } Debug.Log("Truck has been set on fire and disabled"); } if (lerpTime >= 0.9f && !enemyObject.activeSelf) { enemyObject.SetActive(true); guiManager.SetDialogueText("..."); guiManager.PlayDialogueTextAnim(); Debug.Log("Main enemy has been enabled"); } if(lerpTime >= 0.99f && !deatheningInitiated) { for (int i = 0; i < spirits.Length; i++) { spirits[i].GetComponent<EnemyController>().TargetPlayer(); } enemyObject.GetComponent<EnemyController>().TargetPlayer(); profile.GetSetting<Grain>().intensity.value = 0.9f; Debug.Log("The game has decided that the player must die"); deatheningInitiated = true; } } } public void StartGame() { guiManager.StartGame(); cycle.SetCycleStarted(true); guiManager.SetObjectiveText("Investigate the surrounding buildings."); guiManager.SetDialogueText("This is the place. Time to look around."); } public void QuitGame() { Application.Quit(); } public void OnGameOver() { enemyObject.GetComponent<EnemyController>().SetAudioSourceState(false); playerObject.GetComponent<FirstPersonController>().enabled = false; playerObject.GetComponent<Animator>().enabled = true; playerObject.GetComponent<Animator>().Play("Player Death"); for (int i = 0; i < spirits.Length; i++) { spirits[i].GetComponent<EnemyController>().SetAudioSourceState(false); } Cursor.lockState = CursorLockMode.None; Cursor.visible = true; guiManager.OnGameOver(); soundMgr.OnGameOver(); cycle.SetCycleStarted(false); gameOver = true; } public void OnGameReset() { enemyObject.GetComponent<EnemyController>().SetAudioSourceState(true); enemyObject.GetComponent<EnemyController>().OnGameReset(); enemyObject.SetActive(false); playerObject.GetComponent<FirstPersonController>().enabled = true; playerObject.transform.position = playerStartPos; playerObject.transform.rotation = Quaternion.Euler(playerStartRot); playerObject.GetComponent<Animator>().enabled = false; profile.GetSetting<Grain>().intensity.value = 0.005f; dialogueObject.SetActive(true); foreach (Transform item in dialogueObject.GetComponentsInChildren<Transform>()) { if (item.gameObject.name.Contains("Secondary")) item.gameObject.SetActive(false); else item.gameObject.SetActive(true); } foreach (Transform light in lightingObject.GetComponentsInChildren<Transform>()) { Flicker flicker = light.gameObject.GetComponent<Flicker>(); if(flicker != null) { light.gameObject.GetComponent<Flicker>().flicker = false; light.gameObject.GetComponent<Light>().enabled = false; } } foreach (Flicker light in truck.GetComponentsInChildren<Flicker>()) { light.flicker = false; light.gameObject.GetComponent<Light>().enabled = true; light.gameObject.GetComponent<AuraLight>().enabled = true; } truck.GetComponentInChildren<AudioSource>().enabled = true; truckFlames.SetActive(false); truck.GetComponent<OpenVehicleEscapeMenu>().SetTruckState(true); for (int i = 0; i < spirits.Length; i++) { spirits[i].GetComponent<EnemyController>().SetAudioSourceState(true); spirits[i].GetComponent<EnemyController>().OnGameReset(); spirits[i].GetComponent<AudioSource>().volume = 0.1f; spirits[i].SetActive(false); } guiManager.SetupGUIStart(); guiManager.OnGameReset(); soundMgr.OnGameReset(); cycle.OnGameReset(); spookMgr.OnGameReset(); gameOver = false; Debug.Log("Game Manager Reset Complete"); } public void OnTruckEscape() { playerObject.transform.position = playerStartPos; playerObject.transform.rotation = Quaternion.Euler(playerStartRot); playerObject.GetComponent<FirstPersonController>().enabled = true; playerObject.GetComponent<Animator>().enabled = false; profile.GetSetting<Grain>().intensity.value = 0.005f; float lerpTime = cycle.GetLerpTime(); dialogueObject.SetActive(true); foreach (Transform item in dialogueObject.GetComponentsInChildren<Transform>()) { if (item.gameObject.name.Contains("Secondary")) item.gameObject.SetActive(false); else item.gameObject.SetActive(true); } foreach (Transform light in lightingObject.GetComponentsInChildren<Transform>()) { Flicker flicker = light.gameObject.GetComponent<Flicker>(); if (flicker != null) { light.gameObject.GetComponent<Flicker>().flicker = false; light.gameObject.GetComponent<Light>().enabled = false; } } foreach (Flicker light in truck.GetComponentsInChildren<Flicker>()) { light.flicker = false; light.gameObject.GetComponent<Light>().enabled = true; light.gameObject.GetComponent<AuraLight>().enabled = true; } truck.GetComponentInChildren<AudioSource>().enabled = true; truckFlames.SetActive(false); truck.GetComponent<OpenVehicleEscapeMenu>().SetTruckState(true); if (lerpTime >= 0.4f) { for (int i = 0; i < spirits.Length; i++) { spirits[i].GetComponent<EnemyController>().SetAudioSourceState(true); spirits[i].GetComponent<EnemyController>().OnGameReset(); spirits[i].SetActive(false); } } guiManager.SetupGUIStart(); guiManager.OnGameReset(); soundMgr.OnGameReset(); cycle.OnGameReset(); spookMgr.OnGameReset(); gameOver = false; Time.timeScale = 1f; Debug.Log("Game Manager Truck Escape Complete"); } public bool GetGameOverState() { return gameOver; } public void SetEnemiesSoundState(bool state) { for (int i = 0; i < spirits.Length; i++) { spirits[i].GetComponent<EnemyController>().SetAudioSourceState(state); } enemyObject.GetComponent<EnemyController>().SetAudioSourceState(state); } }