UnityGameProjectsCode / Rise2Point0Game / Managers / GUIManager.cs
GUIManager.cs
Raw
using Cinemachine;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Rendering.Universal;
using UnityEngine.UI;

public static class GUIManager
{
    private static GameObject[] uiObjects = new GameObject[100];
    private static LineRenderer lineR;
    private static InputManager inputMgr;
    private static bool tutCanvasEnabled = true;
    private static bool scoreTextEnabled = true;
    private static bool dropDownsOpen = false;
    private static bool usernameFieldInUse = false;
    private static bool gameplayIconsDisabled = false;
    private static bool demoMode;

    private static ParticleSystem activeScoreParticles;
    private static ParticleSystem activeCoinParticles;

    public static void SetReferences()
    {
        lineR = GameObject.Find("Drag Line").GetComponent<LineRenderer>();
        uiObjects[0] = GameObject.Find("Base Background");
        uiObjects[1] = GameObject.Find("GamePlay Canvas");
        uiObjects[2] = GameObject.Find("Unlocks Canvas");
        uiObjects[3] = GameObject.Find("Tutorial Canvas");
        uiObjects[4] = GameObject.Find("Pause Canvas");//
        uiObjects[5] = GameObject.Find("Death Canvas");
        uiObjects[6] = GameObject.Find("Music Canvas");
        uiObjects[7] = GameObject.Find("Main Menu Canvas");
        uiObjects[8] = GameObject.Find("Score Value Text");
        uiObjects[9] = GameObject.Find("Death Score Values List");
        uiObjects[10] = GameObject.Find("Mute Image");
        uiObjects[11] = GameObject.Find("Song Title Text");
        uiObjects[12] = GameObject.Find("Main Camera");
        uiObjects[13] = GameObject.Find("ScoreBoard Canvas");//
        uiObjects[14] = GameObject.Find("Scoreboard Content");
        uiObjects[15] = GameObject.Find("Unlock Menu Button");
        uiObjects[16] = GameObject.Find("Options Canvas");//
        uiObjects[17] = GameObject.Find("Force Cooldown Circle");
        uiObjects[18] = GameObject.Find("Score Increase Particles");
        uiObjects[19] = GameObject.Find("Animated Score Text");
        uiObjects[20] = GameObject.Find("Music Menu Canvas");//
        uiObjects[21] = GameObject.Find("Tutorial Move Input");
        uiObjects[22] = GameObject.Find("Tutorial Pause Input");
        uiObjects[23] = GameObject.Find("Tutorial Zoom Input");
        uiObjects[24] = GameObject.Find("Tutorial Next Song Input");
        uiObjects[25] = GameObject.Find("Tutorial Pause Music Input");
        uiObjects[26] = GameObject.Find("Tutorial Last Song Input");
        uiObjects[27] = GameObject.Find("Unlocks Panel");
        uiObjects[28] = GameObject.Find("Score Boost Text");
        uiObjects[29] = GameObject.Find("Speed Boost Text");
        uiObjects[30] = GameObject.Find("Score Boost Image");
        uiObjects[31] = GameObject.Find("Speed Boost Image");
        uiObjects[32] = GameObject.Find("Particle Score Text");
        uiObjects[33] = GameObject.Find("Coin Score Particles");
        uiObjects[34] = GameObject.Find("Score Increase Particles - Alt");
        uiObjects[35] = GameObject.Find("Coin Score Particles - Alt");
        uiObjects[36] = GameObject.Find("Music Board Content");
        uiObjects[37] = GameObject.Find("Invuln Image");
        uiObjects[38] = GameObject.Find("Invuln Text");
        uiObjects[39] = GameObject.Find("Vignette Effect");
        uiObjects[40] = GameObject.Find("Loop Shuffle Button Backing");
        uiObjects[41] = GameObject.Find("Ach Unlock Text");
        uiObjects[42] = GameObject.Find("Main Menu Canvas Group");
        uiObjects[43] = GameObject.Find("Gameplay Canvas Group");
        uiObjects[44] = GameObject.Find("Username Field");
        uiObjects[45] = GameObject.Find("Pause Restart Button");
        uiObjects[46] = GameObject.Find("Music Control Button");
        uiObjects[47] = GameObject.Find("Score Board Button");
        uiObjects[48] = GameObject.Find("Options Button");
        uiObjects[49] = GameObject.Find("Settings Panel");
        uiObjects[50] = GameObject.Find("Death Restart Button");
        uiObjects[51] = GameObject.Find("Start Game Button");
        uiObjects[52] = GameObject.Find("Gameplay Shuffle Button");
        uiObjects[53] = GameObject.Find("Gameplay Loop Button");
        uiObjects[54] = GameObject.Find("How To Play Background");
        uiObjects[55] = GameObject.Find("Tutorial Cancel Drag Input");
        uiObjects[56] = GameObject.Find("Resolution List BG");
        uiObjects[57] = GameObject.Find("Resolution Menu Button");
        uiObjects[58] = GameObject.Find("Tutorial Move Input HTP"); //how to play menu
        uiObjects[59] = GameObject.Find("Tutorial Pause Input HTP");
        uiObjects[60] = GameObject.Find("Tutorial Zoom Input HTP");
        uiObjects[61] = GameObject.Find("Tutorial Next Song Input HTP");
        uiObjects[62] = GameObject.Find("Tutorial Pause Music Input HTP");
        uiObjects[63] = GameObject.Find("Tutorial Last Song Input HTP");
        uiObjects[64] = GameObject.Find("Tutorial Cancel Drag Input HTP");
        uiObjects[65] = GameObject.Find("Loop Button");
        uiObjects[66] = GameObject.Find("Video/Audio Tab Button");
        uiObjects[67] = GameObject.Find("Clear Scores Button");

        inputMgr = ObjectManager.GetObject(4).GetComponent<InputManager>();

        uiObjects[27].SetActive(false);
        uiObjects[37].SetActive(false);
        uiObjects[49].SetActive(false);
        uiObjects[54].SetActive(false);

        if (uiObjects[56] != null)
            uiObjects[56].SetActive(false);

        activeScoreParticles = uiObjects[18].GetComponent<ParticleSystem>();
        activeCoinParticles = uiObjects[33].GetComponent<ParticleSystem>();
        uiObjects[39].GetComponent<Animator>().Play("Vignette Fade Out");
    }

