using System; using UnityEngine; namespace AibisDream.UI.Terminal { public class TerminalStartPanel : MonoBehaviour, IUIPanel { [SerializeField] private TerminalPanelAnimator panelAnimator; [SerializeField] private TerminalHeaderView header; [SerializeField] private TerminalMenuItemView newGameItem; [SerializeField] private TerminalMenuItemView chapterItem; [SerializeField] private TerminalMenuItemView settingItem; [SerializeField] private TerminalMenuItemView quitItem; public bool IsOpen => gameObject.activeSelf; public bool IsCloseable => false; private TerminalMenuItemView _selectedItem; 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() { // header?.SetText("<选择章节>", "CHAPER xx/xxx - LOADING - DT"); // newGameItem?.SetContent("新游戏.....", "pending", "Current date: 04/2020"); // chapterItem?.SetContent("选择章节....", "check ok", "Current date: 00/2020"); // settingItem?.SetContent("设置.......", "pending", "Current date: xx/xxxx"); // quitItem?.SetContent("退出.......", "-----", "-----: 00/0000", isDanger: true); // SelectItem(chapterItem != null ? chapterItem : newGameItem); 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() { GameManager.Instance.StartNewGame(); } private static void OpenChapter() { UIManager.Instance.ShowPreferredChapterPanel(); } private static void OpenSetting() { UIManager.Instance.ShowPreferredSettingPanel(); } private static void QuitApp() { GameManager.Instance.QuitApp(); } } }