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");
///
/// Dimming of inputs is currently unsuported
///
[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);
}
///
/// should be no longer needed?
///
///
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();
}
}
}
}