ScreenManager.cs 5.78 KB
using UnityEngine;
using UnityEngine.UI;
using LAViD.VLibras.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 pauseButtonImage;
	public SwitchImageAttribute dictButtonImage;
	public SwitchImageAttribute infoButtonImage;

	public GameObject loadingSnippet;
	public GameObject connectionErrorDialog;
	public Text connectionErrorText;
	public GameObject pauseMenu;
	public GameObject repeatLayer;

	public GameObject textButton;
	public GameObject pauseButton;

	public BoxCollider avatarCollider;

	public RegionSelector regionSelector;
	public SlidingHidder settingsPanel;
	public Fadder regionPanel;
	public Fadder shadow;

	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 (tutorialScreen.activeSelf)
			{
				makersScreen.SetActive(false);
			}
			else if (regionPanel.isVisible())
			{
				closeRegionPanel(true);
			}
			else if (settingsPanel.isVisible())
			{
				closeSettingsPanel();
			}
			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);
		}
	}

	private void pause()
	{
		playerManager.setPauseState(true);
		setPauseMenuState(true);
	}

	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())
			pause();

		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 openSettingsPanel()
	{
		settingsPanel.Animate(true);
		setPanelOpen(true);

		if (playerManager.isPlaying())
			pause();
	}

	public void openRegionPanel()
	{
		settingsPanel.Animate(false);
		regionPanel.Animate(true);
		setPanelOpen(true);
	}

	public void openInfoScreen()
	{
		closeSettingsPanel();
		switchScreen(infoScreen);
	}

	public void closeSettingsPanel()
	{
		settingsPanel.Animate(false);
		setPanelOpen(false);
	}

	public void closeRegionPanel(bool restoreActiveItem)
	{
		regionPanel.Animate(false);
		setPanelOpen(false);

		if (restoreActiveItem)
			regionSelector.ReselectActiveItem();
	}

	public void onPanelOutClick()
	{
		if (regionPanel.isVisible())
			closeRegionPanel(true);

		else if (settingsPanel.isVisible())
			closeSettingsPanel();

		else setPanelOpen(false);
	}

	private void setPanelOpen(bool open)
	{
		shadow.Animate(open);
		setAvatarColliderState( ! open);
	}

	public void setPauseMenuState(bool active)
	{
		this.pauseMenu.SetActive(active);
		setAvatarColliderState( ! 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 showConnectionErrorDialog(PlayerManager.ERROR_STATUS_MESSAGE msg)//int error_code
	{
		this.connectionErrorDialog.SetActive(true);
		this.connectionErrorText.text = PlayerManager.get_connection_status_message(msg);
	}

	public void setAvatarColliderState(bool active) {
		this.avatarCollider.enabled = active;
	}

	public void setRepeatLayerState(bool active) {
		this.repeatLayer.SetActive(active);
	}

	public void setTranslateButtonActive(bool active)
	{
		this.textButton.SetActive(active);
		this.pauseButton.SetActive( ! active);
	}

	public void changeStates(bool playing, bool paused, bool repeatable)
	{
		setTranslateButtonActive( ! playing);
		setPauseMenuState(playing && paused);
		setRepeatLayerState( ! playing && repeatable);

		this.pauseButtonImage.switchAttribute(playing && paused);
	}

}