using System; using UnityEngine; namespace AibisDream.UI.Terminal { public class TerminalStartPanel : MonoBehaviour { [SerializeField] private TerminalPanelAnimator panelAnimator; [SerializeField] private TerminalMenuItemView newGameItem; [SerializeField] private TerminalMenuItemView chapterItem; [SerializeField] private TerminalMenuItemView settingItem; [SerializeField] private TerminalMenuItemView quitItem; private TerminalPanel _owner; private TerminalMenuItemView _selectedItem; public bool IsOpen => gameObject.activeSelf; public void SetOwner(TerminalPanel owner) { _owner = owner; } private void Awake() { RegisterItem(newGameItem, StartNewGame); RegisterItem(chapterItem, OpenChapter); RegisterItem(settingItem, OpenSetting); RegisterItem(quitItem, QuitApp); } private void OnDestroy() { UnregisterItem(newGameItem); UnregisterItem(chapterItem); UnregisterItem(settingItem); UnregisterItem(quitItem); } public void Show() { _owner?.SetHeader("<选择章节>", "CHAPER xx/xxx - LOADING - DT"); if (panelAnimator != null) { panelAnimator.Show(); } else { gameObject.SetActive(true); } } public void Hide() { if (panelAnimator != null) { panelAnimator.Hide(); } else { gameObject.SetActive(false); } } private void RegisterItem(TerminalMenuItemView item, Action action) { if (item == null) { return; } item.Hovered += SelectItem; item.Clicked += _ => action?.Invoke(); } private void UnregisterItem(TerminalMenuItemView item) { if (item == null) { return; } item.Hovered -= SelectItem; } private void SelectItem(TerminalMenuItemView item) { if (_selectedItem != null) { _selectedItem.SetSelected(false); } _selectedItem = item; _selectedItem?.SetSelected(true); } private static void StartNewGame() { UIManager.Instance.CloseTerminalThen(() => GameManager.Instance.StartNewGame()); } private void OpenChapter() { _owner.SwitchTo(TerminalPage.Chapter); } private void OpenSetting() { _owner.SwitchTo(TerminalPage.Setting); } private static void QuitApp() { GameManager.Instance.QuitApp(); } } }