    public static GameObject GetObject(int objectIndex)
    {
        return uiObjects[objectIndex];
    }

    public static void OnPlayerDeath(int killerID) //0 is a normal obstacle, 1 is the death wall
    {
        uiObjects[5].GetComponent<Canvas>().enabled = true;
        uiObjects[1].GetComponent<Canvas>().enabled = false;
        uiObjects[4].GetComponent<Canvas>().enabled = false;
        uiObjects[2].GetComponent<Canvas>().enabled = false;
        uiObjects[27].SetActive(false);

        EventSystem.current.SetSelectedGameObject(null);
        EventSystem.current.SetSelectedGameObject(uiObjects[50]);

        //if killed by the death wall, set the camera to follow it
        if (killerID == 1)
            uiObjects[12].GetComponent<LevelCameraEffects>().StartFollowingDeathWall();
    }

    public static void OnGameRestart() //reset UI to gameplay config
    {
        uiObjects[15].GetComponent<Button>().interactable = true;
        uiObjects[5].GetComponent<Canvas>().enabled = false;
        uiObjects[1].GetComponent<Canvas>().enabled = true;
        uiObjects[2].GetComponent<Canvas>().enabled = true;
        uiObjects[27].SetActive(false);
        uiObjects[12].GetComponent<LevelCameraEffects>().StopFollowingDeathWall();

        uiObjects[39].GetComponent<Animator>().Play("Vignette Fade In Out Fast");

        EventSystem.current.SetSelectedGameObject(null);

        if (tutCanvasEnabled)
            uiObjects[3].GetComponent<Canvas>().enabled = true;

        uiObjects[4].GetComponent<Canvas>().enabled = false;
        uiObjects[6].GetComponent<Canvas>().enabled = true;

        SetTimeScale(1);
    }

