using UnityEngine; using UnityEngine.UI; public class ScreenManager : MonoBehaviour { public static string LOCK_ID = "ScreenManager"; public GenericPlayerManager playerManager; public RandomAnimations randomAnimations; public GameObject infoScreen; public GameObject translateScreen; public GameObject dictScreen; public GameObject tutorialScreen; public GameObject makersScreen; public SwitchImageAttribute textButtonImage; public SwitchImageAttribute dictButtonImage; public SwitchImageAttribute infoButtonImage; public GameObject loadingSnippet; public GameObject connectionErrorDialog; public GameObject pauseMenu; public GameObject repeatLayer; public BoxCollider avatarCollider; private bool exit = false; public void Update() { if (Input.GetKeyDown(KeyCode.Escape)) { if (infoScreen.activeSelf) { infoScreen.SetActive(false); infoButtonImage.switchAttribute(false); } else if (translateScreen.activeSelf) { translateScreen.SetActive(false); textButtonImage.switchAttribute(false); } else if (dictScreen.activeSelf) { dictScreen.SetActive(false); dictButtonImage.switchAttribute(false); } else if (tutorialScreen.activeSelf) { tutorialScreen.SetActive(false); } else { if (exit) Application.Quit(); exit = true; } } } public bool hasActiveScreen() { return this.infoScreen.activeSelf || this.translateScreen.activeSelf || this.dictScreen.activeSelf || this.tutorialScreen.activeSelf || this.makersScreen.activeSelf; } public void hideScreen() { setAvatarColliderState(true); randomAnimations.unlockFor(LOCK_ID); if (infoScreen.activeSelf) { infoScreen.SetActive(false); infoButtonImage.switchAttribute(false); } if (translateScreen.activeSelf) { translateScreen.SetActive(false); textButtonImage.switchAttribute(false); } if (dictScreen.activeSelf) { dictScreen.SetActive(false); dictButtonImage.switchAttribute(false); } if (tutorialScreen.activeSelf) { tutorialScreen.SetActive(false); } if (makersScreen.activeSelf) { makersScreen.SetActive(false); } } public void switchScreen(GameObject screen) { bool active = screen.activeSelf; hideScreen(); if (active) return; screen.SetActive(true); if (playerManager.isPlayingIntervalAnimation()) playerManager.stopAll(); else if (playerManager.isPlaying()) { playerManager.setPauseState(true); setPauseMenuState(true); } setAvatarColliderState(false); randomAnimations.lockFor(LOCK_ID); if (screen == infoScreen) infoButtonImage.switchAttribute(true); if (screen == translateScreen) textButtonImage.switchAttribute(true); if (screen == dictScreen) dictButtonImage.switchAttribute(true); exit = false; } public void switchScreen(string name) { switchScreen(getScreenByName(name)); } public GameObject getScreenByName(string name) { switch (name) { case "translate": return this.translateScreen; case "dict": return this.dictScreen; case "info": return this.infoScreen; case "tutorial": return this.tutorialScreen; case "makers": return this.makersScreen; } return null; } public void setPauseMenuState(bool active) { if (this.pauseMenu.activeSelf != active) this.pauseMenu.SetActive(active); } public void setLoadingSnippetState(bool active) { this.loadingSnippet.SetActive(active); if (active && this.pauseMenu.activeSelf) this.pauseMenu.SetActive(false); } public void showConnectionErrorDialog() { this.connectionErrorDialog.SetActive(true); } public void setAvatarColliderState(bool active) { this.avatarCollider.enabled = active; } public void setRepeatLayerState(bool active) { this.repeatLayer.SetActive(active); } }