UnityGameProjectsCode / AbandondedGame / GameManager.cs
GameManager.cs
Raw
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);
    }
}