    public static void OnMainMenuReturn()
    {
        uiObjects[15].GetComponent<Button>().interactable = true;
        uiObjects[5].GetComponent<Canvas>().enabled = false;
        uiObjects[1].GetComponent<Canvas>().enabled = false;
        uiObjects[2].GetComponent<Canvas>().enabled = false;

        if (tutCanvasEnabled)
            uiObjects[3].GetComponent<Canvas>().enabled = false;

        uiObjects[4].GetComponent<Canvas>().enabled = false;
        uiObjects[6].GetComponent<Canvas>().enabled = true;
        uiObjects[7].GetComponent<Canvas>().enabled = true;
        uiObjects[27].SetActive(false);
        uiObjects[42].GetComponent<CanvasGroup>().interactable = true;
        uiObjects[43].GetComponent<CanvasGroup>().interactable = false;
        uiObjects[54].SetActive(false);

        EventSystem.current.SetSelectedGameObject(null);
        EventSystem.current.SetSelectedGameObject(uiObjects[51]);

        SetTimeScale(1);

        PlayCameraMenuAnim();
        uiObjects[12].GetComponent<LevelCameraEffects>().StopFollowingDeathWall();
    }

    public static void OnLeavingMainMenu()
    {
        uiObjects[1].GetComponent<Canvas>().enabled = true;
        uiObjects[2].GetComponent<Canvas>().enabled = true;

        if (tutCanvasEnabled)
            uiObjects[3].GetComponent<Canvas>().enabled = true;

        uiObjects[6].GetComponent<Canvas>().enabled = true;
        uiObjects[7].GetComponent<Canvas>().enabled = false;
        uiObjects[13].GetComponent<Canvas>().enabled = false;
        uiObjects[16].GetComponent<Canvas>().enabled = false;
        uiObjects[20].GetComponent<Canvas>().enabled = false;
        uiObjects[42].GetComponent<CanvasGroup>().interactable = false;
        uiObjects[43].GetComponent<CanvasGroup>().interactable = true;
        StopCameraMenuAnim();

        if (tutCanvasEnabled)
            uiObjects[3].GetComponent<Animator>().Play("Tutorial Flash");
    }

    public static void CloseAllSubMenus()
    {
        //need to make sure that no drop downs are in use before closing menus.
        //this way drop downs can be closed before closing their menus.

        //based on what menu was closed, choose a new focus target
        if (!dropDownsOpen)
        {
            if (uiObjects[27].activeSelf)
            {
                EventSystem.current.SetSelectedGameObject(null);
                uiObjects[27].SetActive(false);
            }

            if (uiObjects[20].GetComponent<Canvas>().enabled)
            {
                EventSystem.current.SetSelectedGameObject(null);
                EventSystem.current.SetSelectedGameObject(uiObjects[46]);

                uiObjects[20].GetComponent<Canvas>().enabled = false;
            }


            if (uiObjects[13].GetComponent<Canvas>().enabled)
            {
                EventSystem.current.SetSelectedGameObject(null);
                EventSystem.current.SetSelectedGameObject(uiObjects[47]);

                uiObjects[13].GetComponent<Canvas>().enabled = false;
            }

            if (uiObjects[56] != null)
            {
                if (uiObjects[56].activeSelf)
                {
                    EventSystem.current.SetSelectedGameObject(null);
                    EventSystem.current.SetSelectedGameObject(uiObjects[57]);

                    uiObjects[56].SetActive(false);
                }
                else if (uiObjects[16].GetComponent<Canvas>().enabled)
                {
                    EventSystem.current.SetSelectedGameObject(null);
                    EventSystem.current.SetSelectedGameObject(uiObjects[48]);

                    uiObjects[16].GetComponent<Canvas>().enabled = false;
                }
            }
            else if (uiObjects[16].GetComponent<Canvas>().enabled)
            {
                EventSystem.current.SetSelectedGameObject(null);
                EventSystem.current.SetSelectedGameObject(uiObjects[48]);

                uiObjects[16].GetComponent<Canvas>().enabled = false;
            }

        }
    }

