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; } } } }