Files
aibis-dream/Assets/Scripts/Game Loop/StartMenu.cs
T
2024-11-15 06:35:27 +08:00

101 lines
2.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using AibisDream.Kit;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace AibisDream {
public class StartMenu : Singleton<StartMenu>
{
[SerializeField] private Button startButton;
[SerializeField] private Button selectLevelButton;
[SerializeField] private Button quitButton;
[SerializeField] private GameObject startTab;
[SerializeField] private GameObject levelTab;
[SerializeField] private TalkSceneSO[] talkSceneSoArray;
[SerializeField] private GameObject buttonPrefab;
private void OnEnable()
{
startButton.onClick.AddListener(StartGame);
selectLevelButton.onClick.AddListener(SelectLevel);
quitButton.onClick.AddListener(QuitGame);
}
private void OnDisable()
{
startButton?.onClick.RemoveListener(StartGame);
selectLevelButton?.onClick.RemoveListener(SelectLevel);
quitButton?.onClick.RemoveListener(QuitGame);
}
public void StartGame()
{
GameLoopManager.Instance.StartNewGame();
}
public void SelectLevel()
{
SwitchToLevelTab();
// 生成关卡按钮
GeneLevelButtons();
}
private void GeneLevelButtons()
{
// 销毁原来的按钮
foreach (Transform child in levelTab.transform)
{
if (child.gameObject.name == "Suggestion")
{
continue;
}
Destroy(child.gameObject);
}
// 生成新按钮
for (int i = 0; i < talkSceneSoArray.Length; i++)
{
var tempButton = Instantiate(buttonPrefab, levelTab.transform);
tempButton.GetComponent<TextMeshProUGUI>().text = $"第{i + 1}关";
var idx = i;
tempButton.GetComponent<Button>().onClick.AddListener(() =>
{
GameLoopManager.Instance.StartNewGame(talkSceneSoArray[idx]);
});
}
// 生成返回按钮
var returnButton = Instantiate(buttonPrefab, levelTab.transform);
returnButton.GetComponent<TextMeshProUGUI>().text = "返回";
returnButton.GetComponent<Button>().onClick.AddListener(SwitchToStartTab);
}
private void SwitchToLevelTab()
{
startTab.SetActive(false);
levelTab.SetActive(true);
}
private void SwitchToStartTab()
{
startTab.SetActive(true);
levelTab.SetActive(false);
}
public void QuitGame()
{
Application.Quit();
}
public void HideStartMenu()
{
gameObject.SetActive(false);
}
}
}