    public static void SetSelectedUIObjectWithMenuContext()
    {
        //sets the currently selected UI object based on the menu screen that is currently being used.
        GameObject targetObject = null;

        if (uiObjects[7].GetComponent<Canvas>().enabled && !uiObjects[13].GetComponent<Canvas>().enabled && !uiObjects[16].GetComponent<Canvas>().enabled
            && !uiObjects[20].GetComponent<Canvas>().enabled)
            targetObject = uiObjects[51];

        if (uiObjects[13].GetComponent<Canvas>().enabled) //scoreboard
            targetObject = uiObjects[67];

        if (uiObjects[16].GetComponent<Canvas>().enabled) //options
            targetObject = uiObjects[66];

        if (uiObjects[20].GetComponent<Canvas>().enabled) //music
            targetObject = uiObjects[65];

        if (uiObjects[2].GetComponent<Canvas>().enabled) //unlocks
            targetObject = uiObjects[15];

        if (uiObjects[4].GetComponent<Canvas>().enabled) //pause
            targetObject = uiObjects[45];

        if (uiObjects[5].GetComponent<Canvas>().enabled) //death
            targetObject = uiObjects[50];

        EventSystem.current.SetSelectedGameObject(null);
        EventSystem.current.SetSelectedGameObject(targetObject);
    }

    public static void SetUsernameFieldUseState(bool state)
    {
        usernameFieldInUse = state;
        inputMgr.SetTypingUsernameState(usernameFieldInUse);
    }

    public static bool GetUsernameFieldUseState()
    {
        return usernameFieldInUse;
    }

    public static void SetDropDownsOpen(bool state)
    {
        dropDownsOpen = state;
    }

    public static void SetDemoModeState(bool state)
    {
        demoMode = state;
    }

    public static void ManuallyInvokeUnlocksButton()
    {
        if (uiObjects[15].GetComponent<Button>().interactable && !usernameFieldInUse && !demoMode)
            uiObjects[15].GetComponent<Button>().onClick.Invoke();
    }

    public static void ManuallyInvokeShuffleButton()
    {
        if (uiObjects[52].GetComponent<Button>().interactable && !usernameFieldInUse)
            uiObjects[52].GetComponent<Button>().onClick.Invoke();
    }

    public static void ManuallyInvokeLoopButton()
    {
        if (uiObjects[53].GetComponent<Button>().interactable && !usernameFieldInUse)
            uiObjects[53].GetComponent<Button>().onClick.Invoke();
    }

    public static void ChangeScoreText(int value)
    {
        uiObjects[8].GetComponent<TextMeshProUGUI>().text = value.ToString();
    }

    public static void ChangeScoreBoostText(int value)
    {
        uiObjects[28].GetComponent<TextMeshProUGUI>().text = "X" + value;
    }

    public static void ChangeSpeedBoostText(int value)
    {
        uiObjects[29].GetComponent<TextMeshProUGUI>().text = "+" + value;
    }

    public static void ChangeInvulnText(int value)
    {
        uiObjects[38].GetComponent<TextMeshProUGUI>().text = value.ToString();
    }

    public static void SetSpeedBoostTextState(bool state)
    {
        if (uiObjects[31] != null && !gameplayIconsDisabled)
            uiObjects[31].SetActive(state);
        else
            uiObjects[31].SetActive(false);
    }

    public static void SetScoreBoostTextState(bool state)
    {
        if (!gameplayIconsDisabled)
            uiObjects[30].SetActive(state);
        else
            uiObjects[30].SetActive(false);
    }

    public static void SetInvulnTextState(bool state)
    {
        if (!gameplayIconsDisabled)
            uiObjects[37].SetActive(state);
        else
            uiObjects[37].SetActive(false);
    }

    public static void SetAchText(string achName)
    {
        uiObjects[41].GetComponent<TextMeshProUGUI>().text = "Achievement Unlocked: " + achName;
    }

    public static void PlayAchievementAnim()
    {
        uiObjects[41].GetComponent<Animator>().Play("Achievement Flash");
    }

    public static bool GetPauseCanvasState()
    {
        return uiObjects[4].GetComponent<Canvas>().enabled;
    }

    public static bool GetMainMenuCanvasState()
    {
        return uiObjects[7].GetComponent<Canvas>().enabled;
    }

    public static bool GetDeathCanvasState()
    {
        return uiObjects[5].GetComponent<Canvas>().enabled;
    }

    public static bool GetUnlocksPanelState()
    {
        return uiObjects[27].activeSelf;
    }

