293 lines
10 KiB
C#
293 lines
10 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class NewMainMenu_ConsoleMenu : MonoBehaviour
|
|
{
|
|
public List<TextMeshProUGUI> BackgroundTextLines = new List<TextMeshProUGUI>();
|
|
|
|
public TextMeshProUGUI MainText;
|
|
|
|
[SerializeField]
|
|
private List<int> BackgroundTextMaxCount = new List<int>();
|
|
|
|
private int CurrentSelected;
|
|
|
|
private int previousSelected = -1;
|
|
|
|
private float DELHoldTime;
|
|
|
|
[SerializeField]
|
|
private Image DELStaticImage;
|
|
|
|
[SerializeField]
|
|
private AudioSource DELStaticSource;
|
|
|
|
[SerializeField]
|
|
private NewMainMenu_QuitSubMenu DELQuitMenu;
|
|
|
|
[SerializeField]
|
|
private TextMeshProUGUI VersionText;
|
|
|
|
private bool UnlockedGambling;
|
|
|
|
public Animator CameraAnimator;
|
|
|
|
private bool wasEnabled;
|
|
|
|
public GameObject[] SubMenuGameobjects;
|
|
|
|
public GameObject[] SubMenuGameobjects_Gambling;
|
|
|
|
private bool AllTextShown;
|
|
|
|
private bool AllowInput;
|
|
|
|
private void Awake()
|
|
{
|
|
VersionText.text = "汉化构建V8\n已汉化78%\n\n反馈群797416533";
|
|
foreach (TextMeshProUGUI backgroundTextLine in BackgroundTextLines)
|
|
{
|
|
BackgroundTextMaxCount.Add(backgroundTextLine.text.Length);
|
|
backgroundTextLine.maxVisibleCharacters = 0;
|
|
}
|
|
if (PlayerPrefs.GetInt("TipShown_MainMenuControls", 0) == 0)
|
|
{
|
|
PlayerPrefs.SetInt("TipShown_MainMenuControls", 1);
|
|
GonerMenu.Instance.ShowTip($"按<color=yellow>{PlayerInput.Instance.Key_Confirm}</color>确定, 按<color=yellow>{PlayerInput.Instance.Key_Cancel}</color>返回, 使用<color=yellow>方向键</color>选择条目。");
|
|
}
|
|
if (PlayerPrefs.GetInt("UnlockedGambling", 0) == 1)
|
|
{
|
|
UnlockedGambling = true;
|
|
}
|
|
DELHoldTime = 0f;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!GonerMenu.Instance.GonerMenuOpen && AllowInput)
|
|
{
|
|
if (Input.GetKeyDown(PlayerInput.Instance.Key_Down))
|
|
{
|
|
CurrentSelected++;
|
|
CheckCurrentSelectedOutsideBounds();
|
|
CheckUpdateScreenText();
|
|
}
|
|
if (Input.GetKeyDown(PlayerInput.Instance.Key_Up))
|
|
{
|
|
CurrentSelected--;
|
|
CheckCurrentSelectedOutsideBounds();
|
|
CheckUpdateScreenText();
|
|
}
|
|
if (Input.GetKeyDown(PlayerInput.Instance.Key_Confirm) || Input.GetKeyDown(PlayerInput.Instance.Key_Menu))
|
|
{
|
|
SelectSubMenu();
|
|
}
|
|
}
|
|
if (!wasEnabled && base.gameObject.activeSelf)
|
|
{
|
|
wasEnabled = true;
|
|
AllowInput = true;
|
|
if (CameraAnimator.GetCurrentAnimatorStateInfo(0).IsName("MainMenu_Camera_MonitorZoomIn"))
|
|
{
|
|
CameraAnimator.Play("MainMenu_Camera_MonitorZoomOut");
|
|
}
|
|
if (PlayerPrefs.GetInt("UnlockedGambling", 0) == 1)
|
|
{
|
|
UnlockedGambling = true;
|
|
}
|
|
DELHoldTime = 0f;
|
|
DEBUG_EnableMarkiplier.ChangeMarkiplierState(DEBUG_EnableMarkiplier.MarkiplierEmotions.Default);
|
|
StartCoroutine(ShowBackgroundText());
|
|
CheckUpdateScreenText();
|
|
}
|
|
if (DELHoldTime < 5f && AllowInput)
|
|
{
|
|
if (Input.GetKey(KeyCode.Delete))
|
|
{
|
|
DELHoldTime += Time.deltaTime;
|
|
}
|
|
else
|
|
{
|
|
DELHoldTime = Mathf.Lerp(DELHoldTime, 0f, 2f * Time.deltaTime);
|
|
}
|
|
}
|
|
DELStaticImage.color = new Color(1f, 1f, 1f, DELHoldTime / 5f);
|
|
DELStaticSource.volume = DELHoldTime / 5f;
|
|
if (DELHoldTime >= 5f && AllowInput)
|
|
{
|
|
AllowInput = false;
|
|
StopCoroutine("SelectSubMenuTimer");
|
|
int @int = PlayerPrefs.GetInt("TimesPlayed", 0);
|
|
PlayerPrefs.DeleteAll();
|
|
PlayerPrefs.SetInt("TimesPLayed", @int);
|
|
DELQuitMenu.gameObject.SetActive(value: true);
|
|
DELQuitMenu.StartCoroutine(DELQuitMenu.QuitSequence());
|
|
}
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
wasEnabled = false;
|
|
previousSelected = -1;
|
|
AllTextShown = false;
|
|
ChangeMainText("", AllowAnimation: false);
|
|
DELHoldTime = 0f;
|
|
foreach (TextMeshProUGUI backgroundTextLine in BackgroundTextLines)
|
|
{
|
|
backgroundTextLine.maxVisibleCharacters = 0;
|
|
}
|
|
}
|
|
|
|
private void SelectSubMenu()
|
|
{
|
|
AllowInput = false;
|
|
previousSelected = -1;
|
|
NewMainMenuManager.instance.MenuSource.PlayOneShot(NewMainMenuManager.instance.SFX_MenuSelect);
|
|
StartCoroutine(SelectSubMenuTimer());
|
|
CheckUpdateScreenText();
|
|
}
|
|
|
|
private IEnumerator SelectSubMenuTimer()
|
|
{
|
|
CameraAnimator.Play("MainMenu_Camera_MonitorZoomIn");
|
|
yield return new WaitForSeconds(0.5f);
|
|
if (UnlockedGambling)
|
|
{
|
|
SubMenuGameobjects_Gambling[CurrentSelected].SetActive(value: true);
|
|
}
|
|
else
|
|
{
|
|
SubMenuGameobjects[CurrentSelected].SetActive(value: true);
|
|
}
|
|
base.gameObject.SetActive(value: false);
|
|
}
|
|
|
|
private void CheckCurrentSelectedOutsideBounds()
|
|
{
|
|
if (UnlockedGambling)
|
|
{
|
|
if (CurrentSelected < 0)
|
|
{
|
|
CurrentSelected = 7;
|
|
}
|
|
if (CurrentSelected > 7)
|
|
{
|
|
CurrentSelected = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (CurrentSelected < 0)
|
|
{
|
|
CurrentSelected = 6;
|
|
}
|
|
if (CurrentSelected > 6)
|
|
{
|
|
CurrentSelected = 0;
|
|
}
|
|
}
|
|
NewMainMenuManager.instance.MenuSource.PlayOneShot(NewMainMenuManager.instance.SFX_MenuMove);
|
|
}
|
|
|
|
private void CheckUpdateScreenText()
|
|
{
|
|
if (previousSelected == CurrentSelected)
|
|
{
|
|
return;
|
|
}
|
|
previousSelected = CurrentSelected;
|
|
string text = "<b>>请选择一个条目</b>\r\n\n";
|
|
string[] array = new string[7] { "模拟猜想", "查看日志", "游戏设置", "制作组", "额外内容", "Discord", "退出游戏" };
|
|
string[] array2 = new string[8] { "模拟猜想", "查看日志", "进入赌博", "游戏设置", "制作组", "额外内容", "Discord", "退出游戏" };
|
|
if (UnlockedGambling)
|
|
{
|
|
for (int i = 0; i < array2.Length; i++)
|
|
{
|
|
text = ((CurrentSelected != i) ? (text + array2[i] + "\n") : (AllowInput ? (text + "<color=yellow>-> " + array2[i] + "</color>\n") : (text + "<color=green>-> " + array2[i] + "</color>\n")));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int j = 0; j < array.Length; j++)
|
|
{
|
|
text = ((CurrentSelected != j) ? (text + array[j] + "\n") : (AllowInput ? (text + "<color=yellow>-> " + array[j] + "</color>\n") : (text + "<color=green>-> " + array[j] + "</color>\n")));
|
|
}
|
|
}
|
|
ChangeMainText(text, AllowAnimation: true);
|
|
}
|
|
|
|
private IEnumerator ShowBackgroundText()
|
|
{
|
|
if (!SettingsManager.Instance.GetBoolSettingValue("SimpleVFX"))
|
|
{
|
|
List<TextMeshProUGUI> finishedTexts = new List<TextMeshProUGUI>();
|
|
while (!AllTextShown)
|
|
{
|
|
yield return null;
|
|
foreach (TextMeshProUGUI backgroundTextLine in BackgroundTextLines)
|
|
{
|
|
if (!finishedTexts.Contains(backgroundTextLine) && backgroundTextLine.maxVisibleCharacters >= backgroundTextLine.text.Length)
|
|
{
|
|
finishedTexts.Add(backgroundTextLine);
|
|
}
|
|
else if (backgroundTextLine.maxVisibleCharacters < backgroundTextLine.text.Length)
|
|
{
|
|
float num = 100 + Random.Range(-60, -10);
|
|
backgroundTextLine.maxVisibleCharacters += Mathf.CeilToInt(num * Time.deltaTime);
|
|
backgroundTextLine.maxVisibleCharacters = Mathf.Clamp(backgroundTextLine.maxVisibleCharacters, 0, backgroundTextLine.text.Length);
|
|
NewMainMenuManager.instance.MenuSource.PlayOneShot(NewMainMenuManager.instance.SFX_MenuClick);
|
|
}
|
|
}
|
|
if (CompareTextLists(finishedTexts, BackgroundTextLines))
|
|
{
|
|
AllTextShown = true;
|
|
MonoBehaviour.print("all text shown");
|
|
}
|
|
}
|
|
yield break;
|
|
}
|
|
foreach (TextMeshProUGUI backgroundTextLine2 in BackgroundTextLines)
|
|
{
|
|
backgroundTextLine2.maxVisibleCharacters = backgroundTextLine2.text.Length;
|
|
}
|
|
}
|
|
|
|
private bool CompareTextLists(List<TextMeshProUGUI> list1, List<TextMeshProUGUI> list2)
|
|
{
|
|
if (list1.Count != list2.Count)
|
|
{
|
|
return false;
|
|
}
|
|
for (int i = 0; i < list1.Count; i++)
|
|
{
|
|
if (list1[i].text != list2[i].text)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public void ChangeMainText(string text, bool AllowAnimation)
|
|
{
|
|
MainText.text = text;
|
|
MainText.maxVisibleCharacters = text.Length;
|
|
}
|
|
|
|
private IEnumerator ScrollMainText()
|
|
{
|
|
yield return null;
|
|
while (MainText.maxVisibleCharacters < MainText.text.Length)
|
|
{
|
|
float num = 600 + Random.Range(-120, 0);
|
|
MainText.maxVisibleCharacters += Mathf.CeilToInt(num * Time.deltaTime);
|
|
MainText.maxVisibleCharacters = Mathf.Clamp(MainText.maxVisibleCharacters, 0, MainText.text.Length);
|
|
NewMainMenuManager.instance.MenuSource.PlayOneShot(NewMainMenuManager.instance.SFX_MenuClick);
|
|
yield return null;
|
|
}
|
|
}
|
|
}
|