Mediepals/Assets/Scripts/CharacterSelection/InvitationController.cs
Gerard Gascón 102013b228 init
2025-04-24 14:30:07 +02:00

369 lines
10 KiB
C#

using UnityEngine;
using TMPro;
using UnityEngine.SceneManagement;
using System.Collections;
public class InvitationController : MonoBehaviour
{
[SerializeField] ScenesTransitionController sceneTransition;
[SerializeField] GameTutorialControler tutorial;
[Space(20)]
[SerializeField] float showDelay;
[SerializeField] float hideDelay;
[Header("Invitation Panels")]
[SerializeField] GameObject leftPanelBack;
[SerializeField] GameObject leftPanel;
[SerializeField] GameObject rightPanel;
[Header("Menu Panels")]
[SerializeField] GameObject title;
[SerializeField] GameObject mainMenu;
[SerializeField] GameObject pauseMenu;
[SerializeField] GameObject controls;
[SerializeField] GameObject options;
[SerializeField] GameObject credits;
[SerializeField] GameObject confirmationRight;
[SerializeField] GameObject confirmationLeft;
[Space(10)]
[SerializeField] TextMeshProUGUI confirmationQuestionRight;
[SerializeField] TextMeshProUGUI confirmationQuestionLeft;
[Space(10)]
[SerializeField] Animator anim;
[Space(10)]
[SerializeField] bool mainMenuOnBackClick;
[Header("Player Selector Objects (MAIN MENU ONLY)")]
[SerializeField] GameObject characterSelectorController;
[SerializeField] GameObject characters;
[SerializeField] GameObject npcs;
[SerializeField] GameObject panelPhrase;
[SerializeField] GameObject nextCharButton;
[SerializeField] GameObject prevCharButton;
[SerializeField] GameObject playButton;
[SerializeField] GameObject backMenuButton;
[SerializeField] bool pauseIsUp;
[SerializeField] string confirmTrigger;
[SerializeField] GameObject lastShowedPanel;
CursorLockMode cursorLastState;
void Awake()
{
if (GameObject.Find("BetweenScenePass") != null)
StartCoroutine(StartInvitation());
else
{
MenuShowConfig();
options.SetActive(false);
}
}
IEnumerator StartInvitation()
{
yield return new WaitUntil(() => BetweenScenePass.instance != null);
MenuShowConfig();
options.SetActive(false);
}
void MenuShowConfig()
{
if (BetweenScenePass.instance && !BetweenScenePass.instance.GameRestarted && mainMenuOnBackClick)
mainMenuOnBackClick = false;
if (mainMenuOnBackClick)
{
title.SetActive(true);
mainMenu.SetActive(true);
leftPanelBack.SetActive(true);
leftPanel.SetActive(true);
rightPanel.SetActive(true);
lastShowedPanel = mainMenu;
Invoke("HideTitle", 17.5f);
}
else
{
if (SceneManager.GetActiveScene().name == "EndGame")
backMenuButton.SetActive(false);
pauseMenu.SetActive(true);
anim.SetBool("iddle", true);
lastShowedPanel = pauseMenu;
}
if (backMenuButton != null)
{
backMenuButton.SetActive(false);
}
}
void HideTitle()
{
title.SetActive(false);
}
// Update is called once per frame
void Update()
{
if (tutorial == null || tutorial.gameStarted)
{
if (!mainMenuOnBackClick && Input.GetKeyDown(KeyCode.Escape) && (characterSelectorController == null || !characterSelectorController.activeInHierarchy))
{
if (pauseIsUp)
{
Time.timeScale = 1;
anim.SetTrigger("pauseDown");
Invoke("ReactivatePauseMenuAfterGoDown", 0.2f);
if (cursorLastState == CursorLockMode.Locked)
{
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
else
{
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
}
}
else
{
Time.timeScale = 0;
anim.SetTrigger("pauseUp");
cursorLastState = Cursor.lockState;
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
pauseIsUp = !pauseIsUp;
}
}
}
void ReactivatePauseMenuAfterGoDown()
{
pauseMenu.SetActive(true);
controls.SetActive(false);
options.SetActive(false);
credits.SetActive(false);
confirmationRight.SetActive(false);
confirmationLeft.SetActive(false);
mainMenu.SetActive(false);
lastShowedPanel = pauseMenu;
StopAllCoroutines();
}
public void OnPlayClick()
{
mainMenuOnBackClick = false;
anim.SetTrigger("pauseDown");
pauseIsUp = false;
Invoke("ReactivatePauseMenuAfterGoDown", 0.2f);
characterSelectorController.SetActive(true);
characters.SetActive(true);
npcs.transform.position = new Vector3(npcs.transform.position.x, -10, npcs.transform.position.z);
panelPhrase.SetActive(true);
nextCharButton.SetActive(true);
prevCharButton.SetActive(true);
playButton.SetActive(true);
}
public void OnResumeClick()
{
Time.timeScale = 1;
anim.SetTrigger("pauseDown");
pauseIsUp = false;
if (cursorLastState == CursorLockMode.Locked)
{
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
else
{
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
}
}
public void OnControlsClick()
{
StartCoroutine(HidePanel(lastShowedPanel));
StartCoroutine(ShowPanel(controls));
anim.SetTrigger("rotate");
}
public void OnOptionsClick()
{
StartCoroutine(HidePanel(lastShowedPanel));
StartCoroutine(ShowPanel(options));
anim.SetTrigger("rotate");
}
public void OnCreditsClick()
{
StartCoroutine(HidePanel(lastShowedPanel));
StartCoroutine(ShowPanel(credits));
anim.SetTrigger("rotate");
}
public void OnExitClick()
{
confirmationQuestionLeft.text = "¿Estás seguro de que deseas salir?";
confirmTrigger = "EXIT";
StartCoroutine(HidePanel(lastShowedPanel));
StartCoroutine(ShowPanel(confirmationLeft));
anim.SetTrigger("rotate");
}
public void OnExitClickDirectly()
{
Application.Quit();
}
public void OnExitMenuClick()
{
confirmationQuestionLeft.text = "¿Estás seguro de que deseas reiniciar el juego?\r\nTodo el progreso se perderá.";
confirmTrigger = "RESTART";
StartCoroutine(AudioManager.instance.FadeOut("01_jardin", 1));
StartCoroutine(HidePanel(lastShowedPanel));
StartCoroutine(ShowPanel(confirmationLeft));
anim.SetTrigger("rotate");
}
public void OnExitMenuClickDirectly()
{
AudioManager.instance.StopAll();
BetweenScenePass.instance.GameRestarted = true;
BetweenScenePass.instance.RestartData();
sceneTransition.CloseScene("Scenes/Menu");
}
public void OnBacktMenuClick()
{
confirmationQuestionLeft.text = "¿Estás seguro de que deseas volver al jardín?";
confirmTrigger = "BACK_MENU";
StartCoroutine(HidePanel(lastShowedPanel));
StartCoroutine(ShowPanel(confirmationLeft));
anim.SetTrigger("rotate");
}
public void OnBackClick()
{
StartCoroutine(HidePanel(lastShowedPanel));
if (mainMenuOnBackClick)
{
StartCoroutine(ShowPanel(mainMenu));
}
else
{
StartCoroutine(ShowPanel(pauseMenu));
}
anim.SetTrigger("rotate");
}
public void OnConfirmAccept()
{
switch (confirmTrigger)
{
case "EXIT":
Application.Quit();
break;
case "RESTART":
Time.timeScale = 1;
BetweenScenePass.instance.GameRestarted = true;
BetweenScenePass.instance.RestartData();
AudioManager.instance.StopAll();
sceneTransition.CloseScene("Scenes/Menu");
break;
case "BACK_MENU":
Time.timeScale = 1;
BetweenScenePass.instance.GameRestarted = false;
AudioManager.instance.StopAll();
sceneTransition.CloseScene("Scenes/Menu");
break;
case "SELECT_CHAR":
characterSelectorController.GetComponent<CharSelSelectionController>().ConfirmPlay();
anim.SetTrigger("pauseDown");
Invoke("ReactivatePauseMenuAfterGoDown", 0.2f);
break;
}
confirmTrigger = "";
}
public void OnConfirmCancel()
{
switch (confirmTrigger)
{
case "SELECT_CHAR":
nextCharButton.SetActive(true);
prevCharButton.SetActive(true);
playButton.SetActive(true);
anim.SetTrigger("pauseDown");
Invoke("ReactivatePauseMenuAfterGoDown", 0.2f);
break;
default:
OnBackClick();
break;
}
confirmTrigger = "";
}
public void OpensConfirmDirectly(string charName)
{
nextCharButton.SetActive(false);
prevCharButton.SetActive(false);
playButton.SetActive(false);
anim.SetTrigger("pauseUp");
confirmationQuestionRight.text = "Quieres jugar con "+ charName + "? ";
pauseMenu.SetActive(false);
confirmationRight.SetActive(true);
confirmTrigger = "SELECT_CHAR";
}
IEnumerator ShowPanel(GameObject panel)
{
yield return new WaitForSecondsRealtime(showDelay);
panel.SetActive(true);
lastShowedPanel = panel;
}
IEnumerator HidePanel(GameObject panel)
{
yield return new WaitForSecondsRealtime(hideDelay);
panel.SetActive(false);
}
}