    public static void OpenPauseCanvas()
    {
        if (!uiObjects[4].GetComponent<Canvas>().enabled)
        {
            uiObjects[4].GetComponent<Canvas>().enabled = true;
            uiObjects[15].GetComponent<Button>().interactable = false;
            uiObjects[27].SetActive(false);
            EventSystem.current.SetSelectedGameObject(null);
            EventSystem.current.SetSelectedGameObject(uiObjects[45]);
        }
    }

    public static void ClosePauseCanvas()
    {
        if (uiObjects[4].GetComponent<Canvas>().enabled)
        {
            uiObjects[49].SetActive(false);
            uiObjects[54].SetActive(false);
            uiObjects[4].GetComponent<Canvas>().enabled = false;
            uiObjects[15].GetComponent<Button>().interactable = true;
            EventSystem.current.SetSelectedGameObject(null);
        }
    }

    public static void SetTimeScale(int scale)
    {
        Time.timeScale = scale;
    }

    public static void PlayCameraMenuAnim()
    {
        uiObjects[12].GetComponent<Animator>().enabled = true;
        uiObjects[12].GetComponent<Animator>().Play("Main Menu Camera Scroll", 0, 0);
    }

    public static void StopCameraMenuAnim()
    {
        uiObjects[12].GetComponent<Animator>().enabled = false;
        uiObjects[12].GetComponent<CinemachineVirtualCamera>().Follow = ObjectManager.GetObject(0).transform;
        uiObjects[12].GetComponent<CinemachineVirtualCamera>().m_Lens.OrthographicSize = 7;
    }

    public static void FollowDeathWall()
    {
        uiObjects[12].GetComponent<LevelCameraEffects>().StartFollowingDeathWall();
    }

    public static void SetCameraPostProcessingState(bool newState)
    {
        uiObjects[12].GetComponent<Camera>().GetUniversalAdditionalCameraData().renderPostProcessing = newState;
    }

    public static void SetCooldownCircleValue(float newValue, float forceWaitTime)
    {
        if (uiObjects[17].activeSelf)
        {
            float lerpedValue = Mathf.InverseLerp(0, forceWaitTime, newValue);

            Color currentColor = uiObjects[17].GetComponent<Image>().color;

            uiObjects[17].GetComponent<Image>().color = new Color(0, lerpedValue, 0, currentColor.a);
            uiObjects[17].GetComponent<Image>().fillAmount = lerpedValue;
        }
    }

    public static void FadeOutCooldownCircle()
    {
        if (uiObjects[17].activeSelf)
            uiObjects[17].GetComponent<Animator>().Play("Force Circle Fade Out");
    }

    public static void FadeInCooldownCircle()
    {
        if (uiObjects[17].activeSelf)
            uiObjects[17].GetComponent<Animator>().Play("Force Circle Fade In");
    }

    public static void SetCooldownCircleState(bool newState)
    {
        uiObjects[17].SetActive(newState);
    }

    public static void SetGameplayIconsState(bool newState)
    {
        gameplayIconsDisabled = newState;

        SetScoreBoostTextState(gameplayIconsDisabled);
        SetSpeedBoostTextState(gameplayIconsDisabled);
        SetInvulnTextState(gameplayIconsDisabled);
    }

    public static void SetTutorialCanvasState(bool newState)
    {
        tutCanvasEnabled = newState;
    }

