summaryrefslogtreecommitdiff
path: root/GameCode/ListMenu.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-10-27 11:05:14 +0800
committerchai <215380520@qq.com>2023-10-27 11:05:14 +0800
commit766cdff5ffa72b65d7f106658d1603f47739b2ba (patch)
tree34d7799a94dfa9be182825577583c0fa6dc935f7 /GameCode/ListMenu.cs
+ init
Diffstat (limited to 'GameCode/ListMenu.cs')
-rw-r--r--GameCode/ListMenu.cs136
1 files changed, 136 insertions, 0 deletions
diff --git a/GameCode/ListMenu.cs b/GameCode/ListMenu.cs
new file mode 100644
index 0000000..1ed98f6
--- /dev/null
+++ b/GameCode/ListMenu.cs
@@ -0,0 +1,136 @@
+using System.Collections;
+using SoundImplementation;
+using UnityEngine;
+using UnityEngine.EventSystems;
+
+public class ListMenu : MonoBehaviour
+{
+ [Header("Settings")]
+ public GameObject bar;
+
+ [Header("Settings")]
+ public GameObject particle;
+
+ public ListMenuButton selectedButton;
+
+ public ListMenuPage selectedPage;
+
+ public static ListMenu instance;
+
+ public GameObject menuCanvas;
+
+ private bool isActive = true;
+
+ private Vector3 lastPos;
+
+ private bool playButtonHoverFirst = true;
+
+ private void Awake()
+ {
+ instance = this;
+ }
+
+ private void Start()
+ {
+ GetComponentInChildren<ListMenuPage>(includeInactive: true).Open();
+ }
+
+ private void Update()
+ {
+ if ((lastPos - bar.transform.position).sqrMagnitude > 0.5f && (MainMenuHandler.instance.isOpen || EscapeMenuHandler.isEscMenu))
+ {
+ if (!playButtonHoverFirst)
+ {
+ SoundPlayerStatic.Instance.PlayButtonHover();
+ }
+ else
+ {
+ playButtonHoverFirst = false;
+ }
+ }
+ lastPos = bar.transform.position;
+ if ((bool)selectedButton && EventSystem.current.currentSelectedGameObject == null)
+ {
+ EventSystem.current.SetSelectedGameObject(selectedButton.gameObject);
+ }
+ if (EscapeMenuHandler.isEscMenu || menuCanvas.activeInHierarchy)
+ {
+ if (!bar.activeSelf)
+ {
+ bar.SetActive(value: true);
+ particle.SetActive(value: true);
+ }
+ }
+ else if (bar.activeSelf)
+ {
+ bar.SetActive(value: false);
+ particle.SetActive(value: false);
+ }
+ }
+
+ internal void DeselectButton()
+ {
+ if ((bool)selectedButton)
+ {
+ selectedButton.Deselect();
+ }
+ }
+
+ public void OpenPage(ListMenuPage pageToOpen)
+ {
+ if ((bool)selectedPage)
+ {
+ selectedPage.Close();
+ }
+ bar.transform.localScale = new Vector3(bar.transform.localScale.x, pageToOpen.barHeight, 1f);
+ selectedPage = pageToOpen;
+ if (MenuControllerHandler.menuControl == MenuControllerHandler.MenuControl.Controller)
+ {
+ SelectButton(selectedPage.firstSelected);
+ }
+ else
+ {
+ bar.transform.position = Vector3.up * 10000f;
+ }
+ }
+
+ public void SelectButton(ListMenuButton buttonToSelect)
+ {
+ if (!buttonToSelect || buttonToSelect.hideBar)
+ {
+ bar.transform.position = Vector3.up * 10000f;
+ }
+ else
+ {
+ StartCoroutine(ISelectButton(buttonToSelect));
+ }
+ }
+
+ public IEnumerator ISelectButton(ListMenuButton buttonToSelect)
+ {
+ if ((bool)selectedButton)
+ {
+ selectedButton.Deselect();
+ }
+ yield return new WaitForEndOfFrame();
+ buttonToSelect.Select();
+ selectedButton = buttonToSelect;
+ bar.transform.position = buttonToSelect.transform.position;
+ if (EventSystem.current.currentSelectedGameObject != selectedButton.gameObject)
+ {
+ EventSystem.current.SetSelectedGameObject(selectedButton.gameObject);
+ }
+ if (buttonToSelect.setBarHeight != 0f)
+ {
+ bar.transform.localScale = new Vector3(bar.transform.localScale.x, buttonToSelect.setBarHeight, 1f);
+ }
+ }
+
+ public void ClearBar()
+ {
+ if (MenuControllerHandler.menuControl != 0)
+ {
+ bar.transform.position = Vector3.up * 10000f;
+ }
+ }
+}