377 lines
13 KiB
C#
377 lines
13 KiB
C#
using Invector;
|
|
using Invector.vCharacterController;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Sirenix.OdinInspector;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
using UnityEngine.Serialization;
|
|
using PixelCrushers.DialogueSystem;
|
|
using System;
|
|
|
|
namespace Beyond
|
|
{
|
|
public class MainMenuController : MonoBehaviour
|
|
{
|
|
private const float mainMenuSceneFadeTime = 1f;
|
|
|
|
[vEditorToolbar("Input Mapping")]
|
|
public GenericInput openInput = new GenericInput("I", "I", "I");
|
|
|
|
/// <summary>
|
|
/// Dimming of inputs is currently unsuported
|
|
/// </summary>
|
|
[SerializeField]
|
|
private SubmenuElementsContainer inventorySubmenuContainer, knowledgeSubmenuContainer, attributesSubmenuContainer, powersSubmenuContainer, skillsSubmenuContainer,
|
|
questLogSubmenuContainer, mapSubmenuContainer, warningQuitSubmenuContainer;
|
|
|
|
[SerializeField] private SubmenuElementsContainer menuSubmenuContainer, judgementSubmenuContainer, tradeSubmenuContainer;
|
|
private SubmenuElementsContainer currentSubmenuContainer;
|
|
|
|
[SerializeField] private InventoryMenuController inventoryMenuController;
|
|
[SerializeField] private PowersMenuController powersMenuController;
|
|
[SerializeField] private SkillsMenuController skillsMenuController;
|
|
[SerializeField] private AttributesWindowController attributesWindowController;
|
|
[SerializeField] private JudgementMenuController judgementMenuController;
|
|
[SerializeField] private QuestLogMenuController questLogMenuController;
|
|
[SerializeField] private TradeMenuController tradeMenuController;
|
|
[SerializeField] private MenuScroll menuScroll;
|
|
|
|
[SerializeField]
|
|
private GameObject UIHUD;
|
|
|
|
[SerializeField] private GameObject mainParentMenu, judgementParentMenu, tradeParentMenu;
|
|
private GameObject currentParentMenu;
|
|
private bool isLocked = false;
|
|
|
|
private void Awake()
|
|
{
|
|
menuScroll.OnClosed += ShowOtherUI;
|
|
menuScroll.OnOpened += StopTime;
|
|
menuScroll.OnClosed += StartTime;
|
|
currentSubmenuContainer = menuSubmenuContainer;
|
|
currentParentMenu = mainParentMenu;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (!menuScroll) return;
|
|
menuScroll.OnClosed -= ShowOtherUI;
|
|
menuScroll.OnOpened -= StopTime;
|
|
menuScroll.OnClosed -= StartTime;
|
|
}
|
|
|
|
private void StartTime()
|
|
{
|
|
TimeController.Instance.SetTimeScale(1f);
|
|
}
|
|
|
|
private void StopTime()
|
|
{
|
|
TimeController.Instance.SetTimeScale(0f);
|
|
}
|
|
|
|
public void OpenInventory()
|
|
{
|
|
OpenInventoryBase();
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(menuSubmenuContainer, currentSubmenuContainer));
|
|
}
|
|
|
|
public void OpenInventoryBase()
|
|
{
|
|
inventoryMenuController.OpenInventory();
|
|
currentSubmenuContainer = inventorySubmenuContainer;
|
|
}
|
|
|
|
[Button]
|
|
public void TryToOpenImmediateShadowSlayer()
|
|
{
|
|
SetActiveParentMenu(mainParentMenu);
|
|
currentSubmenuContainer.parentObject.SetActive(false);
|
|
if (menuScroll.m_currentCanva)
|
|
{
|
|
menuScroll.m_currentCanva.SetActive(false);
|
|
}
|
|
OpenInventoryBase();
|
|
//select that gemstone you want
|
|
currentSubmenuContainer.parentObject.SetActive(true);
|
|
// menuScroll.m_currentlyOpenedElementsContainer.se
|
|
|
|
menuScroll.m_currentlyOpenedElementsContainer = currentSubmenuContainer;
|
|
inventoryMenuController.TryToSelectShadowSlayerInWeaponsArea();
|
|
OpenMenuBase();
|
|
}
|
|
|
|
public void OpenKnowledge()
|
|
{
|
|
currentSubmenuContainer = knowledgeSubmenuContainer;
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(menuSubmenuContainer, currentSubmenuContainer));
|
|
}
|
|
|
|
public void OpenAttributes()
|
|
{
|
|
menuScroll.OnOpened += attributesWindowController.SetProperValues;
|
|
currentSubmenuContainer = attributesSubmenuContainer;
|
|
attributesWindowController.OpenAttributes();
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(menuSubmenuContainer, currentSubmenuContainer));
|
|
}
|
|
|
|
public void OpenPowers()
|
|
{
|
|
OpenPowersBase();
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(menuSubmenuContainer, currentSubmenuContainer));
|
|
}
|
|
|
|
public void OpenPowersBase()
|
|
{
|
|
currentSubmenuContainer = powersSubmenuContainer;
|
|
powersMenuController.OpenPowers();
|
|
}
|
|
|
|
[Button]
|
|
public void OpenImmediateCovertGaze()
|
|
{
|
|
SetActiveParentMenu(mainParentMenu);
|
|
currentSubmenuContainer.parentObject.SetActive(false);
|
|
if (menuScroll.m_currentCanva)
|
|
{
|
|
menuScroll.m_currentCanva.SetActive(false);
|
|
}
|
|
OpenPowersBase();
|
|
currentSubmenuContainer.parentObject.SetActive(true);
|
|
menuScroll.m_currentlyOpenedElementsContainer = currentSubmenuContainer;
|
|
powersMenuController.TryToOpenScrollsOnPowerGaze();
|
|
OpenMenuBase();
|
|
}
|
|
|
|
public void OpenSkills()
|
|
{
|
|
OpenSkillsBase();
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(menuSubmenuContainer, currentSubmenuContainer));
|
|
}
|
|
|
|
public void OpenSkillsBase()
|
|
{
|
|
menuScroll.OnOpened += skillsMenuController.RefreshSpellsWindow;
|
|
skillsMenuController.RefreshSpellsWindow();
|
|
currentSubmenuContainer = skillsSubmenuContainer;
|
|
}
|
|
|
|
[Button]
|
|
public void OpenImmediateSkills()
|
|
{
|
|
SetActiveParentMenu(mainParentMenu);
|
|
currentSubmenuContainer.parentObject.SetActive(false);
|
|
if (menuScroll.m_currentCanva)
|
|
{
|
|
menuScroll.m_currentCanva.SetActive(false);
|
|
}
|
|
OpenSkillsBase();
|
|
currentSubmenuContainer.parentObject.SetActive(true);
|
|
menuScroll.m_currentlyOpenedElementsContainer = currentSubmenuContainer;
|
|
OpenMenuBase();
|
|
}
|
|
|
|
public void OpenQuestLog()
|
|
{
|
|
menuScroll.OnOpened += questLogMenuController.OpenJournal;
|
|
currentSubmenuContainer = questLogSubmenuContainer;
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(menuSubmenuContainer, currentSubmenuContainer));
|
|
questLogMenuController.OpenJournal();
|
|
}
|
|
|
|
public void OpenMap()
|
|
{
|
|
currentSubmenuContainer = mapSubmenuContainer;
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(menuSubmenuContainer, currentSubmenuContainer));
|
|
}
|
|
|
|
public void OpenQuitWarning()
|
|
{
|
|
currentSubmenuContainer = warningQuitSubmenuContainer;
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(menuSubmenuContainer, currentSubmenuContainer));
|
|
}
|
|
|
|
public void LoadMainMenuScene()
|
|
{
|
|
currentSubmenuContainer.interactableCanvas.ForEach(canva => canva.interactable = false);
|
|
TimeController.Instance.SetTimeScale(1);
|
|
StartCoroutine(LoadMainMenuCoroutine());
|
|
}
|
|
|
|
private IEnumerator LoadMainMenuCoroutine()
|
|
{
|
|
FadeCanvasGroup.Instance.FadeOut(mainMenuSceneFadeTime);
|
|
yield return new WaitForSecondsRealtime(mainMenuSceneFadeTime);
|
|
ProxySceneLoader.LoadScene($"index:{0}");
|
|
}
|
|
|
|
public void OpenMenuSelector()
|
|
{
|
|
if (currentSubmenuContainer == skillsSubmenuContainer)
|
|
{
|
|
menuScroll.OnOpened -= skillsMenuController.RefreshSpellsWindow;
|
|
}
|
|
else if (currentSubmenuContainer == inventorySubmenuContainer)
|
|
{
|
|
inventoryMenuController.CloseInventory();
|
|
}
|
|
else if (currentSubmenuContainer == attributesSubmenuContainer)
|
|
{
|
|
menuScroll.OnOpened -= attributesWindowController.SetProperValues; //unify all exits on interface/methods? //could be currentWindow.Exit() and no if else
|
|
}
|
|
else if (currentSubmenuContainer == questLogSubmenuContainer)
|
|
{
|
|
menuScroll.OnOpened -= questLogMenuController.OpenJournal;
|
|
}
|
|
else if (currentSubmenuContainer == powersSubmenuContainer)
|
|
{
|
|
powersMenuController.ClosePowers();
|
|
}
|
|
|
|
StartCoroutine(menuScroll.ChangeVisibleCanvaCoroutine(currentSubmenuContainer, menuSubmenuContainer));
|
|
currentSubmenuContainer = menuSubmenuContainer;
|
|
}
|
|
|
|
public void ShowOtherUI()
|
|
{
|
|
UIHUD.SetActive(true);
|
|
|
|
// isLocked = false;
|
|
}
|
|
|
|
public void OpenMenu()
|
|
{
|
|
if (MusicManager.instance)
|
|
{
|
|
MusicManager.instance.MuteMusic();
|
|
}
|
|
menuScroll.m_currentlyOpenedElementsContainer = currentSubmenuContainer;
|
|
SetActiveParentMenu(mainParentMenu);
|
|
OpenMenuBase();
|
|
}
|
|
|
|
public void OpenMenuBase()
|
|
{
|
|
UIHUD.SetActive(false);
|
|
menuScroll.OpenScroll();
|
|
}
|
|
|
|
[Button]
|
|
public void OpenJudgementMenu()
|
|
{
|
|
//if (MenuScrollHasCanvaFromMainMenuSet())
|
|
//{
|
|
// currentSubmenuContainer = menuScroll.currentlyOpenedElementsContainer;
|
|
//}
|
|
//else
|
|
//{
|
|
// menuScroll.currentlyOpenedElementsContainer = judgementSubmenuContainer;
|
|
//}
|
|
|
|
SetActiveParentMenu(judgementParentMenu);
|
|
OpenMenuBase();
|
|
judgementMenuController.OpenJudgementWindow();
|
|
}
|
|
|
|
private bool MenuScrollHasCanvaFromMainMenuSet()
|
|
{
|
|
return menuScroll.m_currentlyOpenedElementsContainer != judgementSubmenuContainer || menuScroll.m_currentlyOpenedElementsContainer != tradeSubmenuContainer;
|
|
}
|
|
|
|
[Button]
|
|
public void OpenTradeWindow()
|
|
{
|
|
OpenTradeWindowBase();
|
|
tradeMenuController.SetSelectorWindow();
|
|
}
|
|
|
|
public void OpenTradeWindowBase()
|
|
{
|
|
//if (MenuScrollHasCanvaFromMainMenuSet())
|
|
//{
|
|
// currentSubmenuContainer = menuScroll.currentlyOpenedElementsContainer;
|
|
//}
|
|
//else
|
|
//{
|
|
// menuScroll.currentlyOpenedElementsContainer = tradeSubmenuContainer;
|
|
//}
|
|
|
|
SetActiveParentMenu(tradeParentMenu);
|
|
OpenMenuBase();
|
|
// tradeMenuController.OpenSelectorWindow();
|
|
}
|
|
|
|
[Button]
|
|
public void OpenConcreteTradeWindow(TradeOption option, TradeCategory category)
|
|
{
|
|
OpenTradeWindowBase();
|
|
switch (option)
|
|
{
|
|
case TradeOption.Buy:
|
|
tradeMenuController.OpenBuyWindowStandalone(category);
|
|
break;
|
|
|
|
case TradeOption.Sell:
|
|
tradeMenuController.OpenSellWindowStandalone(category);
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void OpenBuyScrolls()
|
|
{
|
|
OpenConcreteTradeWindow(TradeOption.Buy, TradeCategory.Scrolls);
|
|
}
|
|
|
|
/// <summary>
|
|
/// should be no longer needed?
|
|
/// </summary>
|
|
/// <param name="parentMenu"></param>
|
|
private void SetActiveParentMenu(GameObject parentMenu)
|
|
{
|
|
if (currentParentMenu)
|
|
{
|
|
currentParentMenu.SetActive(false);
|
|
}
|
|
|
|
currentParentMenu = parentMenu;
|
|
currentParentMenu.SetActive(true);
|
|
}
|
|
|
|
public void CloseMenu()
|
|
{
|
|
if (MusicManager.instance)
|
|
{
|
|
MusicManager.instance.UnmuteMusic();
|
|
}
|
|
menuScroll.OpenCloseScroll(false);
|
|
}
|
|
|
|
public void LateUpdate()
|
|
{
|
|
OpenCloseMenu();
|
|
}
|
|
|
|
public void OpenCloseMenu()
|
|
{
|
|
if (!openInput.GetButtonDown() || isLocked) return;
|
|
if (menuScroll.m_isOpen)
|
|
{
|
|
CloseMenu();
|
|
}
|
|
else
|
|
{
|
|
//if (currentSubmenuContainer)
|
|
//{
|
|
// menuScroll.currentlyOpenedElementsContainer = currentSubmenuContainer;
|
|
//}
|
|
OpenMenu();
|
|
}
|
|
}
|
|
}
|
|
} |