    public static void SetTutorialControlsTexts(string pauseText, string zoomText, string nextText, string mPauseText, string lastText, bool controllerInUse)
    {
        if (controllerInUse)
        {
            uiObjects[21].GetComponent<TextMeshProUGUI>().text = inputMgr.GetBindingString(8, true);
            uiObjects[58].GetComponent<TextMeshProUGUI>().text = inputMgr.GetBindingString(8, true);
            uiObjects[55].GetComponent<TextMeshProUGUI>().text = "N/A";
            uiObjects[64].GetComponent<TextMeshProUGUI>().text = "N/A";
        }
        else
        {
            uiObjects[21].GetComponent<TextMeshProUGUI>().text = "Left Mouse";
            uiObjects[55].GetComponent<TextMeshProUGUI>().text = "Right Mouse";
            uiObjects[58].GetComponent<TextMeshProUGUI>().text = "Left Mouse";
            uiObjects[64].GetComponent<TextMeshProUGUI>().text = "Right Mouse";
        }


        uiObjects[22].GetComponent<TextMeshProUGUI>().text = pauseText;
        uiObjects[23].GetComponent<TextMeshProUGUI>().text = zoomText;
        uiObjects[24].GetComponent<TextMeshProUGUI>().text = nextText;
        uiObjects[25].GetComponent<TextMeshProUGUI>().text = mPauseText;
        uiObjects[26].GetComponent<TextMeshProUGUI>().text = lastText;

        uiObjects[59].GetComponent<TextMeshProUGUI>().text = pauseText;
        uiObjects[60].GetComponent<TextMeshProUGUI>().text = zoomText;
        uiObjects[61].GetComponent<TextMeshProUGUI>().text = nextText;
        uiObjects[62].GetComponent<TextMeshProUGUI>().text = mPauseText;
        uiObjects[63].GetComponent<TextMeshProUGUI>().text = lastText;
    }

    public static void SetScoreTextState(bool newState)
    {
        uiObjects[8].SetActive(newState);
        uiObjects[18].SetActive(newState);
        uiObjects[19].SetActive(newState);
        scoreTextEnabled = newState;
    }

    public static void SetLoopShuffleButtonsState(bool newState)
    {
        uiObjects[40].SetActive(newState);
    }

    public static void SetScoreParticlesForFullView()
    {
        uiObjects[18].transform.localPosition = new Vector3(24.5f, 12.5f, 0.5f);
        uiObjects[18].transform.localScale += new Vector3(2, 2, 0);
        uiObjects[33].transform.localPosition = new Vector3(24.5f, 12.5f, 0.5f);
        uiObjects[33].transform.localScale += new Vector3(2, 2, 0);
        uiObjects[34].transform.localPosition = new Vector3(24.5f, 12.5f, 0.5f);
        uiObjects[34].transform.localScale += new Vector3(2, 2, 0);
        uiObjects[35].transform.localPosition = new Vector3(24.5f, 12.5f, 0.5f);
        uiObjects[35].transform.localScale += new Vector3(2, 2, 0);
    }

    public static void SetScoreParticlesForNormalView()
    {
        uiObjects[18].transform.localPosition = new Vector3(11.75f, 6.2f, 0.5f);
        uiObjects[18].transform.localScale -= new Vector3(2, 2, 0);
        uiObjects[33].transform.localPosition = new Vector3(11.75f, 6.2f, 0.5f);
        uiObjects[33].transform.localScale -= new Vector3(2, 2, 0);
        uiObjects[34].transform.localPosition = new Vector3(11.75f, 6.2f, 0.5f);
        uiObjects[34].transform.localScale -= new Vector3(2, 2, 0);
        uiObjects[35].transform.localPosition = new Vector3(11.75f, 6.2f, 0.5f);
        uiObjects[35].transform.localScale -= new Vector3(2, 2, 0);
    }

    public static void SetNewScoreParticleSystem(int newSystemID)
    {
        if (newSystemID == 0)
        {
            activeScoreParticles = uiObjects[18].GetComponent<ParticleSystem>();
            activeCoinParticles = uiObjects[33].GetComponent<ParticleSystem>();
        }
        else if (newSystemID == 1)
        {
            activeScoreParticles = uiObjects[34].GetComponent<ParticleSystem>();
            activeCoinParticles = uiObjects[35].GetComponent<ParticleSystem>();
        }

    }

    public static void ActivateScoreBurstEffect(int scoreValue, int scoreIncrease, int systemToUse)
    {
        if (scoreTextEnabled)
        {
            uiObjects[19].GetComponent<TextMeshProUGUI>().text = scoreValue.ToString();

            uiObjects[19].GetComponent<Animator>().Play("Score Burst", 0, 0);

            //change the canvas text to match the score increase
            uiObjects[32].GetComponent<TextMeshProUGUI>().text = "+ " + scoreIncrease;


            switch (systemToUse)
            {
                default:
                    break;

                case 0:
                    activeScoreParticles.Play();
                    break;

                case 1:
                    activeCoinParticles.Play();
                    break;
            }

        }
    }
}